Pendulum.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  *
4  * This file is inspired by Stephane's Caron original implementation as part of
5  * lipm_walking_controller <https://github.com/stephane-caron/lipm_walking_controller>
6  */
7 
8 #pragma once
9 #include <mc_planning/api.h>
10 #include <SpaceVecAlg/SpaceVecAlg>
11 
12 namespace mc_planning
13 {
18 {
19  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
20 
26  Pendulum();
27 
35  Pendulum(double lamda,
36  const Eigen::Vector3d & com = Eigen::Vector3d::Zero(),
37  const Eigen::Vector3d & comd = Eigen::Vector3d::Zero(),
38  const Eigen::Vector3d & comdd = Eigen::Vector3d::Zero());
39 
47  void completeIPM(const Eigen::Vector3d & p, const Eigen::Vector3d & n);
48 
55  void integrateCoMJerk(const Eigen::Vector3d & comddd, double dt);
56 
65  void integrateIPM(Eigen::Vector3d zmp, double lambda, double dt);
66 
74  void reset(double lambda,
75  const Eigen::Vector3d & com,
76  const Eigen::Vector3d & comd = Eigen::Vector3d::Zero(),
77  const Eigen::Vector3d & comdd = Eigen::Vector3d::Zero());
78 
84  void resetCoMHeight(double height, const Eigen::Vector3d & p, const Eigen::Vector3d & n);
85 
87  const Eigen::Vector3d & com() const { return com_; }
88 
90  const Eigen::Vector3d & comd() const { return comd_; }
91 
93  const Eigen::Vector3d & comdd() const { return comdd_; }
94 
96  Eigen::Vector3d dcm() const { return com_ + comd_ / omega_; }
97 
99  double omega() const { return omega_; }
100 
106  const Eigen::Vector3d & zmp() const { return zmp_; }
107 
110  const Eigen::Vector3d & zmpd() const { return zmpd_; }
111 
112 protected:
113  Eigen::Vector3d com_ = Eigen::Vector3d::Zero();
114  Eigen::Vector3d comd_ = Eigen::Vector3d::Zero();
115  Eigen::Vector3d comdd_ = Eigen::Vector3d::Zero();
116  Eigen::Vector3d comddd_ = Eigen::Vector3d::Zero();
117  Eigen::Vector3d zmp_ = Eigen::Vector3d::Zero();
118  Eigen::Vector3d zmpd_ = Eigen::Vector3d::Zero();
119  double omega_ = 0;
120 };
121 } // namespace mc_planning
mc_rbdyn::zmp
Eigen::Vector3d MC_RBDYN_DLLAPI zmp(const sva::ForceVecd &netTotalWrench, const Eigen::Vector3d &plane_p, const Eigen::Vector3d &plane_n, double minimalNetNormalForce=1.)
Actual ZMP computation from net total wrench and the ZMP plane.
mc_planning::Pendulum::com
const Eigen::Vector3d & com() const
Definition: Pendulum.h:87
mc_planning::Pendulum::zmpd
const Eigen::Vector3d & zmpd() const
Definition: Pendulum.h:110
mc_planning::Pendulum::comdd
const Eigen::Vector3d & comdd() const
Definition: Pendulum.h:93
mc_planning::Pendulum
Definition: Pendulum.h:17
mc_planning::Pendulum::omega
double omega() const
Definition: Pendulum.h:99
mc_planning::Pendulum::zmp
const Eigen::Vector3d & zmp() const
Definition: Pendulum.h:106
api.h
mc_planning::Pendulum::dcm
Eigen::Vector3d dcm() const
Definition: Pendulum.h:96
mc_planning
Definition: Pendulum.h:12
MC_PLANNING_DLLAPI
#define MC_PLANNING_DLLAPI
Definition: api.h:50
mc_planning::Pendulum::comd
const Eigen::Vector3d & comd() const
Definition: Pendulum.h:90