title.jpg (20464 bytes)

Cybert Menu:        

 buttblue.jpg (750 bytes) Home
Return to the Main Menu.
 buttblue.jpg (750 bytes) Cybert Home
The Cybert Homepage.
 buttblue.jpg (750 bytes) Project Log
Follow Cybert's progress.
 buttblue.jpg (750 bytes) Project Goals
Read about my project goals.
 buttblue.jpg (750 bytes) Gallery
Enjoy some pictures and movies of Cybert!
 buttblue.jpg (750 bytes) Cybert Programming
Read about Cybert's low level and high level code.
 buttblue.jpg (750 bytes) Reports
Study reports about Cybert's creation and programming.

Hit Counter
Hits since November 4, 2000

The Cybert Project Log

March 7, 2001
Well, it's time for me to take a little break from Cybert, this website, and robots in general.  I've enjoyed working on my little robot pal, and it's been fun to update this webpage with my discoveries, problems, and triumphs, but now I need to spend my spare time doing something else for awhile.  I haven't grown tired of robotics, but I'll admit that I do get discouraged when I realize that all the hard work has no long term payoff potential.  I mean, I can't manufacture and sell "Cyberts", I can't sell the program I've been writing, and I can't charge for the website.  (Wow, do I sound like a disgusting capitalist pig or what?? <grin>)

I guess the point I'm trying to make is that I just don't have enough incentive to keep working on the hobby.  It's still fun, but the programming has gotten complicated and frustrating at times; the novelty has sort of worn off for my wife and daughter; and not many people read this website.  At times I think, "Why bother?" 

I'm an entertainer at heart with a lot of creative ideas bouncing around in my head all the time.  So I've decided to spend my spare time working on a screenplay.  This sounds like a lot of fun and there's always the possibility that I'll actually sell the thing!  That's pretty exciting.

Don't worry, I'll be back.

February 20, 2001
I had hoped to use one of the SoftVoice voices for Cybert (see my previous log entry).  Unfortunately, it proved too difficult to implement their API from Visual Basic.  So I took a few hours one evening and wrote a routine that randomly varies the pitch of each word Cybert speaks!  Sometimes, he puts emphasis on the wrong word and this makes him sound a bit strange: "Please move out OF the way", but most of the time it sounds great.  The real advantage is that Cybert can repeat the same line of text multiple times and it sounds a little different each utterance.

Further, I am now choosing different voices based on Cybert's mood.  Here are some examples:

Cybert's normal voice

This is how Cybert sounds when he is mad

This is Cybert's "playful" personality

Cybert changes to this voice to read the news

Sometimes Cybert gets really really depressed

When Cybert is feeling secure he gets an accent   

I've also made great progress on Cybert's programming.  Over the weekend I added over a dozen new behaviors and several hundred lines of dialogue.   New behaviors include:

BOO:  Cybert hides in the hallway and waits for someone to walk near him.  Then he charges forward and yells "BOO".

STRANGE MOOD: Cybert finds a human and says something strange like, "Please don't microwave my pants."

EXPLORE: If Cybert is feeling Secure he will go exploring.   Sometimes he will sing an "exploring" song as he moves around.

FIND PEOPLE: If Cybert is feeling Insecure he will seek out people using his light and sound sensors.  If he's not sure if someone is in a room he will ask, "Is anyone here?"

KNOCK KNOCK: Cybert will find people and tell a Knock Knock joke.   (He interprets any increase in ambient noise as an answer. i.e. "Dwayne Who?")

PLAY DOGS: Cybert will call the dogs to come play.  If he senses movement he talks to them while moving forward and back.  If he doesn't sense movement he rotates until he "sees" something nearby.

The scary part is that I added all these behaviors and I haven't tested any of them yet.  Chances are, there will be a lot of bugs as the integration of all the different behaviors is fairly complex.  I'll provide details in my next log entry.  I'll also write up a description of my mapping algorithm if anyone is interested.

February 7, 2001
I'm pretty pleased with the progress I've been making with Cybert, but there are two areas that have been bothering me: 

1.  I'm using Probotic's Map-N-Zap software to make Cybert navigate from room to room.  This means that MnZ has to be running all the time, and that my VB program must "virtually" select the app, move the cursor to the location on the screen I want, and then "virtually" click the mouse button.   It works, but it's a major kludge and it isn't very reliable.  (For example, if I accidentally scroll the map the mouse will no longer be over a hotspot when the button gets pushed.)

I'm thrilled to report that I am now using my VB program for everything!  I wrote a simple but effective pathing algorithm (in ONE NIGHT no less) and it seems to work pretty well.

