woensdag 27 juni 2012

Simple arduino powered hexapod

Motivation

I needed a simple robotic platform for an Arduino DOJO workshop organised by BeJug. I started out with a quadpod (8 to 12 servo's) because I didn't want the complexity of a hexapod (18+ servo's). Once completed I started working on gathering information on the walking routine for the 8 servo powered quadpod.

It didn't take long to discover the much simpler (3 servo's only!) hexapod tripod configuration at pololu.com. Everything that follows is inspired on this simple hexabot from pololu.com.

Concept

I have 2 versions of this bot. If you really want to keep it simple and cheap you can go for the micro version using 3.5g servo's. Options on that one are limited though because of the minimal weight it can carry.

If you want to experiment with more sensors I would go for the bigger 9g servo's. It's basically the same but using bigger servo's. If you want to carry more load you'll also nee stronger steel wire.

Parts List 

  • 1x Arduino pro mini (the brains)
  • 3x 3.5g servo (the muscles)
  • 1x 3.3v bec OR 5v bec (OR none if you use a life or 1s lipo instead)
  • 1x small 1-2s lipo of around 300mAh (OR life OR any other type of battery)

Construction

For instructions on how to combine all the parts from the parts list you should visit the original website at http://www.pololu.com/docs/0J42/3. All I did was change the brain by an arduino mini pro.

So you can skip step 1 and 2 from that tutorial. Instead I made a small pcb with a common power rail (+ and -) with 3x 3 pin headers to connect the servo's to. The signal wires from the servo's (often white wire) go directly to the corresponding arduino pins. In my case pins 10, 11 and 12 (change these pins in the sketch if you use different ones).

The servo's are glued together using hot glue. Once together I glued them on the pcb with the arduino pro mini in front of the middle legs, center servo. This way I have the complete pcb underneath the center legs so I can attach the battery on the bottom of that plate at the middle of the spider. This thing needs to be balanced and the biggest weight we have is the lipo.

Once the legs are attached you're good to go. Make sure not to force the servo's. Use the sketch instead to center servo's before putting the arms on with the legs. Make sure the legs are all the same length. Play with the position of the battery to balance everything.

Programming

You can use the Servo library for controlling Servo's. All you need is to define a Servo object, call the servo.attach(int pin) method in the setup method and in the loop you can add the routine. You can set a servo to any degree from 0 to 180. 90 degrees would be a centered servo. You won't need the full range of the servo for this bot. The actual range should be tweaked to get a nice walk with your setup. 

The walking pattern is called the "tripod gait". Google it for more information and movies. 

The center legs are used to switch the balance point so that the pod is lifting all legs on one side (hence standing on 3 legs). The lifted legs can then be moved forward while the standing legs can be moved backwards to push the spider forwards. 

Next step is to switch weight again so that the other legs are in the air. Then again forward with the legs up high and backwards with the legs on the ground. 

Repeat this and the bot will be moving forward. You'll have to add some delay between the 2 positions of the walking routine. 200ms worked fine for me. If you want to watch the bot in slow motion you can increase this delay. Might be useful for debugging.

Backwards walking is the same routine in reverse. Turning is done by moving the legs the same way.

Improvements



  • better steel wire (lhs)
  • try on a single cell 
  • glue steel wire underneath the servo horns
  • legs better cut and formed to equal size
  • tweak amount of servo travel! 

Other Goals

Since this is such a small and cheap platform I'll look into the options to let a set of these communicate. For communication I could use infrared leds. These are ment to use indoors so GPS is out of the picture for positioning. Instead I'll have to find out a relative positioning system. 

More to come.