BipedalLocomotion::SimplifiedModelControllers::CoMZMPController class

CoMZMPController implements the following control law.

\[ \dot{x} = \dot{x}^* - K _ {zmp} (r^*_{zmp} - r_{zmp}) + K _ {com} (x^* - x) \]

where $x$ is the CoM position and $r_{zmp}$ the ZMP position. The gains $K_{zmp}$ and $K_{com}$ depends on the orientation of a frame rigidly attached to the CoM (B) w.r.t. the inertial frame (I). The rotation matrix ${}^I R _ B$ depends only on the yaw angle.

Image

Base classes

template<class _Input, class _Output>
class BipedalLocomotion::System::Advanceable<CoMZMPControllerInput, CoMZMPControllerOutput>
Basic class that represents a discrete system.

Public functions

auto initialize(std::weak_ptr<const ParametersHandler::IParametersHandler> handler) -> bool override
Initialize the controller.
auto getOutput() const -> const Output& final
Get the the controller output.
auto isOutputValid() const -> bool final
Determines the validity of the object retrieved with getOutput()
auto advance() -> bool final
Compute the control law.
auto setInput(const Input& input) -> bool final
Set the input of the advanceable block.
void setSetPoint(Eigen::Ref<const Eigen::Vector2d> CoMVelocity, Eigen::Ref<const Eigen::Vector2d> CoMPosition, Eigen::Ref<const Eigen::Vector2d> ZMPPosition)
Set the desired set-point.
void setFeedback(Eigen::Ref<const Eigen::Vector2d> CoMPosition, Eigen::Ref<const Eigen::Vector2d> ZMPPosition, const manif::SO2d& I_R_B)
Set the state feedback.
void setFeedback(Eigen::Ref<const Eigen::Vector2d> CoMPosition, Eigen::Ref<const Eigen::Vector2d> ZMPPosition, const double angle)
Set the state feedback.

Function documentation

bool BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::initialize(std::weak_ptr<const ParametersHandler::IParametersHandler> handler) override

Initialize the controller.

Parameters
handler pointer to the parameter handler.
Returns true in case of success/false otherwise.

const Output& BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::getOutput() const final

Get the the controller output.

Returns The velocity of the CoM.

bool BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::isOutputValid() const final

Determines the validity of the object retrieved with getOutput()

Returns True if the object is valid, false otherwise.

bool BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::advance() final

Compute the control law.

Returns True if the advance is successfull.

bool BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::setInput(const Input& input) final

Set the input of the advanceable block.

Parameters
input the CoMZMPControllerInput struct
Returns true in case of success and false otherwise.

void BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::setSetPoint(Eigen::Ref<const Eigen::Vector2d> CoMVelocity, Eigen::Ref<const Eigen::Vector2d> CoMPosition, Eigen::Ref<const Eigen::Vector2d> ZMPPosition)

Set the desired set-point.

Parameters
CoMVelocity a 2d-vector containing the x and y coordinate of the CoM velocity.
CoMPosition a 2d-vector containing the x and y coordinate of the CoM position.
ZMPPosition a 2d-vector containing the x and y coordinate of the ZMP position.

void BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::setFeedback(Eigen::Ref<const Eigen::Vector2d> CoMPosition, Eigen::Ref<const Eigen::Vector2d> ZMPPosition, const manif::SO2d& I_R_B)

Set the state feedback.

Parameters
CoMPosition a 2d-vector containing the x and y coordinate of the CoM position.
ZMPPosition a 2d-vector containing the x and y coordinate of the ZMP position.
I_R_B rotation matrix that brings a vector expressed in the frame rigidly attached to the CoM (B) to the inertial frame (I).

void BipedalLocomotion::SimplifiedModelControllers::CoMZMPController::setFeedback(Eigen::Ref<const Eigen::Vector2d> CoMPosition, Eigen::Ref<const Eigen::Vector2d> ZMPPosition, const double angle)

Set the state feedback.

Parameters
CoMPosition a 2d-vector containing the x and y coordinate of the CoM position.
ZMPPosition a 2d-vector containing the x and y coordinate of the ZMP position.
angle the yaw angle (in radians) represents the ${}^I R_B$ rotation matrix. The rotation brings a vector expressed in the frame rigidly attached to the CoM (B) to the inertial frame (I). The yaw angle allows the user to have different gains on the forward and lateral walking direction.