2.  I'm very excited about Cybert's voice, moods, and the potential to give my robot a lot of personality.  BUT... I was watching Star Wars the other night and it dawned on me that R2D2... with no voice... no face even... is a lot more expressive and pet-like than Cybert.  I think part of the problem is the voice I'm using.  I don't have a lot of control over inflections so, while the voice doesn't sound completely artificial like the synthesizers of old, it also doesn't have any character.  It's monotone delivery is fine for business applications, but I need a voice that people will think is...well... cute.  I have been searching the web for a low-cost alternative to Microsoft's speech API, that I'm using now.  My current evaluation list includes DecTalk, and a program called SoftVoice, which claims to offer over 20 user-selectable (and modifiable) voices. 

I'll have more details on both of these areas soon...

January 25, 2001
One of my goals with Cybert has been to make him seem alive, and I've been looking forward to the day when I could tell stories about things he has done. Well, I'm pleased to announce that I now have not ONE but TWO stories to share with you!

NO-NONSENSE ROBOT
Earlier tonight I was working on some code to make Cybert avoid obstacles. The idea is pretty simple, when he senses an object he is supposed to do the following:

  • Stop
  • Say "Please move"
  • Wait a few seconds
  • If the obstacle is still there --> plot a course around it.
  • If the obstacle has moved --> Say "Thank you" and continue on.

To test the code, I sent Cybert home to dock with his charger and then put a cardboard box right in his path. He saw the box and said in a loud voice (I need to turn down his volume): "Please move". He looked left and right, but then he turned forward again and repeated "Please move." I guess he was frustrated because, without waiting, he just plowed into the box and knocked it halfway down the hall. As he rolled past it he remarked (rather snidely it seemed to me) "Thank you."

Naturally, I had invited my wife to watch this exhibition by my "smart" robot.  She must have giggled the entire time I was finding and fixing the bug.

CYBERT, THE FOUL-MOUTHED ROBOT
As I was writing code to make Cybert test for different events, I came to a blank subroutine I had set up called "ReactToSound". I was a bit frustrated right then so I just added the line: If CyeSoundSensor > 250 then Say "What the hell was that?" This code was supposed to be just a temporary placeholder, so I set the volume condition high enough that I didn't think it would ever "execute".

Then I forgot all about it.

Four hours later, as I was getting ready to go to bed, I decided to run one more test of the "WakeupCall" behavior I had been working on. This time Cybert performed flawlessly: he woke up at the correct time, plotted and followed a course to the bedroom, announced the news and weather (I turned off his voice for this part, as my wife and daughter were asleep), and then plotted a course home.

Unfortunately...

Cye robots "bump" walls to checkpoint their position. Well apparently, this makes a pretty loud sound inside the robot, because every single time Cybert bumped the wall he backed up and said LOUDLY, "What the hell was that?" I had to scramble to shut him up so he wouldn't wake anyone.

January 24, 2001
I spent a week in California on business, but the night before I left I managed to finish Cybert's hardware!  I'll post pictures (and videos!) sometime in the next week or so.  He looks pretty good... from a distance.  The only way I could get the hamster ball to stick to the back of his head was with a quarter pound of clear silicone glue.  It's a pretty sloppy job, but you can't really tell unless you're up close.

The day I got back from my trip I received the unfortunate news that Probotics won't be releasing a new version of their .OCX.  (It was supposed to include some navigation commands.)  I've spent the last several nights trying to figure out some workarounds and it's been rather frustrating.  I'll get there eventually.

January 12, 2001
I've done a little programming, but I've spent most of my free time working on Cybert's hardware... specifically, coming up with a good way to attach the head to the body and to cover the electronics. 

Cye robots come with a "hole" in the center of the robot that is several inches deep.  The optional wagon, vacuum cleaner, etc. come with a post that slides snugly inside to make a physical connection.  I figured this post would also be a good way to mount the head. 

I found, sorry to say, a toilet brush with a lid above the brush handle, and this should work well for my needs.  I snipped off the brush, cut a hole in the bottom of the plastic lid, painted the thing black, and glued the head inside.   (It fits snugly.)

I added a screw to the top of the post and tomorrow I'll drill a hole in the robot's head so the screw can poke out the top.  Then I'll use a nut to hold the head secure (hopefully).  The last step will be to glue part of a hamster ball to the back of the head.  The ball includes a screw on lid so I should be able to get inside the robot when I need to.

Not sure if I mentioned this, but I also cut a hole above Cybert's mouth and mounted the light sensor there... almost like a nose.

