As is traditional for robot movement, and dancing to imitate robot movement, zero moment point is the control scheme to get that perfectly awkward, jerky look. It’s just another way of saying that the robot center of mass is perfectly above the center of contact area with the ground, meaning that if it stops moving, there will be no horizontal movement, also known as falling. A fun experiment is to try to walk like this yourself… difficult, painful, and very slow.
At the Neural Systems Lab where I work, there’s a good buddy of mine called the HOAP-2. He’s a shy fellow, but with just the right amount of hacking (read: a lot of hacking), I got him working much more fluidly. Of course, the limitations are still clear: the movement of walking is not the same as walking successfully.
The control system consists of a desktop computer running an old Red Hat install with RTLinux. Yeah, before they sold themselves, so clearly this stuff was outdated. Taking a CSV file of a walking gait (I think from the original makers of the HOAP robot) that delineated a specific walking speed, I converted this gait to one that could be more useful. By representing each joint angle in the 25 DOF robot as a sum of sines of the original CSV file, each joint could be moved to the correct position based off one input. I represented this value as Pi; the cyclic nature of a walking gait spoke to me as a circle. This circle could be looped as fast or slow as desired, giving the robot a range of speeds in which to walk.
Like I already mentioned, just sending joint angles to servos is hardly a “walk”. The contact forces of the robot hitting the table surface adds a bit of non-linearity to the problem space, but it was able to successfully walk beyond a limited ZMP. A much better, but more technically complex option would be model predictive control that actually know’s what’s going on with the robot’s body AND how it interacts with the world, but that’s a project for another day.