My little walking robot, that this blog was originally created to describe, gradually beat itself to death through performing at conventions and Makerfaires over a period of several years. Broken servos were easy (if expensive) to replace, but eventually welds cracked in the legs and the servo control board developed intermittent faults. Fixes to the structural problems just made it heavier and pushed the already overloaded servos further. About a year ago I gave up and declared it dead.
Earlier this year I decided to rebuild a new walking robot from scratch. I had at one point looked at tiny inexpensive plastic-geared micro servos as a possibility for a walking robot. Initially I thought them too weak and small for use in any walking robot, but after seeing several successful robots using them I decided to try and rebuild my walking robot based around them.
I knew from my earlier experimenting that these micro servos would burn out if I ran them at 6V like I had in the earlier robot. Rather than drop the 8V from a two-cell LiPoly down to 5V or lower, I decided to just run the servos directly off a single cell LiPoly instead. 4V is less than the maximum these servos should be run at, but I figured that it would help them last longer without overheating. I wasn’t going to be getting much torque out of them, so I’d need to make the robot as lightweight and small as possible.
I made as much of the structure as possible out of 3D-printed parts. My original justification for getting the 3D printer was to print parts for robots. I spent a few years making homemade transformers and other fun things instead, but now I’d finally be getting to making robot parts. The printer was really great for this job, the fact that I could make parts in complex arbitrary shapes, compound curves which would be very difficult to make with sheet metal and internal stiffening ribs without welding or machining, really helped with my goal of making the bot with as few overall parts and fasteners as possible.
Thanks to the 3D printer I was quickly able to go through multiple sets of test hardware, tweaking the design to get the clearances and geometry just right. It also meant I could fairly easily make an entire set of spare structural parts. I didn’t expect to need them, but once I had the design finished it cost very little in materials or time to print more out.
I kept the same overall proportions as the previous robot, but scaled down everything by about five-eighths compared to the original. I wanted to try and make the legs as short as I could get away with, reducing the torque load on the servos while still keeping the legs long enough for decent speed and mobility. The center sphere, which in the original had been made from a three-inch copper tank float, would now be a plastic ball about two inches in diameter. The leg span at full extension would be just about eleven inches. I expected to be able to reduce the weight to about a quarter of the previous design.
Sadly the printed plastic parts don’t quite have the aesthetic charm that the old polished metal ones did. My robot’s gone from a steampunk inspired hand-made design to one that looks more like a mass-produced toy. The final colors were somewhat accidental - I had a different color scheme in mind originally. I printed out some test pieces in white, then switched to red and yellow, colors I don’t use much outside of test prints. I liked the resulting look enough to make the entire robot in those colors.
I decided to switch to easily replaceable battery packs rather than attempt to cram in a single battery capable of running for an entire convention. I got a really good deal on five single-cell 380mAh battery that would just fit inside the two-inch sphere, with enough space left over for the radio receiver. Of course, I added battery protection boards onto each of them to make sure that the robot wouldn’t go up flames in case of a short circuit. I designed a printed shroud to go around the battery which I hoped would make it easy to swap out batteries without needing tools at the convention. Unfortunately the plastic snaps came out stiffer than I'd have liked, and I needed to use pliers to pull the battery out at the convention. It was still reasonably easy to swap the battery packs out.
With the battery pack and the Xbee radio taking up nearly all the space inside the robot, there wasn’t enough room for the Xbee breakout board I had used previously, let alone that and a Pololu SSC or Arduino Mini to do the serial-to-servo conversion. I had to make my own controller board, using tiny right-angle headers mounted sideways on the board and fitting the PCB itself directly between the pin headers on the Xbee radio. The board would have to hold a PIC16LF873A microcontroller, 3.3V regulator for the MCU and radio, clock generator and other required components, as well as the connectors for the battery and servos. The servo leads and connectors actually took up a lot of the interior space - when you only have a 2 inch sphere to work with, trying to fit 8 3-pin headers takes up a painfully large chunk of the available real estate.
I designed the PCB using the layout tools I have available at work, and then ordered it through OSH Park. OSH Park was quite easy to work with and helped me configure my PCB design software to produce the right output files for their process. The cost for the three boards they sent me was amazingly low compared with other prototyping services, only $9 for three identical boards which was even less than it would have cost me to set up to etch them at home. The quality was a lot better than I’ve ever been able to do with etching myself too. They also had no problems with the boards being odd, non-rectangular shapes, unlike most prototyping services that require rectangles of predetermined sizes. The only downside to OSH Park’s service is that it’s not speedy, the batch-process system they use to keep costs down means they have to wait until they get enough orders before they can send boards to be manufactured.
The radio receiver, controller board, battery, and connectors occupy a box about an inch square down the center of the two inch sphere center body. It's really tightly packed in there. I had to make cutouts in the PCB and battery support structure for the inner mounting tabs of the leg servos, and leave channels in the surrounding support structure wide enough to feed the servo leads through.
The firmware I wrote for the controller in the robot is really simple. It’s essentially doing the same job as the Pololu SSC I used previously, but with a simpler protocol, lower data rate, and coarser resolution. The receiver takes a data stream at 8929 baud (it was supposed to be 9600 baud, but a PIC16LF873A running off a 4mhz crystal can’t actually match a 9600 baud rate) with each servo encoded as a single byte of data, and outputs eight 0.524ms to 2.500ms pulses, one for each servo. The output resolution is fairly coarse (about 0.7 degrees per LSB) but I figure that these cheap all-plastic servos are going to be lucky to be within five degrees of the commanded position anyway so it really doesn’t matter.
I used the same transmitter as on the previous version of the robot. The only change I made was for the new serial output format for talking to my controller instead of the Pololu SSC board. I did have some problems with the transmitter at the convention, and I’ll probably be completely redesigning it for next year.
The controller board was the long pole in the project, once it was done and programmed everything came together quickly. There were a few design issues with the board that I had to fix with cutting traces and soldering additional parts on. For one thing, the Xbee receiver uses a lot more current than I realized, requiring me to solder a larger 3.3V regulator on. I’ll be updating the PCB files and publishing them once I’ve cleaned up the design.
With these cheap little servos, and my previous experiences with them failing after a few seconds of running under load, I wasn’t sure that this robot would even be able to hold up its own weight without breaking. I was therefore pleasantly surprised when the new robot not only stood but nimbly walked around, waved and rolled over just as well as the old one had. Some quick testing showed that a single fully charged battery would be good for fifteen minutes of solid walking, and that I was able to go through several full batteries walking the robot around my living room without any servo failures. Testing at work showed that the radio range was more than sufficient for the robot to still walk while at the other end of the longest hallway in the building, something that I had been worried about as there was no room for any kind of external antenna on the robot.
With everything tested and seeming to work, I packed the robot and all its spare parts and was off to GenCon.