I'm VERY anxious to post a video of Cybert in action, but I want to get his look nailed down, and get him doing something interesting first!    

January 1, 2001
If you're familiar with Cybert you already know that I am using two FRS 2-way radios to give him a "voice".  The radio in the robot is working like a charm (though it is "on" 24 hours a day so I don't know how long it will last), but I've had a devil of a time finding the right radio to attach to my PC.   The issue is that all these radios are battery powered and none offer AC adapters.   Since I plan to leave it on all the time, that's obviously an untenable situation.

I tried soldering a power adapter to the battery contacts on one radio, but this produced a HORRIBLE humming sound that I was never able to eliminate.  I bought another radio with AC in, only to discover that the input is also used for the microphone.  (I need two inputs.)

Then I bought a Radio Shack model (twice the price of other models I've seen) that had a rechargeable battery connector -- but the manual says you shouldn't leave it plugged in for more than 15 hours at a time or it could be a fire hazard.  Also, I wasn't sure that the charger would be fast enough to keep the batteries powered since I wanted to leave the robot in continuous "transmit mode".

Today, while not even thinking about robots (yes, sometimes I have a life) I wandered past an FRS radio BASE STATION for sale.  It's designed to be permanently connected to AC power!  At $60.00 it was a little pricey but I'm happy with the purchase.  As a bonus, the radio has a VOX mode so I don't have to be transmitting 24 hours a day.  (Unfortunately, there is a second delay before the VOX kicks the radio to transmit mode.  My kludge is to make the robot say "delay" and then pause for .7 seconds before it says anything else.  This seems to work pretty well.)

Base Station URL:  www.un-wired.com


Just a quick update on my navigation experiments:  my VB program can now successfully plot a course from anywhere to anywhere else.  It will also convert the robot's coordinates to the new coordinates, and vica versa.   Unfortunately, getting Cybert to actually follow the course I created turned out to be harder than I thought.  The "MoveTo" command in the .OCX doesn't work well at all.  This probably has something to do with the handlelength (I won't bore anyone with the details) but even set to 0 the robot wanders around like a drunken sailor even when trying to navigate to a spot only a few feet away.  I'm not sure what the problem is -- I suspect the .OCX is trying to get the robot to the exact x,y location and sometimes it "misses" and has to go back for another try... or two.

I could break down the course into 2" inch path segments and use the built-in path commands (which is what Probotics recommends), but I've pretty much decided that the extra effort isn't worth my time right now.  Handling navigation myself would be nice, but the code is sort of hard to debug and there is no way (currently) for the robot to verify his position; so there is still a lot of work left to do, even though the basics are working.  I'd rather spend my time on other code right now.  (I might be able to use the navigation code when I want Cybert to get around an obstacle.)

Fortunately, while working on the navigation code, I figured out a workaround for the problem that prevented me from using MZ for navigation (when my VB program was running MZ couldn't establish contact with the robot).  Last night I discovered that if I turn off communications with the robot by setting the RobotAddress to 0, MZ starts up just fine.  After a delay I set the address back to 1 and everything works great!

Now it will be easy to make the robot go anywhere in the house!  I just need to create .ZAP files for everywhere I might want the robot to go, then tell my VB program to run them.  (When MZ runs the .ZAP file it calculates a course from wherever the robot currently is to the destination, then makes the robot follow the calculated course.)

December 30, 2000
About a month ago, Henry Thorne at Probotics promised a new version of the Map-N-Zap software that is better integrated with the .OCX.  This should provide some powerful new commands, such as a method to automatically navigate to hotspots.  He indicated that it would be ready sometime in early 2001.

But I'm not sure I want to wait that long; plus, it still won't include commands to interface with the range-finding sensor I added.

So...  I'm about halfway through the implementation of my own navigation routines in VB.  I'm basing my code on an occupancy/cost scheme detailed by Tucker Balch at this site: TeamBots.   (Look at the GridNav code and .pdf article.)

Gary Livick describes his implementation in this article: DocBot2.   Unfortunately, it takes his HC11 processor over three and half MINUTES every time he plans a route.  (My PIII processor takes less than a second to calculate a slightly larger map.  Three cheers for radio modems!!!) 

I have converted my upstairs map (the one I created using Map-N-Zap) to a text file that my VB program can use.  The code seems to be calculating a proper route from the robot to the goal, but I haven't tried to get Cye to follow the route yet.  I'm worried that this will either be very difficult, or else the robot will not move as smoothly as when I'm using the Map-N-Zap software.   (My grid units are roughly 12 inches by 12 inches.)

More details coming soon.

December 19, 2000
A number of people have asked me about Cybert's ability to provide up-to-the-minute information, and to check our e-mail.  I'm currently using a clever (and FREE) Microsoft Agent program called CyberBuddy.   Coincidentally, the animated computer character does almost EVERYTHING I wanted to be able to do with Cybert!  (He tells jokes, reads the news, updates users on the weather, gives stock reports, and more.)  Unfortunately, I don't have enough control over WHEN CyberBuddy speaks, so I've found some other options:

NetStepper
The NetStepper shareware program ($49.95) is a powerful Internet parsing program that allows you to do things like:

         1.  Create a text file with news headlines from Yahoo.
         2.  Compare book prices between Amazon and Barnes & Noble.
         3.  Retrieve stock quotes from 3 different sources.

I plan to use the program to access news, weather, and other sites so Cybert will always have interesting and informative things to say!

Best of all, you can use command line input so it can run automatically from VB, or using the Task Scheduler.  This should work well as I can call the program using command line variables at any time.

CsMail
This shareware ActiveX control runs with VB 5.0 and includes lots of simple commands to read and manipulate e-mail.  The single user license is only $20.00.

December 18, 2000
I've had a little bit of time to work on Cybert, but I haven't really accomplished much.  The radio I use for the robot's text-to-speech transmission is still running off batteries (none of the 2-way radios have AC adapters), so I bought a standard power adapter and soldered it to the battery compartment.  I thought I could solder the adapter wires to any of the +/- connectors but you apparently have to find the "main" connectors or it won't work.  I took the radio apart and discovered that the main connectors were both on the top.

Unfortunately, the 300mA adapter I bought didn't have enough amperage to drive the radio in transmit mode, so I had to buy ANOTHER adapter.   When I finally got it soldered in and everything was working I was greatly dismayed to learn that Cybert now "hums" so loudly it's impossible to hear him speak.   Apparently, there are no filters on the power adapters.  <sigh>   I'll probably buy a radio that has rechargeable batteries and just leave it charging all the time.  Not sure if that will work or not but I'll give it a try.

December 11, 2000
Our new puppies aren't completely housetrained yet and their favorite place to drop "midnight goodies" is right outside the doorway to the spare bedroom which houses Cybert's home base. Cye robots have no ground clearance they have the unfortunate tendency to SMEAR midnight goodies down the hall and wherever the robot moves.

This morning I came up with a great solution to this problem! Thanks to the power of Probotic's ZAP tool it took me about 10 minutes to create a little program called "Poop Patrol". Here's what it does: After I've gone to bed, Cybert moves into the doorway and turns on his range-finding sensor. If something comes within 3 feet of him he shouts: "No! Go outside to go potty!" Then he quickly moves back and forth, like he's angry. (I may even have him chase the dogs down the hallway and then come back.)

This may not convince the puppies to actually go outside, but it should prevent them from making a mess in front of the door.

December 1, 2000
Thanks to a free program called "CyberBuddy" Cybert can now deliver up-to-the-minute news, weather, stock market information, jokes, and he can even tell us when there is new e-mail!  I consider this a temporary solution, however, because I'd like to have a bit more control over things.

November 13, 2000
Cybert is almost finished!!!  Once again, my buddy Chris Hostetler went above and beyond the call of duty to help me out.  I arrived at Chris's apartment at 1:00 PM, and didn't get home until almost 10:00 PM!  What a guy!

Chris added a photoelectric light sensor and a Sharp GP2D12 IR range-finding sensor to Cybert's external port.  The robot only has one input line, so Chris installed a relay that allows me to switch between the two sensors.  Next, he took my 2-way radio apart and wired it to Cye's 5V line.

Then, he helped me take a plastic head from one of my daughter's old games and shape it to house all the electronics.  The radio speaker was cut and trimmed until it fit neatly inside the mouth area.  The range-finding sensor was installed at the base of the mouth, and the light sensor was set up behind the eyes.

The head is temporarily mounted on the robot body until we can figure out something more permanent; and the back is exposed until we can think of a good way to cover it.  (Chris is thinking about a piece of black plastic cut to the proper size.)

Chris took some pictures of Cybert with his digital camera and gave me permission to include them on my website.  Check out the Cybert Gallery.

November 11, 2000
Tomorrow, my electronics genius friend, Chris Hostetler, is going to help me give Cybert a 2-way radio (his voice), a light sensor, and an IR range-finding sensor (the Sharp GP2D12).   I've also found a plastic head that is almost the same color as Cybert's rubber bumper.  I may use it to cover the new electronics, and to give Cybert more personality.  Hopefully, we won't run into any snags tomorrow -- I'm very excited by the prospect of coming home with a robot that is essentially just waiting to be programmed.  (I've been waiting for this day for TWO YEARS!) 

I'll bring my camera and post images tomorrow night or Monday.

November 9, 2000
Most of Cybert's programming will be written in Visual Basic, but I'd like to use Probotic's Map-N-Zap software to handle mapping, and then path finding and execution.  (One of the architects of this software, Parag Batavia, has information and an article about Cybert's software, here.)

Unfortunately, VB doesn't currently have access to the necessary features in MZ to make this goal a reality.  Probotics is actively working on this code but it probably won't be ready until January or later.  In the meantime, I've discovered a creative "workaround".

The solution actually solved a problem I was having last night: I bought a couple of 2-way radios and I had Cybert "talking", but his speech was sometimes triggering the "handclap" response so I had to go into "Settings" and turn this feature of Map-N-Zap off.  Earlier tonight I wrote a VB subroutine called "ClickClap" that activates MZ and toggles the "Enable Clapping" option on or off. (The default will be "off".) This subroutine will enable me to do the following:

1) When I want Cybert to go to a hotspot I'll simply turn on clapping, and then make him "beep" the correct number of times to correspond to the hotspot I want! Then I'll turn clapping off again.  (NOTE: Every hotspot on the map can be associated with "X" handclaps.  Users of MZ simply clap "X" times to make their Cyes go wherever they want!)

2) I can also use this new feature -- along with Cybert's voice -- to hold interactive conversations. The robot will  turn on clapping when he needs to "listen", and then turn it off again before he speaks. A conversation might go like this:

(1 clap = yes, 2 claps = no)

Cybert rolls into the upstairs den.

CYBERT: Is there a human in this room?

Me: CLAP

Cybert: I have an e-mail for John. Are you John?

Me: CLAP

Cybert: Would you like me to read your e-mail to you?

Me: CLAP CLAP

Cybert: Okay, maybe later. My battery is getting low; I'll be charging at my home base if you need me.

(He pauses for a few seconds to see if the human needs anything else.)

Me: CLAP

Cybert then leaves the room and heads down the hall to the spare bedroom to dock with his charging station.

November 8, 2000
I called my electronics genius friend, Chris Hostetler, and begged him to help me work on Cybert this weekend.  We're going to try to get together on Sunday, unless something comes up. 

In an e-mail before our phone call Chris had a great idea!  He said that we could add a relay to Cybert's output port and use that to switch sensors on the input port.  When the output port is "off" the input sensor will read the IR sensor.  When the port is "on" the input port could read a light meter!   Two sensors for the price of one!

I'm planning to use the Sharp GPD212 IR sensor for range-finding.  One potential issue, though, is that Cybert only has two wheels and thus tends to rock when he is moving.  If the sensor is looking straight ahead and the robot suddenly slows and rocks forward, the sensor is going to point down at the carpet.  This could easily be misinterpreted as an obstacle in the robot's path.   My current idea is to only read the IR sensor when the robot is not accelerating or decelerating.  I'm debating whether it should be mounted down low, or up high.

November 4, 2000
I originally planned to start working on Cybert in January of this year, but work and other factors caused me to postpone the project.  Now that winter is here, and I have changed jobs, I should have a bit more time to work on Cybert.  I can't wait to get started!

Last night I used Cybert to completely map out the upstairs:

upstairs.jpg (102347 bytes)
Cybert's map of navigable areas on our second floor.

Tonight I will start working with some of the commands in the Cyecom.ocx.  I'm particularly interested in the microphone Cybert uses to respond to handclaps.  I hope that I can poll this microphone to get a general volume level for any room Cybert is in.  It's possible that the microphone event is only triggered by what it thinks is a handclap so I'll just have to experiment.

I tried working with a few of the .ocx commands last night, and I was confused by the MoveTo command.  You should be able to send x,y coordinates to the robot (relative to the homebase) but it didn't seem to move all the way to where I wanted Cybert to go.  I'll have to try some things tonight.

The Cybert robot platform has an IO port that should allow me to connect a range-finding sensor and a personal radio.  I'll use the personal radio to broadcast text-to-speech audio data from my PC to Cybert.  This isn't the optimal solution but it's the best I can do for now.  I'll need some help setting these things up, so I'm hoping that my old robot buddy Chris Hostetler contacts me soon so I can pick his brain a bit...

 


Copyright 1999-2000, John Cutter.
For feedback, problems, questions, or to share your own stories or ideas, please contact john@home-robot.com.
Last updated: October 25, 1999.