Saturday, September 10, 2011

Little Walking Robot, AKA 'Puppybot'

History and Origins

This robot started out as something fun to do with spare parts. I used to compete in robot combat competitions, starting with the original non-televised Robot Wars events in San Francisco, and then later BattleBots, as well as several other smaller events held around the country. I used to use cheap RC airplane radios to control the combat robots, and those radios always came with three or four cheap hobby servos, as well as a small battery for the servos and receivers. The servos were nearly useless for those robots, far too small and fragile, and after a few years I replaced the standard receiver and battery with a micro receiver and voltage regulator off the robot’s main batteries.

One slow weekend I took a receiver, battery, eight servos, and some silicone adhesive and scrap plastic, and built something that could limp around the workshop, slowly. It was fun enough for me to rebuild it a few times and tweak the design, eventually adding a microcontroller to automate the walking cycle. With that I ended up with something that worked well enough to show off to people. The main limitation was severely limited battery life. The little receiver battery I was using to power the robot, basically four rechargeable AA batteries, couldn’t handle running 8 servos under constant load for more than a few minutes. Switching to five heavy-duty sub-C sized cells, leftovers from combat robot battery packs, vastly increased the run time, and the additional voltage and current capacity made the robot much faster.

At this point the robot had passed beyond the point of begin something to do with leftover parts to where I was spending time and money specifically on it. I took the robot with me to one of the robot competitions, not as a competitor but simply to show off, had more fun with that than I’d had actually competing, and took home the ‘coolest robot’ award despite not actually being entered in the contest.

In 2004, my wife and I began attending GenCon. This was after the smaller local convention we had been attending (CastleCon) shut down - going from a 300-person local convention to a 30,000+ person national one. We’ve attended every year since. One early year - either 2005 or 2006, I’m not sure - I decided to bring the robot along, to show off to some friends. I had a lot of fun, not just with friends we were meeting but also walking the robot around the convention.

Since then the robot has been a fun way for me to show off my engineering skills, meet and entertain people at conventions and shows, and to experiment and learn with different ways of building it. Learning what breaks on the robot, fixing it, and then finding the next weak point has taught me a lot, that’s I’ve used at work and in other projects.

Overall design philosophy

Simplicity. The robot is made from as few parts as possible. Every part that is added is another part that can fail. It is easy to solve a problem by adding more components. It’s harder but far better to do so while also simplifying the design.

No purely cosmetic parts. As per the previous rule, the robot isn’t allowed any parts which are there purely to make the robot look better. Every part is required to in some way make the robot better in a functional way - more reliable, more durable, easier to control or more versatile, etc.

Every functional part has to be designed with aesthetics in mind. As I am not letting myself hide the functional parts of the robot behind cosmetic covers, I try to make the visible parts look good. This usually follows from good workmanship, and not taking cheap and easy solutions to little engineering issues like insulation and anchoring components in place.

No structural joins made with glue. The early versions of the robot were held together with silicone gel. The servos were glued to the sides of battery, the microcontroller board and radio were glued to the top of that, and the feet were glued to the outermost servo on the legs. This was easy but unsatisfactory - the glued joints would fail unpredictably while walking, had to be pried or cut apart to replace servos, and took hours to set after being repaired. Now I make all mechanical joins with easily detachable, reusable fasteners - screws and bolts - while mechanical joints I never need to detach are welded or soldered.

Ease of repair. Wherever possible, parts can be easily accessed and replaced in the field. I can rebuild the servos - replacing gears and electronics - without even removing them from the robot. I can’t replace the battery or other electrical parts as easily, but I don’t have spares for those anyway.

Crowd-friendliness. At conventions, the robot can come into direct physical contact with people. Children will poke it, people may pick it up or trip over it. I needed to design it to not injure anyone accidentally. The robot has no sharp points or edges, but uses spheres and large-radius curves wherever possible. I’ve also tried to design the joints to be open and have no tight finger-crushing pinch points, although it’s still possible to catch a finger painfully in some leg positions.

Smooth and accurate translation of stick position to leg motion. The earliest versions of the robot had no mixing, just straight connections from the radio receiver to the servos. Motion of the sticks were translated directly to motion of the legs. It was very difficult to control, but I found I could get a lot of expressive motion and gesturing with different stick positions. Later I experimented with automated walking cycles. I’d just have to push the joystick in the direction I wanted the robot to move, and it would walk itself that way. This was a lot easier, but a lot less expressive and entertaining. I switched back to direct control over the legs, but I also added custom mixing algorithms to make walking easier. Key to making the robot appear lifelike is accurately translating the motion of the joysticks to the movement of the legs. Getting the right joysticks is important. The joysticks on the old RC airplane radios I started with were lovely - very smooth motion, independently adjustable spring centering on both axis, and mechanically adjustable center point trims. When I decided to move away from the RC airplane radio and use an Xbee serial modem instead, I tried using a pair of Wii Nunchuk controllers. These were nicely compact, fitting in the palms of my hands, but the joysticks were terrible, having very limited range of motion, zero adjustability, and a plastic housing that gave them an octagonal range of motion. Walking with the Wii controllers was a lot jerkier, lacking the fluidity or ability for fine gestures that I had before. This year I took the joysticks out of the old airplane radios and built custom-made controllers around them, which gave me a lot of the old fluid motion back. Also important is that the leg joints themselves can move smoothly over their entire range of motion. This means no bodywork to hang up or impair free motion, and servo wires routed in such a way as to not get caught or pinched as the legs move. The last has been tricky, and a perpetual challenge to the design.

Videos

These were not taken by my, but by other people at the conventions, whose names I didn't get, but who kindly took videos of my robot and put them up on Youtube.