Skip to content

Why isn't there an angular momentum task in whole body control?

Stéphane Caron edited this page Oct 31, 2020 · 2 revisions

A key assumption of the linear inverted pendulum model to linearize centroidal dynamics is that the angular momentum is kept constant at the center of mass. So, why don't we use a corresponding angular-momentum task, so that whole-body control regulates the rate of change of the angular momentum to zero? This is for instance what walking controllers for the torque-controlled Atlas humanoid robot do.

Chest posture control

Rather than controlling angular momentum, which would be a force task, our controller here controls the chest orientation, which is a position task. Using this task was proposed in Biped walking stabilization based on linear inverted pendulum tracking (Kajita et al., 2010), where it is called chest posture control. In its main function, the controller updates two orientation tasks, one for the pelvis, to which legs are connected at the hips, and one for the torso, which is connected to the pelvis by chest joints:

    sva::PTransformd X_0_a = floatingBaseObs_.getAnchorFrame(controlRobot());
    pelvisOrientation_ = X_0_a.rotation();
    pelvisTask->orientation(pelvisOrientation_);
    torsoTask->orientation(mc_rbdyn::rpyToMat({0, torsoPitch_, 0}) * pelvisOrientation_);

In this code, X_0_a is the transform from the world to the ankle frame of the control robot. What's important to note here is that these are the frames of the control robot configuration, which comply with the ground by admittance control. If the second line were just:

    pelvisOrientation_ = Eigen::Matrix3d::Identity();

then the variations of ankle joint angles due to admittance control would propagate uncompensated to the hip, which would in turn sway the upper body. This choice of rotating the pelvis with the anchor frame helps the humanoid adapt to unmodeled terrain variations.

Relation to angular momentum

Controlling the orientation of the pelvis and torso helps reduce angular momentum variations, but it is not in itself an angular momentum control law. By keeping the upper-body posture fixed, we only compensate for the contribution of actuated coordinates to angular momentum. In particular, our controller does not compensate angular momentum variations caused by the (heavy) swing legs of walking biped. These variations are an additional source of unmodeled errors that will appear to the controller as ZMP errors.

Can I try adding an angular momentum task while walking?

Absolutely. It will reduce the amount of unmodeled dynamics the controller has to deal with.