Control algorithms for dynamically stable biped?

I’m looking to start on building a humanoid robot in the next few months. I’m wanting to open source the final machine so open source suggestions are especially welcome. End goal is to create a machine that can shadow an operator’s movements. I’m aware of some problems with this idea, I’ll list/address them at the bottom).

I can handle the hardware and mechanical side of things just fine, I’ve got a good understanding on actuators and mechanical design as well as the tools and skills to build the thing.

The one thing I’m sort of stuck on is how to make it dynamically stable. Here are my initial thoughts and ideas:

My initial thought was to treat it similar to a two wheel balancing robot and just have it constantly move to try and catch itself, or shift it’s centre of mass over the legs. The problem I see with this is that accelerometers don’t work in free fall, so it would not work(?) if the machine stumbles I think. It also would not be able to adapt to when the CoM shifts (cargo is added, arms move around etc.) and would constantly be falling.

Second thought was to use multiple force sensors on the feet (at least 3). Using these I should be able to work out the location (along the ground plane) and magnitude of the sum of the weight and inertial forces on the machine. From there move the feet so this force falls within the “bounding box” of the two feet (i.e. the area enclosed a polygon made up of the ground contact points). The problems I see here are if there are 2 or less force sensors on the ground, or if the third+ sensors end up colinear with the first two, a ground plane can’t be established. I.e. the machine has started to tip.

I’ve heard of and read up about ZMP, but still not 100% about what it is and how it works other than it tries to place the foot so that it balances/opposes the weight and inertial forces of the robot (not 100% sure what is used to sense those in the ZMP method). ZMP also seems to assume the CoM is fairly constant (does not change height, weight does not change etc.) which does not work for me.

But I don’t think these methods will work for a robot that needs to shadow a person’s movements. The problems being that unless the machine has the same proportions, same mass and same mass distribution as the operator, it wont be stable in the exact same position as the operator (you have a small bit of wiggle room since the CoM can lie anywhere within the polygon created by connecting the vertices of the feet and still be stable). This can be solved I guess by allowing the machine some allowable joint error or just telling it “get as close to this while still being stable”.

Second issue is that a lot of what people do is “controlled falling” (i.e. if you froze partway through your movement you would fall over, and not just for lack of minor corrections as with standing upright) and the above methods are focused on being stable. When someone lifts their foot off the ground, they could be intending to balance on the remaining foot, or be taking a “fall” in a certain direction to take a step. Both require a very different response. For this reason mimicking someone’s movement can be hard even for a person. The obvious answer would be to wait and see what the person is intending to do but I’d like the solution to be more “real time” and with no intentional lag.

Any ideas or suggestions? Sorry for the long post.

submitted by /u/Trakyan