Go to the documentation of this file.
10 #ifndef DYNACOM_DYNACOM
11 #define DYNACOM_DYNACOM
14 #include <Eigen/Dense>
15 #include "pinocchio/fwd.hpp"
16 #include "pinocchio/multibody/data.hpp"
17 #include "pinocchio/multibody/model.hpp"
18 #include "pinocchio/spatial/se3.hpp"
42 out <<
"DynaCoMSettings:\n";
43 out <<
" urdf: " << obj.
urdf << std::endl;
57 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
61 pinocchio::Model model_;
62 pinocchio::Data data_;
64 double inf_ = std::numeric_limits<double>::infinity();
68 std::map<std::string, std::shared_ptr<Contact6D>> known_contact6ds_;
69 std::vector<std::string> active_contact6ds_;
72 Eigen::MatrixXd unilaterality_A_;
73 Eigen::VectorXd unilaterality_b_;
74 Eigen::MatrixXd friction_A_;
75 Eigen::VectorXd friction_b_;
76 Eigen::VectorXd regularization_A_;
77 Eigen::VectorXd regularization_b_;
78 Eigen::Matrix<double, 6, -1> newton_euler_A_;
79 Eigen::Matrix<double, 6, 1> newton_euler_b_;
89 Eigen::MatrixXd CE_, CI_, C_;
90 Eigen::VectorXd ce0_, ci0_;
94 Eigen::VectorXi activeSet_;
95 size_t activeSetSize_;
97 size_t cols_, uni_rows_, fri_rows_;
99 size_t uni_i_, fri_i_, j_;
102 Eigen::Vector3d groundCoMForce_, groundCoMTorque_, CoPTorque_, weight_;
103 Eigen::Vector3d acom_;
104 Eigen::Vector2d cop_;
108 std::vector<std::string>::iterator activeID_;
109 std::map<std::string, std::shared_ptr<Contact6D>>::iterator knownID_;
112 pinocchio::SE3 oMso_, soMs_;
113 Eigen::Matrix<double, 6, 6> Sz_, oXso_, soXs_;
115 void addSizes(
const std::shared_ptr<Contact6D> &contact);
116 void removeSizes(
const std::shared_ptr<Contact6D> &contact);
117 void resizeMatrices();
118 void buildMatrices(
const Eigen::Vector3d &groundCoMForce,
119 const Eigen::Vector3d &groundCoMTorque,
120 const Eigen::Vector3d &CoM);
124 const Eigen::Matrix<double, 6, 6> toWorldCoPWrench(pinocchio::SE3 pose);
132 const Eigen::VectorXd &velocity,
133 const Eigen::VectorXd &acceleration,
134 const Eigen::Matrix<double, 6, 1> &externalWrench =
135 Eigen::Matrix<double, 6, 1>::Zero(),
136 bool flatHorizontalGround =
true);
138 void computeNL(
const double &w,
const Eigen::VectorXd &posture,
139 const Eigen::VectorXd &velocity,
140 const Eigen::VectorXd &acceleration,
141 const Eigen::Matrix<double, 6, 1> &externalWrench =
142 Eigen::Matrix<double, 6, 1>::Zero(),
143 bool flatHorizontalGround =
true);
147 void addContact6d(
const std::shared_ptr<Contact6D> &contact,
148 const std::string &name,
const bool active =
true);
155 const Eigen::Vector3d &groundCoMTorque,
156 const Eigen::Vector3d &CoM);
161 const Eigen::Vector3d &
getCoM() {
return data_.com[0]; }
162 const Eigen::Vector3d &
getVCoM() {
return data_.vcom[0]; }
163 const Eigen::Vector3d &
getACoM() {
return acom_; }
164 const Eigen::Vector3d &
getAM() {
return L_; }
165 const Eigen::Vector2d &
getCoP() {
return cop_; }
166 const Eigen::Vector2d &
getNL() {
return n_; }
170 return active_contact6ds_;
172 const std::shared_ptr<Contact6D> &
getContact(std::string name) {
173 return known_contact6ds_[name];
176 const pinocchio::Model &
getModel() {
return model_; }
177 const pinocchio::Data &
getData() {
return data_; }
180 return unilaterality_A_.block(0, 0, uni_i_, j_);
182 const Eigen::VectorXd
uni_b() {
return unilaterality_b_.segment(0, j_); }
183 const Eigen::MatrixXd
fri_A() {
return friction_A_.block(0, 0, fri_i_, j_); }
184 const Eigen::VectorXd
fri_b() {
return friction_b_.segment(0, j_); }
185 const Eigen::VectorXd
reg_A() {
return regularization_A_.segment(0, j_); }
186 const Eigen::VectorXd
reg_b() {
return regularization_b_.segment(0, j_); }
187 const Eigen::Matrix<double, 6, -1>
NE_A() {
188 return newton_euler_A_.block(0, 0, 6, j_);
190 const Eigen::Matrix<double, 6, 1> &
NE_b() {
return newton_euler_b_; }
196 #endif // DYNACOM_DYNACOM
const std::shared_ptr< Contact6D > & getContact(std::string name)
Definition: dyna_com.hpp:172
const Eigen::MatrixXd uni_A()
Definition: dyna_com.hpp:179
const Eigen::Matrix< double, 6, -1 > NE_A()
Definition: dyna_com.hpp:187
const Eigen::Vector3d & getGroundCoMTorque()
Definition: dyna_com.hpp:168
const Eigen::Vector2d & getNL()
Definition: dyna_com.hpp:166
DynaCoM()
Definition: dyna_com.cpp:22
void computeNL(const double &w, const Eigen::VectorXd &posture, const Eigen::VectorXd &velocity, const Eigen::VectorXd &acceleration, const Eigen::Matrix< double, 6, 1 > &externalWrench=Eigen::Matrix< double, 6, 1 >::Zero(), bool flatHorizontalGround=true)
Definition: dyna_com.cpp:144
const Eigen::VectorXd & allForces()
Definition: dyna_com.hpp:191
friend bool operator==(const DynaCoMSettings &lhs, const DynaCoMSettings &rhs)
Definition: dyna_com.hpp:47
const pinocchio::Data & getData()
Definition: dyna_com.hpp:177
const Eigen::VectorXd reg_b()
Definition: dyna_com.hpp:186
Definition: contact6d.hpp:19
void distributeForce(const Eigen::Vector3d &groundCoMForce, const Eigen::Vector3d &groundCoMTorque, const Eigen::Vector3d &CoM)
Definition: dyna_com.cpp:393
const Eigen::Matrix< double, 6, 1 > & NE_b()
Definition: dyna_com.hpp:190
const Eigen::Vector3d & getCoM()
Definition: dyna_com.hpp:161
void deactivateContact6d(const std::string &name)
Definition: dyna_com.cpp:230
const Eigen::Vector3d & getGroundCoMForce()
Definition: dyna_com.hpp:167
const Eigen::Vector2d & getCoP()
Definition: dyna_com.hpp:165
void initialize(const DynaCoMSettings settings)
Definition: dyna_com.cpp:25
Definition: dyna_com.hpp:32
friend std::ostream & operator<<(std::ostream &out, const DynaCoMSettings &obj)
Definition: dyna_com.hpp:40
const Eigen::MatrixXd fri_A()
Definition: dyna_com.hpp:183
const std::vector< std::string > & getActiveContacts()
Definition: dyna_com.hpp:169
void computeDynamics(const Eigen::VectorXd &posture, const Eigen::VectorXd &velocity, const Eigen::VectorXd &acceleration, const Eigen::Matrix< double, 6, 1 > &externalWrench=Eigen::Matrix< double, 6, 1 >::Zero(), bool flatHorizontalGround=true)
Definition: dyna_com.cpp:87
const Eigen::Vector3d & getAM()
Definition: dyna_com.hpp:164
const Eigen::Vector3d & getAMVariation()
Please call computeDynamics first.
Definition: dyna_com.hpp:160
std::string urdf
This must contain either a valid path to the urdf file or the content of this file in a string.
Definition: dyna_com.hpp:38
Definition: dyna_com.hpp:55
const Eigen::VectorXd uni_b()
Definition: dyna_com.hpp:182
void removeContact6d(const std::string &name)
Definition: dyna_com.cpp:177
const Eigen::VectorXd reg_A()
Definition: dyna_com.hpp:185
void activateContact6d(const std::string &name)
Definition: dyna_com.cpp:212
void addContact6d(const std::shared_ptr< Contact6D > &contact, const std::string &name, const bool active=true)
Definition: dyna_com.cpp:165
const Eigen::Vector3d & getVCoM()
Definition: dyna_com.hpp:162
const DynaCoMSettings & getSettings()
Definition: dyna_com.hpp:175
const pinocchio::Model & getModel()
Definition: dyna_com.hpp:176
const Eigen::VectorXd fri_b()
Definition: dyna_com.hpp:184
const Eigen::Vector3d & getACoM()
Definition: dyna_com.hpp:163