Let's Make Robots!


echo.png31.83 KB
echo.12b.txt - 12Blocks file, rename without the .txt extension and load into 12Blocks8.77 KB
IMG_20100803_232241.jpg -inside Bender's rusty inards1.01 MB
IMG_20100804_231435.jpg - a view of the fitPC21.12 MB
IMG_20100805_204304.jpg1.02 MB

Bender is a medium sized robot based on the Crustcrawler Nomad HD platform. It uses the Parallax Motor Kit with Position Controllers, a pair of Parallax HB-25 Motor Controllers, 6 Parallax Pings, and a Parallax Propeller Robot Control Board.

The propeller handles the low level functions, such as sensor scans, movement, collision avoidance, robot status monitor. Low level routines are written in SPIN and all the behavior software is written in 12Blocks, which talks to the lower level routines through  12Blocks custom blocks written by me.

Bender's brain is a FitPC2, a 12 volt powered Atom 1.6 processor based microPc. It has 1.6Ghz processor, 1 G RAM, 160G hard drive, 6 usb 2.0 ports, dvi video, full audio, an ethernet port and built in WiFi. All of this in a package that measures 4x4x1 inches and consumes only 6-10 watts of power.

There is a Logitech Orbit webcam on board running AbleCam (video web server)

All this is powered by a 13000 mAh NimH battery pack.

Not shown is the scanning laser rangefinder. I have it, just haven't sat down to figure out how to get the propeller to read it. Also not shown is the head, which remains to be built. It sports a 7" touch screen display (back ordered) and is where the camera will be eventually mounted.

At the moment, the PC is still running on house power. I've opted to use a small inverter running off the battery pack to avoid cutting up the power cable. At some point this will have to go but since there is still plenty of room inside, it's a fair prototype trade off. I've ordered the inverter but don't expect to get it until next week. This limits the roving range to the length of the power cable but is sufficient for testing.

Running RealVNC, I can directly control Bender via WiFi. At the present time, I can drive the robot around using manual keystrokes which are passed to the propeller via the Parallax Serial Terminal that comes with the Propeller Development Editor or directly in 12Blocks as it has a built in terminal that also allows you to watch the propellers's pins change state and track all your variable. Very handy for debugging.

Software installed:

  • RealVNC
  • AbleCam
  • 12Blocks
  • Propeller Editor

UPDATE: 5 Aug 2010

Today I installed the 200 watt inverter into Bender. It has two 120 jacks, One goes to the FitPC, the other goes to the new 7 port USB hub, allowing me to hide all of the USB lines inside the robot.

Now, instead of a tangled mess of wires outside, there's a tangled mess of wires inside. I'll have to wrap the excess cable so it will be a bit neater.

Bender is now tether free! it can now be driven around the house under direct control of any computer in the house. Tomorrow I will deal with the rat nest of USB and power cables inside. I suppose I could put the inverter and hub outside, we'll just have to see how things work out tomorrow.  The inverter is a stop gap measure until I can round up a suitable power plug to run directly off the battery.

Beware, Murphy lurks in the darnedest places. 6 Aug 2010

Well tonight I found a couple of power plugs that will allow me to power the PC and the propeller off the battery. As I was checking the polarity of the power plug for the propeller, one of the cables blocked the screen of my voltmeter just enough to not see the '-'. When I plugged it into the propeller, There was the tell tell smell of acrid burning electronics. Too late! The propeller is now fried and gone to silicon heaven  and I've ordered a replacement. unfortunately, it means I can't do any of the weekend testing and development that would have allowed me to take it to work Monday to show it off.

This goes to show you that anybody can make simple mistakes. This one cost me the price of a new board and three or four days lost, all because I was not paying as much attention to everything I should have. In my case, I plead 'cataracts in both eyes, one eye that sees nothing and the other runs at about 20/70' A few years ago, this is a mistake I would not have made, but then I recall making many others,,,

It's a hundred dollar lesson that will last for awhile. They always do. Moral of the story? Don't be afraid of making mistakes, that's where we learn our toughest lessons, Don't be careless either.


Update 11 Aug 2010

The new propeller board arrived today. Like the old one, it's a MSR1, the Propeller Robot Control Board. So far, it's been fired up and programmed to handle the simple R/C program I have running for initial tests. Tonight, I'm planning on running it through a few tests to see how well it handles the WiFi things, drive it around to get the feel of it etc. I'll post some video if all goes well.

Update: 12 Aug 2010

Today, Bender fulfilled its primary design function: That of delivering a bunch of Chocolate Chip cookies to the office of our director. While it was all done under the use of telepresense, ie; remote control, Bender successfully navigated the approximatly fifty feet between my office and his, notwithstanding the positioning of a number of trash cans as obstacles. There are still issues with the anti collision software, and controlling the robot solely from the webcam was a challenge. My next step is to switch Bender to using the encoders so it will travel in something that more closely resembles a straight line.

