Mikael's MHEX II Walking Hexapod Project Website







News

12/11/08 - See my new toy, a flywheel inverted pendulum.

23/01/07 - video to demonstrate kinematics (tilt/twist etc), see here.

13/01/07 - ...

09/01/07 - ...

09/01/07 - Finally made some progress on a more final matrix based kinematic system. Got the chassis to translate and orient itself on the spot without changing the location of the feet on the ground. Will try a bit of motion control and take a vid in due time :) but for now heres some photos:

18/12/2006 - attached cmos camera and micro-servo pan/tilt system to robot.

16/12/2006 - Transfered static tripod gait walking algorithm to onboard ARM controller in its very basic form. No attempt at high level input for starting/stopping/changing direction as of yet, however I got the robot to walk in a straight line again and it's many times more efficient to forwarding signals from my PC!

Also updated the servo controller firmware (for the AVR micro) for power saving and revised error detection: min/max mechanical limits, watchdog timeout and reporting, brownout reporting, communication frame errors etc. Servos power down upon ANY error at this stage.

25/11/2006 - Attached FSR's to robot legs, see this section.

16/11/2006 - Started designing a foot sensor mechanism using force sensing resistors. Click here to see photos. Still looking for ideas on bump detection (for stair climbing)... any suggestions welcome!


Introduction

Hello and welcome to my (Mikael's) MHEX II hexapod robot project website. My earlier MHEX hexapod project website still exists at this location but is old and nastily wrtten when i was 15 but still worth visiting for the videos. Eventually I will tie all loose ends and make one website dedicated to MHEX I and II with better decriptions and more useful information, but for now this shal do I hope....


A Brief Summary

Mhex II is an omnidirectional hexapod (6 legged) walking robot. Each leg has 3 motors which allow the feet to be placed anywhere in 3D space within mechanical limits. Unlike my first hexapod robot (MHEX), this configuration allows the robot to walk in any direction keeping it's feet fixed at a point on ground without slipping.


Photos

from below
future cam
bottom view
mhex II & I

full shot
closeup
side
top
outside
outside 2
new pcb
me & mhex II
new camera!
..another
tilting
twisting


Videos

Video formats here differ a bit. Needless to say, larger size = better quality.

23/01/07 - Kinematics Demo 1.1mb mpeg
A video demonstrating the matrix based kinematics demo put to motion. (Deleted the older videos to save web space).

04/07/06 - Walking Wireless Test 2.0mb wmv
Here I demo MHEX II walking with the new bluetooth RF link and battery. Computation is still performed off-board so the new ARM controller does nothing except blindly forward signals to the servo controller. Nevertheless it'sg taken a fair amount effort to get to this stage so I thought another video update was a good idea.
Here the motion is a little jerky because even though the RF link is nearly 1MBit/sec, it still has an awful latency (even in "fast" mode) and because of this I've had to reduce the step resolution by about 10x to get a resonable walking pace which of course results in this behaviour.
Although the cat doesnt think too much of it, I'm it passes the test!

26/02/06 - Real-time omnidirectional walking with GUI Console software 13.5mb mpeg 726kb wmv (no audio)
New console software works! In this video I am playing with the bearing control in the GUI console software I've been writing. Towards the end of the video I also alter the height but it's not easy to notice (just watch carefully). This is the first proper example I have of how a true real-time omnidirectional static tripod gate can work on a hexapod robot. Controlling it like this is really only possible in the graphics software, unless you are really good at thinking up angles and realyl fast at typing - which I'm not :)

25/02/06 - Walking a bit faster 7.7mb mpeg< 454kb wmv (no audio)
Ok if you haven't downloaded one of the other videos yet, download this one - probably the most impressive and its taken in better light. I have now calibrated the servos properly so the gait should step more accurately and keep a better height. I increased the speed from 1mm increments to 3mm increments to get an idea of potentially how fast the robot can move but I'm afraid to try anything faster incase i break the delicate servos. I only move the robot in 90 degree angles here.

23/02/06 - Walking with bearing changes 14.1mb mpeg 729kb wmv (no audio)
Robot now walks in any direction! Ok in this video the robot is walking a little more stable than in the previous (leg heights aren't swapping at the same time). You can hear me typing in the background - I am typing in different bearings in the order: 270, 300, 90, 180, 270, 000. The blue arrow on the chassis indicates bearing 000 (away from camera). Unfortunately the robot is a little out of balance because I havent aligned the servo motors properly yet. Oh and ignore the cables tugging the robot sideways as it reaches the end of its run at bearing 300 :)

19/02/06 - Preliminary Walk 4.0mb mpeg 260kb wmv (no audio)
...perhaps i shouldnt be releasing this video as the motion control is through a totally un-refined macro code (i.e. fixed walking parameters), by no means the actual walking algorithm - the legs even swap height at the same instant which is just not right! Anyhow, I wanted to take a break from the hard work and thought it looked/sounded pretty cool walking like this and so had to submit the video (make sure your speakers are on) :P

19/02/06 - Moving forward and back 7.6mb mpeg 519kb wmv (no audio)
...testing body translation in the y axis. The body coordinate frame is aligned with the coordinate frame of leg #0 so body translation in the y axis means all other legs will have their coordinate frames 60, 120, 180, 240 and 300 degrees rotated. After relating each leg coordinate frame with the body coordinate frame, getting the robot to translate in the y (or x) axis is simply a matter of incrementing a few variables. You will notice the height remains constant and the feet remain at exactly the same positions throughout the video.
Animating this procedure was a major step forward for me. Now the next step will be to get it to strafe at any bearing 000 though to 360 relative to leg #0 (the reference leg indicated by the blue arrow).

17/02/06 - Raising up and down 4.0mb mpeg 288kb wmv (no audio)
...testing body translation in the z (vertical up/down) axis. I performed this test second because the z axis is parallel with all leg coordinate frames and changing the height is a matter of changing 1 variable. Notice how the legs dont slip and the motion is a lot more smooth and elegant (if you ignore the noise) than in the drawing video.

11/02/06 - Drawing a square 11.6mb mpeg 623kb wmv (no audio)
...testing the inverse kinematics algorithm for the first time on 11 feb 06 by using one of the 6 legs to draw a square. Notice how the leg constantly overcompensates every slight shift in position it makes. This is caused by the deadband of the servo motors and occurs when A) their is little, or no load and B) because the manipulator is allowed to slip (i.e. draw). Still, it can draw better than i can with my leg!


