heading lock gyros for hexapods - looks to bounce around idea's
July 17, 2011
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.