Go to the documentation of this file.
10 #ifndef DYNACOM_CONTACT_6D
11 #define DYNACOM_CONTACT_6D
14 #include <Eigen/Dense>
15 #include "pinocchio/spatial/se3.hpp"
29 std::ostringstream out;
32 out <<
" mu: " << this->mu <<
"\n";
33 out <<
" gu: " << this->gu <<
"\n";
34 out <<
" weights: " << this->weights.transpose() <<
"\n";
35 out <<
" Surface half_length: " << this->half_length <<
"\n";
36 out <<
" Surface half_width: " << this->half_width << std::endl;
51 test &= this->mu == rhs.
mu;
52 test &= this->gu == rhs.
gu;
55 test &= this->weights == rhs.
weights;
63 pinocchio::SE3 oMs_, cMo_;
66 Eigen::Matrix<double, 5, 6> unilaterality_A_;
67 Eigen::Matrix<double, 5, 1> unilaterality_b_;
68 Eigen::Matrix<double, 6, 6> friction_A_;
69 Eigen::Matrix<double, 6, 1> friction_b_;
70 Eigen::Matrix<double, 6, 1> regularization_A_;
71 Eigen::Matrix<double, 6, 1> regularization_b_;
72 Eigen::Matrix<double, 6, 6> newton_euler_A_;
73 Eigen::Matrix<double, 6, 1> contactForce_;
84 void setMu(
const double &mu);
85 void setGu(
const double &gu);
91 void setFrameID(
const size_t frameID) { frameID_ = frameID; }
92 void applyForce(
const Eigen::Matrix<double, 6, 1> &force) {
93 contactForce_ << force;
95 void setPose(pinocchio::SE3 &pose) { oMs_ = pose; }
101 return oMs_.toActionMatrixInverse().transpose();
104 return cMo_.act(oMs_).toActionMatrixInverse().transpose();
106 size_t uni_rows()
const {
return unilaterality_A_.rows(); }
107 size_t fri_rows()
const {
return friction_A_.rows(); }
108 size_t cols()
const {
return newton_euler_A_.cols(); }
110 const pinocchio::SE3 &
getPose()
const {
return oMs_; }
112 const Eigen::Matrix<double, 5, 6> &
uni_A() {
return unilaterality_A_; }
113 const Eigen::Matrix<double, 5, 1> &
uni_b() {
return unilaterality_b_; }
114 const Eigen::Matrix<double, 6, 6> &
fri_A() {
return friction_A_; }
115 const Eigen::Matrix<double, 6, 1> &
fri_b() {
return friction_b_; }
116 const Eigen::Matrix<double, 6, 1> &
reg_A() {
return regularization_A_; }
117 const Eigen::Matrix<double, 6, 1> &
reg_b() {
return regularization_b_; }
118 const Eigen::Matrix<double, 6, 6> &
NE_A() {
return newton_euler_A_; }
120 const Eigen::Matrix<double, 6, 1> &
appliedForce() {
return contactForce_; }
135 std::ostringstream out;
138 out <<
" mu: " << this->mu <<
"\n";
139 out <<
" weights: " << this->weights.transpose() << std::endl;
152 test &= this->mu == rhs.
mu;
153 test &= this->weights == rhs.
weights;
163 pinocchio::SE3 oMs_, cMo_;
166 Eigen::Matrix<double, 1, 3> unilaterality_A_;
167 Eigen::Matrix<double, 1, 1> unilaterality_b_;
168 Eigen::Matrix<double, 4, 3> friction_A_;
169 Eigen::Matrix<double, 4, 1> friction_b_;
170 Eigen::Matrix<double, 3, 1> regularization_A_;
171 Eigen::Matrix<double, 3, 1> regularization_b_;
172 Eigen::Matrix<double, 6, 3> newton_euler_A_;
174 Eigen::Matrix<double, 3, 1> contactForce_;
184 void setMu(
const double &mu);
187 void setFrameID(
const size_t frameID) { frameID_ = frameID; }
189 contactForce_ << force;
195 return oMs_.toActionMatrixInverse().transpose().block<6, 3>(0, 0);
198 return oMs_.act(cMo_).toActionMatrixInverse().transpose().block<6, 3>(0, 0);
200 size_t uni_rows()
const {
return unilaterality_A_.rows(); }
201 size_t fri_rows()
const {
return friction_A_.rows(); }
202 size_t cols()
const {
return newton_euler_A_.cols(); }
205 const Eigen::Matrix<double, 1, 3> &
uni_A() {
return unilaterality_A_; }
206 const Eigen::Matrix<double, 1, 1> &
uni_b() {
return unilaterality_b_; }
207 const Eigen::Matrix<double, 4, 3> &
fri_A() {
return friction_A_; }
208 const Eigen::Matrix<double, 4, 1> &
fri_b() {
return friction_b_; }
209 const Eigen::Matrix<double, 3, 1> &
reg_A() {
return regularization_A_; }
210 const Eigen::Matrix<double, 3, 1> &
reg_b() {
return regularization_b_; }
211 const Eigen::Matrix<double, 6, 3> &
NE_A() {
return newton_euler_A_; }
213 const Eigen::Matrix<double, 3, 1> &
appliedForce() {
return contactForce_; }
218 #endif // DYNACOM_CONTACT_6D
Definition: contact6d.hpp:19