Mechanics

The MHEX II chassis is constructed of Aluminium sheet metal. Scrap Aluminium was purchased from a scrap metal dealer for almost no cost and cut into strips by hacksaw. Because Aluminium is so soft it was easy to do this by hand and then file it clean. Strips were then bent in a metal vice to form the servo leg brackets. The holes at the bottom of the chasis were made with a saw drill to keep the frame light-weight. The large hole at the top of the chassis was made by drilling small holes on the inner rim and fileing to shape - a pretty tedious task!

The servo motors only have a rotational output at one end, so a U-shaped bracket was made to link to a perspex bearing on the opposite side to provide rigidity and relieve stresses on the output shaft. Here's a diagram of the bracket's perspex bearing:


The perspex bearing is hot-glued to the bottom of the servo so it can be removed if necesary and so the servos remain un-modified. All the brackets are identical, forming reconfigurable modules and in my case configured as shown in the cad drawing below...


Electronics

I am using a Philips ARM LPC2294 microcontroller development board as the main controller which will be used to perform all the maths on board. However it currently only acts as a dummy forwarding signals to the servo controller. Core/bus frequency is approximately 58 MHz and this is a 32 bit device with 1mb of external ram and flash memory - powerful!

The servo controller is an Atmel AVR ATMega16 microcontroller running at 16 MHz. A 3.9MHz synchronous serial link is used to interface to the main controller. It uses an additional line to trigger an external interrupt on the main controller as a form of flow control to speed things up. 20 hobby servo motors are connected to this controller and refreshed synchronously every 15ms (actually only 18 servos are used and 2 will evntually be for a pan/tilt camera).

Data is received and sent between my PC and the ARM controller using a bluetooth tranceiver module which has a full-duplex 3.3V level rs232 interface. This RF link is set to 921.6kbps (almost one 1mbit/sec!) but has an awful latency of about 35-50ms which makes it almost useless for standard serial communcations, however it is a bidirectional link, completely error free and has a 100 metre range. Of course the latency wont be so much an issue later on when short, high level commands like "turn robot 90 CW degrees" will be used.

Here's a block diagram of the electronics set-up as it stands. Sensors shown in the diagram have not yet been implemented and are subject to change.


Sensors

This section not finished yet..

Force Feedback:

Each leg (as of 11/06) has a force sensing resistor (FSR) at the end of each leg for force feedback. The sensors are logarithmic which make them sensitive to very small forces with only a 10g break-force requried and allows for a wide range of force to be measured. Their paper thin structure means they have no mechanical throw and allows them to handle very heavy (direct) loads without breaking. They also don't need any calibration!
The photo below shows the foam rubber foot covering the FSR and flat conductor ribbon cable connected to it:

Click here to see a video of the leg with a prototype FSR config in action.

Distance sensing:
Accelerometor:
Compass/Magnetometor:

Software

Currently all the hard work is done on my PC running Ubuntu/Debian Linux. It consists of several blocks and features: an inverse kinematics algorithm, coordinate frame mapping system, motion control, serial servo controller interface, multithreading and a graphical user interface. I am using GCC with the Kate IDE and GLADE for designing the GTK+ user interface. Currently it's at a very early stage and is quite limited in ability and i'm even ignoring race conditions as I wont be needing this code when I set up my onboard controller. Here's a screenshot of the console:

Why linux and not windows?

There are many reasons for this but the main reason is essentially that Microsoft have made it pretty near-impossible to access a serial port on MY OWN COMPUTER through standard c programming in Windows. It can be done but of course documentation is aimed at non-standard Microsoft C++, not GNU C and it requires weird proprietary windows system calls which I really have no interest in learning about. Another reason is that the Gimp toolkit (GTK) is many times nicer and clearer to use than win32 graphics programming however I am keen to use wxWidgets which is aparently even easier and portable to both windows and linux with a "native" look in each.


Contact

or email: mikael.stewart at gmail dot com


A special thanks goes out to Refik Hadzialic for hosting this website!