I'm currently working on Humanoid robot. I've solved the Forward & Inverse Kinematic relations of the robot, and they turn out to be fine. Now I want to move onto Walking. I've seen tons of algorithms & research papers but none of them make the idea clear. I understand the concept of ZMP & what the method tries to do, but I simply can't get my head around all the details that are required to implement it in a real robot. Do I have to plan my gait & generate the trajectories beforehand, solve the joint angles, store them somewhere & feed it to the motors in real-time? or Do I generate everything at run-time(a bad Idea IMO)? Is there a step-by-step procedure that I can follow to get the job done? or Do I have to crawl all my way through those Research papers, which never make sense(at least for me).
-
1$\begingroup$ Can you please clarify your question? I'm not sure what it is exactly that you're asking for help with. (Please update the question with more detail rather than replying to this comment) $\endgroup$– Chuck ♦Commented Nov 30, 2015 at 0:26
-
$\begingroup$ I've tried to improve the question. Do have a look $\endgroup$– Bilal WasimCommented Nov 30, 2015 at 18:08
2 Answers
Keep in mind that the ZMP is a simplification. In practice with walking robots the support polygon is constantly changing so it can be tough to keep the ZMP inside.
Pregenerated (offline) trajectories will only work in very specific conditions (flat ground, no disturbances), and only if you can model your support polygon well.
That said, everything you learn as you try to make your robot walk with offline trajectories will be useful going forward.
They are two main approachs for humanoid robot walking. Practically it depends on the physical capabilities of your robot and what you want to achieve.
If your robot is able to sustain strong impact and you aim at cyclic walking on uneven terrain I would recommend to try the Hybrid Zero Dynamics approach. The current best example is the Cassie or the Digit robot from Agility Robotics see [1] for a recent example.
For a more fragile robot, the usual step to make a humanoid walking on flat ground without obstacle is to:
- Plan foot steps.
- Generate a ZMP trajectory from the foot steps, and the foot trajectories (usually polynomials with zero speed, zero acceleration at the beginning/end and an intermediate vertical point).
- Generate the CoM trajectory from the ZMP trajectory.
- Use your IK solver to follow the CoM trajectory and the foot trajectories. An inverse dynamic solver would be better, but it is more difficult to achieve.
Once you have a first version of this working in simulation you can try to develop a stabilizer. It assumes usually an estimator of your robot's root attitude (often the waist), and a feedback on the Divergent Component of Motion of your robot. For a good overview on this topic I would recommend the following paper [2].
From this, they are then various approachs depending on what you want to do: multiple contacts, uneven terrain, manipulation, co-working with a human.
[1] Inverse Dynamics Control of Compliant Hybrid Zero Dynamic Walking, Jenna Reher and Aaron D. Ames, ICRA 2021, https://arxiv.org/pdf/2010.09047.pdf
[2] Stair Climbing Stabilization of the HRP-4 Humanoid Robot using Whole-body Admittance Control, Caron et al, ICRA 2018, https://arxiv.org/abs/1809.07073