Update 20 Aug 2010

Bender is now Skype enabled. Now I'm working on a pair of programs to talk to Skype. The first is on Bender and listens in on the chat channel for commands, then transfers the appropriate command sequence tot Bender via the serial port. Trivial program.

The second program runs on the remote client, reads mouse commands, and sends them over Skype to bender for execution.

Both programs are in VB.net. They will provide the ability to control Bender usinfg only a skype connection and my VB client.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

I too feel the need for bigger robots, with stronger motors, hence my latest project, but since I work on a budget(a low one) I have to work with what I have, and to be honest I prefer it this way because I get to have it 100% custom :D


Parallax HB-25 12v motor kit - 280$

modified 18v drill motors - less than 40$, including batteries and chargers.

Wind shield wiper motors - 20$ ish each, or free if you know your ways.

The last ones both require you to get wheels though, but wheels are cheap and are everywhere.


Sure, the parallax motors are nicer, and easier to mount, but even being able to afford them it's simply not worth it, I am a miser however, I hate spending money...

You got to work with the BEAR??? How cool is that!

Your investment is about on par since the major developement robots start at $3K and seem to top out now around $12K with an average of 5-7K for most. Who wants to spend that and be locked into someone elses proprietary platform. I can see the need of those developement platforms for fast implementations like a security system bot. If a client company is willing to pay for it and you just have to add couple of cameras that tie into a DVR over WiFi and don't have the time to make your own brand of robot or you don't have the time. So those robots that can do object avoidance right out of the box and follow an interior programmed map with your added security gear could justify the cost of such. But as you say, you are locked into platform in an emerging field of tech.

I think that it is better to build it yourself. Besides, Robotics [I should say "Personal Robotics"] is where computers were in the 80's and 90's. There were the TI99's, Commodore 64's, Atari's, Apple II's, Apple Machintosh's, Amiga's and many many more... How many do you see now? 

I think what you are building is really cool. I can't wait for some video. What are you using to interface the Propeller with the PC?

I worked on a protoype that was the impetous for the BEAR. You might say there was a project that got canceled and the BEAR emerged out of it. Not exactly the direction I was going but...

I remember those heady days you mentioned. I myself owned an IMSAI 8080 with cp/m. I agree that the personal robotics world is pretty much where the personal computer was in 1979. It's kind of nice being on the ground floor of two industries in one lifetime.

The propeller talks to the PC through the USB port on both. I currently run it at 19200 baud, which is plenty fast enough.. Right now I control the propeller via keys pressed. It's a simple remote control app that triggers behaviors on the Propeller. after I get the main hardware situated, it'll be time to write a robot executive prgram. Haven't decided which language it will be in, VB or java is almost certain athough I may do it in scratch (MIT) Going to resurect Strabo Pathfinder for the navigation part so the executive will be nistky to interface to Strabo and send navigation commands tot he propeller for execution.

I'm thinking of expanding Strabo to be the executive instead of simply a navigation server. This is mainly because, While Strabo does a good job of getting from one sopt in a building to another, there are a bunch of ancillary functions that belong inside Strabo and not necessarily. It willl require a tighter interface to the propeller but I'm not sure that I'm going to market it again. We'll see. 


Since you have this kind of power in your robot you may want to look into the ViewPort debugger software for the Propeller by hannoware.com since it can do image processing and other things. Have you looked at the Propellant Library download on the Parallax site?

I now want to pick up a FitPC2 and increase my options too. This seems a better alternative to using a Laptop and more cost effective. You have provided me with new inspiration! It also has a line input so that I can run the audio output of the Propeller to the FitPC and use either the voice object in the Prop or in Windows to create speach. Cool!

Or at least some of it. 12Blocks is also written by Hannoware. Viewport is an excellent propeller diagnostic tool. Not only does it handle image processing, it allows you to visually see the states (hi/lo) of each pin and watch the contents of your propeller variables change as they change in real time. You can almost through away those logic probes and oscilloscopes.

Haven't looked at propellant, seen it at Parallax, I'm a frequent flier there. I've been a Stamp fan since the BS2 came out.  I bought a propeller when they first came out but never jumped on it so this is my first 'real' propeller project.

The FitPC gave me some grief at first. Tech support is awful, they will run you around in circles and you will wind up finding the solutions to their most common problems with google, not with them so much. If you use a VGA monitor, you have to buy an extra 'CONVERTER', not adapter, two different things and they won't tell you that up front. It's an $80 part expect to add that to te cost.

That being said, so far the FitPC seems to be working fine. It's no speed demon but it does the job. Frankly All I really cared about at the time was power consumption and 12 volt source, and as small as I could get. Mine runs Windows 7. Linux would be better in some ways, but I've been programming on Windows platforms since 3.1 and while I'm not happy with the way some things are done, I know my way around the OS enough to pretty much do whatever i want. It just turns out that there are better development tools in windows so I'm sticking with it.

