I am new on this forum and only slightly less new in robotics. I am currently studying Hexapod movements and in particular, free gaits to achieve omni directional movement.
While many apparently successful omnidirectional hexapods are around, most of them seems to use IK as a way to produce the gaits. My first question is thus : are those really free gaits or is the full IK sequence is already programmed ? In other words, has anyone succeeded in programming an IK module that takes any direction vector as input (the input vector would have two coordinates, “forward”, +/- [0-1] - 1 = full speed, 0 = no movement and the signum is backward/forward, and an orientation) and output the servo’s angles ?
I made some research and I have found many other approaches and I’d like to know if anyone has implemented them with success :
Cyclic Genetic Algorithm
Staged evolution (oscillating leg first, then the control of each leg)
Restrictedness
The last one, first seemingly published in Fielding, M.R. 2001, seems the most interesting but I can’t get CLAWAR 4 (the conference where the full paper was presented) and could get the following papers which don’t describe the full algorithm in enough detail to implement it.
Finally, and that could have been my first question but I didn’t want to seem like I didn’t “JFGedI”, how do you make your Hexapod move in such a smooth way, forward, and also turn ?
I can’t tell you how every hexapod on this forum works but I can tell you how mine does
IK takes care of all the servo angles. This means that I can input XYZ coordinates for a single leg or the total body. The IK calculates the needed positions for all the servos. It is also possible to input angles like XYZ rotation of the body. The IK can also take care of those inputs.
As for walking: If I want to go forward, I’m using a speed input. If the speed is positive the hexapod walks forward, negative resolves to backward. This is for both X and Z so I can walk in any direction! The gait is a sequence that knows which leg needs to do what… (go up, go down, go backward) the amount of travel depends on the speed. If the speed returns to 0, my hex will place his legs to the initialize position. Turning is almost the same but this time the input is a angle instead of a position…
Thank you for the quick reply ! Can’t watch YouTube’s video at work, but I read your topic on your BlackWido and saw some photos, it’s really great work, the finish is astounding, looks professional I still have some questions though, put that on the account of my young age in the robotics field rather than your explanations !
If I understood well, you have a programmed sequence (made from IK) of movements that is modulated by a factor, the speed. Same thing for turning, except that this time, the factor is related to the desired angle. While I can imagine what it means for moving along one axis and turning along one axis, I have no idea how it works for two axis, namely, X and Z : how do you blend the two sequences (if you have a sequence for moving along the X axis and one for the Z axis) ? Same question with moving and turning at the same time, how does the blending of the sequences work ?
My problem with IK is that it doesn’t solve the problem of free gait (able to deal with very rough ground, or dealing with broken legs) and omnidirection (going in any direction without turning first) … am I correct ? That’s why I started to look for more biologically inspired ways, such as staged evolution and restrictedness, but I’d be very glad to know if there is some kind of workaround !
For a start, you need to split up to things, IK and the gait.
IK is the most important part of a smooth movements. In my program I’ve leg IK and body IK. Lets just keep it to the leg IK for now. What I can do with the leg IK is send target coordinates in XYZ to the leg. The IK calculates the corresponding angles to that coordinates and if I send those angles to the servos, the position of the feet is exactly on the target!
Thanks again, Xan, it did make sense ! I agree with you, I shouldn’t worry about rough terrain until I get a walking Hexapod. Beside, now that I understand more how you use IK, it seems much more flexible than I first thought.
However, the walking videos are no longer available. I did see the Wiimotes ones, and that’s really nice, pretty smooth ! I would love to see some detailed videos of how it walks. A 2 hour one, from every angle, would be nice
About the IK, how did you go about it ? I am currently thinking on implementing a CCD algorithm as it seems to be less computionally expensive than SVD or other pseudo-inverse related technics, and while it seems pretty good at handling singularities, I don’t know if it’ll be that alright with servo constraints… So … What’s your view on this if you don’t mind ?
One final question : should the hexapod have 2 DOF or 3 DOF legs ? By “should”, I mean : what’s wrong with 2 DOF, beside looking far less cool ?
2DOF won’t give you the freedom that you want. 2DOF means one servo for lifting the leg and the other for moving the leg forwards. So this means that you can’t walk sideways like a crab. You can walk forward, backward and turn. Take some time to compare the different ways of walking by watching the movies on LM’s site.
What do you mean by not available? 4 movies are available on youtube. Just search for BlackWido or Xanore
You just lost me there I’ve never used such complex theories…
Here you can find some formulas of IK which can help you understand the algorithm. learnaboutrobots.com/inverseKinematics.htm
You can also take a look at zenta’s PEP. This is a excel sheet including full IK. the sheet with IK for a single leg is a good place to start.
I’ve written a program to do something like this, as I’m sure many here have. It’s not so difficult once you break it up into smaller parts. IK (generating servo movements from a desired foot location) is just one small part of what you’re trying to accomplish.
I’m not familiar with any of methods in your OP, but I do know none of them are required for a 3DOF leg. Just plain old trigonometry and some matrix math to do some vector transformations will get you there.
I’d break everything up like this (although there may be better ways):
Inverse Kinematics: a function to derive a leg’s servo movements from it’s desired foot location. This can be difficult in the general case, but it’s not bad if you constrain yourself to 3DOF. You can do it with pen and paper in closed form.
Forward Kinematics: a function to derive a leg’s foot location based upon it’s servo locations. Use transformation matricies for each link in the leg to make this easy.
Hint: Denavit-Hartenberg parameters are your friend for kinematics - google it if you’re not familiar.
step generation: figure out where each foot needs to go (in leg coordinates) to complete a step. Since your input vector is in robot coordinates, you will need a way to translate between robot coordinates and leg coordinates - use basic matrix transformations to do this.
gait generation: combine steps in sequence to create one gait cycle. This is easy once you get step generation working.