TED the BiPed
Introducing TED the Biped
TED basically stands for Totally Easy Design and is the same format many four servo bipeds use like the EZBiped series (http://www.easybotics.com/easybiped ). Having run across a few of the nice four servo builds here on LMR such as Bonnie (http://letsmakerobots.com/node/35076), Arduped (http://letsmakerobots.com/node/31788) and µBipedino(TM) (http://letsmakerobots.com/node/30394) I wanted to put something together. I also wanted something I could leave on my desk at work to get a little attention and a wheeled robot usually just runs too fast for my cramped desk. This is NOT the case for TED - he hobbles along quite slowly. Sorry for the long write up, just trying to be descriptive and detailed.
1/6/2012 - Just added a little video and did a repair - update at bottom
Using a standard small square circuit board and some standoffs I noticed an HC-SR04 fits the size perfectly across and vertical so “TED’s head” was born. The hip/leg format was pretty much set by the simple design like the others so I stuck the 300mah 9v between his hips and planned on mounting the hip servos on the side. Some four servo bipeds flip the servo so it is part of the leg and the hip hooks to the body but I used the way the bots above are as it just fit better and looks better to me. TED started out with only one leg as I only had two servos that size so I completely built the bot before adding the second leg. Pretty dedicated to making it work at that point. :-/ The servos are some basic 9g units that were $3 a piece, the same used on my White Legged Spider Monkey Hexapod (http://letsmakerobots.com/node/35475) and have seemed to work out ok. They fit nicely from the battery to the edge of the circuit board as well so that was a plus. The “legs” - not sure what else to call them - that connect the hip servo to the ankle servos are some basic sheet aluminum pieces that I had from my car hobbies. I drew out the basic design from the EZ Biped images and hand cut them.
TEDs brain is one of the Pololu Baby Orangutan MCUs (http://www.pololu.com/catalog/product/1220 ) that I picked up on sale for $12.95 around Thanksgiving 2012. I kind of hated using one of these as the built in dual H-Bridge is not used on TED but the size and price was right. I like these little controllers as they are cheap ($19.95 normal priced), have a built in dual H-Bridge, 10 digital I/O pins, 7 A/D channels, a built in pot on one A/D and a built in LED. It’s an ATMega328P based board so you get plenty of code storage and performance as well. You do not get ALL the pins/features or a true Arduino or clone but you can do a lot with what you do get. You can also use the Arduino IDE to program it although it does require a basic USB AVR programmer which was $19.95 from Pololu. Using the Arduino IDE was MUCH easier than trying to setup the full AVR Studio for me and keeps me in a common interface. Just my opinion.
I really wanted some sound output for TED so I scavenged a small speaker from a dead Nuvo GPS system (wish I could hack the video/touch screen from it!) and put that up front just below the SR04 which fits nicely and covers up the battery end. For sounds I used some sample code found online to generate some random sounds or play some basic music. Of course TED cannot be doing anything else while the music/sound is playing but that hasn’t been an issue so far. Sound is mainly used for the startup show but I like to use a little “blip” routine when the sonar sees something. I can turn on a flag to even have the sound match the sonar “depth” so it’s lower when things are far away and gets higher and higher the close something gets. Of course that DOES slow the main loop way down so it’s mainly a debugging tool but the bot can flip the flag on itself if I want it to. I’m working on some other sounds and music to add to the code such as making a funny little sound when he sees something or after having been left in “wait mode” for a while or similar. Just fun stuff.
I always like having at least some LED outputs for debugging purposes if nothing else so a couple very old square yellow LEDs I had in the junk box were fitted below the speaker. They provide some feedback in regard to when I can push setup buttons, which direction he has seen something, when he is getting ready to start, etc. Just handy outputs plus always good to have some visuals in my personal opinion. I’d still like to add some more LED outputs but haven’t decided what/where. Was thinking of putting something on his feet but that is another wire to run and make fit in TEDs head where space is limited (see below).
The HC-SR04 is a cheap unit I picked up in bulk and is actually mounted upside down with a four pin connector glued to the top “head board” allowing the sensor to be unplugged as needed. I also wanted some switches to allow some input on the fly for setups, mode changes, etc so a couple micro switches from an old mouse were used. They were placed right above the SR04 “eyes” and kind of look like eyebrows sticking up adding a little more personality. Additionally a switch from an old Palm docking station is used in the back for easier access to the CPU reset button.
There are two LDRs mounted on the sides of the speakers but I’ve found out with the White Legged Spider that following light with a walker is a completely different ball game code wise due to the constant movement and light changes. I am still working through how I will handle reading the light sensors on the Spider and will apply that same logic here but am guessing I need to only read light sensors when the bot is generally facing forward and level. Otherwise it’s easy to get stuck in a go left / go right / wait / WTH situation as the bot moves and the light values change on each sensor. Makes it look like it’s having a seizure or something.
I originally had planned on putting a small PIR sensor on the top of his head but after positioning it over and over it just didn’t look right and I like his “square” head better anyhow. A PIR is useless while the robot is moving anyhow so it’s functionality would have been limited to reading while standing still so I scrapped it.
Putting It Together
Getting all those connections to fit in TEDs head is a bit of a challenge and the more items I added the tighter it has gotten. The distance between the bottom and top head boards is just enough for the connectors to plug in with some room for the wire but it’s very very tight. I’ve shortened the servo wires so there is just enough extra to move the connectors around so I do not have to wrap any extra wire up in the head. I needed a power switch as well and didn’t want a big switch sticking out somewhere so pulled the little slider switch off the dead GPS system and put it on the right side which worked out perfectly.
The assembly is basically all hot glue based except for the top headboard and SR04 sensor. The LEDs also plug in so I can replace them if needed but otherwise it’s a “glue job” so changing very much of the setup is out of the question. Hopefully the battery will last through a lot of recharges as replacing it requires pretty much full “disassembly”.
I was way over optimistic on foot size when I started TED. I cut out some pretty simple square aluminium feet and tacked them on the ankle servos expecting to be able to make them work. Re-using my White Legged Spider walking code routines, I immediately ran into the differences between a stable low tripod platform and a top heavy biped setup. The routine simply moved the servos from frame position to position at full servo speed. Easy to code and what you want or at least can use in a tripod gait. I just slice the walk cycle down to XX frames and have a timer that tracks when to move to each frame using a select statement.. err “switch” statement. I can change the “walktimer” (time between frames) and the sub takes care of tracking what frame to put the walk cycle into. That didn’t work on TED as moving from locations such as LeftHipCenter to LeftHipOut creates a lot of momentum especially when the right leg is off the ground. With little feet he is easily thrown off balance fore and aft.
First I modified the code to have some “substeps”, i.e. for each frame, slice that up even further breaking the movement down into finer steps. This works but there is still something wrong with the code as my goal of dynamically assigning the substep count and time slice based on the main loop delay vs the walk delay doesn’t work. I ended up just setting the sub step variable to three to get at least SOME smoother movement. Even with a slightly longer foot, TED easily fell over frontwards due to momentum so I came up with the triangle / wing foot design. This still allows positions such as an “embarrassed” / “have to pee” position with both hips pointing in to an open legged cowboy position but still provides the needed front / rear stability. Not the best looking feet but they are working. I still have to find a good traction solution however as on slick surfaces TED slides around too much. Thinking of adding a thin layer of the “Plasti-Dip” stuff to the bottom of the feet as a first try. I really do not want to add thick rubber bumper feet as the higher you get the less stable he will be.
The walk routine was pretty straight forward although the turns are not correct yet. They work, but just do not look right. By having the frame based walk subroutine I can have TED simply take one frame at a time. By leaving TED powered down I could manually walk through the steps needed by moving his legs and then sequence the walk pattern. The basic patterns I have are walkstop, walkforward, walkbackwards, walkleft, and walkright. They each use the walktimer that is sliced up into steps by a small function that takes the timer value, the timer time slice and how many steps in the cycle. This allows the walking routines to be called over and over by the main loop without any delay() commands so the sensors can continue to be read and acted on.
I am currently working on a variable that gets set depending on which walk cycle TED is in so I know if his head is facing left, right, or forward. I hope to then use that variable to “walk away” from the object instead of just randomly turning upon detection.
I mentioned a couple of the fun routines above but with any kind of legged robot it appears you have a lot more room for doing fun stuff. I’ve added a few routines for entertainment only purposes such as the TippyToe / oooo stance, a hokie pokie kind of routine, the Star Wars trying to fly with his X-Wing type feet, etc. There is a fun little video of some EZBipeds “dancing” on the EasyBotics site (http://www.easybotics.com/easybiped) that I will likely be looking at how to make more subs for just for the fun of it.
Sometimes when you’re coding a bot I’ve found you can get an unexpected unplanned result, usually from a basic bug or error in your code, that creates a desirable output. I had that with the White Legged Spider when the long gait ended up making it rear up on it’s hind legs so I used that in it’s “attack mode” function. On TED, if you’ll notice when TED sees something while looking at the right side he reacts as if he is surprised or something. I’m pretty sure it’s just a code error of how my avoid routine resets the servo positions (unless TED really is coming to life) but I find it kind of cute and would like to implement the same concept when looking left. I’ll likely break the “cute” results code when I try to “make” it happen but we’ll see.
I’d still like to add an IR receiver and emitter to allow some type of remote control and “remote controlling”. I could then use an IR remote to change modes, jump to the “entertainment” routines like the Star Wars music / trying to fly, the bounce from foot to foot, a little the Hokie Pokie, etc without having to touch TED. I’d also like him to have IR output so he could turn on/off certain things or control his own little pet robot like the HexaBug walkers I have by learning the codes and playing them back under his own control.
I need to work on the LDR sensor read timing for light seeking but am thinking of having that mode just turn towards or away from the light instead of chasing it. Works better for a desktop robot anyhow and easier to code. Maybe a little sound effect when the light balance changes and a turn towards/away from it. By coordinating sounds such as a short up sound when looking for light or a slower lower sound when trying to hide from it. Silly stuff but fun reactions.
I also have to do something for the bottom of the feet to get better traction as mentioned above but most of the future code for TED will likely be “entertainment” routines just to have fun.
Update 1/6/2012 - Sprained ankle and Gotta go
After running TED for a while his right ankle would work / not work / work / not work, etc and finally he was walking around like he had a bad ankle. Testing the port with another servo revealed the port was fine so I figured one of the cheapo servos had died and started the surgery. I pulled that leg off from the hip servo and pulled the foot off thinking I would just replace the problem joint.
However, after pulling it all apart I spotted the problem - The wire going into the servo was broken loose and depending on how the ankle moved the wire would work/not work. So instead of replacing the servo and have to re-shorten the wire run by putting new ends/hood on it again I pulled it apart and checked it out. Tough solder such a tiny board but the repair was done and worked fine.
Lesson learned is that servo wires are NOT made to move back and forth as they expect the servo to be still so make sure you add a little re-enforcement to the entry point on cheap servos on any legs that move. A little hot glue should resovle the issue I think. TED is back in action and now does his little thing in the new video. Silly but that is what TED is all about.