Let's Make Robots!

heading lock gyros for hexapods - looks to bounce around idea's

Hello all.

I am currently playing with a hexapod design ( 2DOF ) using an audrino board. This may well end up shifting to a Proppeler board, so please bear both in mind.


I have currently got my pod walking, but in an entirely hard coded way "move leg 1 by x degrees" etc etc. Next step is to get the gyros  and accelerometers in, and get it self correcting.


We've tried a couple of different gyros now, and they are noisy things - there is a fair amount of messy data and a lot of outlying data points.

The end state with the gyros is that there will be three of them - one front right, one front left and one rear centre all giving inputs. These will blend their signals, and give us a robust system. The method we will be using to blend these inputs will be spat out from a machine learning system - a genetic algorithm will do the work of creating the algorithms. ( No... we don't NEED the GA stuff, but it's fun ). What we hadn't considered is how messy the gyro outputs are - we are going to solve that by using a system called BrownBoosting:  http://en.wikipedia.org/wiki/BrownBoost

But.... to get that, we really could do with the hexapod being *somewhat* stable, for a given value of *somewhat*. I.e to get value out of doing the full gyro system, we need a load of data where the bot is going "roughly" in the right direction.


Current thinking is to put in a single gyro to actually act as a gyro - ideally as simply as possible, get the other three just collecting data, and then put in a full gyro system when we have got enough data for the GA to munge together.


So, what we need is to get a gyro set up in heading-lock mode. I.e. it has a direction which it sees as "good", and deviations away from that direction get fed back into the system as corrections.

I was wondering how other people have handled this, ideally in a nice simple way, and in a way that is easy enough to do on an audrino?

My thinking is something like:

1) Define direction at the start - which ever way the robot initially faces.

2) put in a low-pass and a high-pass filter - abandon any reading from the gyro which doesn't fall into a middle ground. Use no real logic for this, just pick some values and harde code them.

3) where there is a deviation, do something extra - probably with either just the front legs or the back legs - more extenstion - and use then to push/pull the bot back into line.

4) some basic dampening where the bot isn't constantly going crazy trying to keep itself perfectly in line. 


How does this sound? TOO simple? Is there a simpler way still?


Many thanks for any comments.



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

With the GA it sounds like you are trying to do something along the lines of the StarFish Robot, which I can really appreciate.  In regards to making noisy sensors meaningful, the first thing that comes to mind is PID.  Although it is an art form unto itself, I have gotten surprisingly good results.  Arduino has a PID library.  I have communicated with the author Brett Beauregard on several occasions, and he is incredibly knowledgeable of the subject.  I wrote my own version in MRL here.

With PID you just tweak a few initial parameters and a target point, and let the magic happen.

Forgot that Arduino has PID already in place. That'll do the job. Thanks for that.


With regards to the GA stuff.....

What the cornell guys did was say "your made up of a load of bits - go work out how to be a robot"

We *might* end up there, but we're aiming to couple "services" for the bot together, rather than deal with an entire bot. So, the first one is going to be about binding a set of gyros together with a set of accelerometers and getting a GA to come up with a "where am I moving and how" sort of algorithm set.

Vision, depending on what we do with it, likely to take a similar form. The legs... maybe. There are so many variables that getting something to work will take a vast number of generations - likely going to be easier to take a different route with the legs...