I thought I'd use the PC for speech processing and the propeller to generate little status chirps, al ;la R2D2. i Figured it might be interesting to beep and chirp as it moves around, partially to let people know it's around so they don't step on it and hurt themselves and it will be cute.


Dave, can you talk about the way the low level functions work? I am trying to find a better/easier way to deal with motor control, encoder use, sensor data processing, everything that can be done at microcontroller level.

Thank you!

The low level functions are all written mainly in 12Blocks. If you've ever programmed in logo or with the Lego Mindstorms, you've like seen a graphical interface similar to what 12Block uses. (the Mindstorm uses a computer developed at MIT, who also created the Scratch language, of which 12blocks is a program that produces SPIN code using graphics very similar to scratch, optimized for the propeller. The thing that is nice about it is that you get the best of both worlds; a graphical development environment free of syntax, grammer, and most other things that make learning a new language tedious. with 12Blocks, you visually design your program and press one button to see the spin code created by it. This allows you to  do rapid development visually and tweaking in SPIN as necessary.

Because it is all SPIN based, there are SPIN objects in 12Blocks to support everything it does. If there is a block that you need that doesn't exist, you can write a SPIN function, put it in your own SPIN object and link a block to it. Pretty easy to do. Parallax maintains an object exchange that contains literally hundred of objects that can asve you a lot of time. In addition, the propeller editor comes with a b bunch of objects.

The easiest way to understand it is to download `1blocks and look at the echo.12b file at the bottom of the robot section above just before the comments. Mainly I use two main cogs; the first is a command processor that continuously looks for keys from the PC and triggers event handlers when a key with a command is pressed. The other just manages the sensors by scanning them and storing their contents ubti global variables. This allows all the other cogs to get the results of the latest results fo a sensor without having to wait for them, Depending on how far an ultrasonic sonar signal has to travel, it can take a second or two to process 8 sensors. This streamlines the process a little by always having data that can not possible be more than a second or so old. If you don't move to fast, it's difficult to overrun this.

There are event handlers for forward, reverse, turn left, turn right, stop, and change speed.

For instance, If you look at the jpg in the attached file below the picture of Bender, you will see that there is a forward event handler.

This gets triggered when you press the letter 'f' in the terminal program The robot enters an endless loop, scanning the sensors for anything in its path while moving forward. If the sensors detect an object within 5 inches, it triggers the avoid routine, which sets a flag killing the forward handler, turns to the left until there is nothing within 5 inches of any of the fron sensors. It then triggers the forward event and it will move forward again, repeating until you command it to do something else.

It is all primitive, designed mostly to help me get a feel for everything . Once all this works you can just add other behaviors as you figure out how to do them.

There are blocks like 'move forward', 'move backward', 'turn', 'stop'. I added 'turn x degrees', 'forward x inches' and a couple of others

If you use a propeller, You won't go wrong with 12Blocks.

disclaimer: I have no involvement with 12Blocks other than as a happy customer and get no remuneration for talking about it. I just happen to know that it frees me up from thing about the syntax, grammar, punctuation, functions, and keywords. in other words it allows me to concentrate on the logic. After spending a lifetime learning new languages, I have learned to appreciate anything that makes my life easier.

I did download and install 12Blocks in January and looked at it for a while but I decided to jump head first into Spin. Now with a good knowlege of Spin under my belt, I think that I will take another look at 12Blocks. So my question is this: If a block doesn't exist in 12Blocks and you find an Object on the OBEX, how simple is it to add it to 12Blocks to start using?

I noticed that there is no TPA81 sensor block but I found the code on the OBEX [or was it norrislabs.com I forget now]. Anyway how hard would be to add blocks? And/or update blocks since your code refers to the Servo32v6 object and I am using the Servo32v7 object?

Making custom blocks for 12blocks involve;

  1. Create a function in spin code and save it it as an object somewhere where 12Blocks can find it. That is usually the same directory that your main robot program is in. It could be in the propeller library, apparently it looks there as well.
  2. There is an XML file that contains all the information about the block. There is a button on the 12Blocks screen that will build it for you but it vasically describes the number of parameters, function name, object name an if a return vaue us expected.

That's pretty much all there is to it. The new block will appear in the appropriate header. You can create your own section for this to make things easier.

All of the spin objects are included with 12Blocks. Cnage change your name to replace theirs. Just make sure that any functions in the obj you replace get carried over to your object or things might not work. In other words, rename your obj file or copy it intot eh old file.

Took me a couple of hours to figure it all out but once I did it was pretty trivial. I had to modity dervo32v6 because the stop function didn't seem to affect anything so I just made it do a go(0,0,0,0) and it works now.

How easy is to launch sections of code in other cogs. I have one cog just updating sensor variables and others reading the RF link etc...