aig 2.0.0
Analytical inverse geomery for MPC in bipeds
Loading...
Searching...
No Matches
contact6d.hpp
Go to the documentation of this file.
1
9
10#ifndef AIG_CONTACT_6D
11#define AIG_CONTACT_6D
12
13// clang-format off
14#include <Eigen/Dense>
15#include "pinocchio/spatial/se3.hpp"
16#include <memory>
17// clang-format on
18
19namespace aig {
20
22public:
23 double mu, gu;
25 Eigen::Matrix<double, 6, 1> weights;
26 std::string frame_name;
27
28 std::string to_string() {
29 std::ostringstream out;
30 out << "Contact6D "
31 << ":\n";
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;
37
38 return out.str();
39 }
40
41 std::ostream &operator<<(std::ostream &out) {
42 out << this->to_string();
43 return out;
44 }
45
46 bool operator!=(const Contact6DSettings &rhs) { return !(*this == rhs); }
47
48 bool operator==(const Contact6DSettings &rhs) {
49 bool test = true;
50 test &= this->frame_name == rhs.frame_name;
51 test &= this->mu == rhs.mu;
52 test &= this->gu == rhs.gu;
53 test &= this->half_length == rhs.half_length;
54 test &= this->half_width == rhs.half_width;
55 test &= this->weights == rhs.weights;
56 return test;
57 }
58};
59
60class Contact6D {
61private:
62 Contact6DSettings settings_;
63 pinocchio::SE3 oMs_, cMo_;
64
65 // matrices
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_;
74 size_t frameID_;
75
76public:
77 Contact6D();
78 Contact6D(const Contact6DSettings &settings);
79 void initialize(const Contact6DSettings &settings);
80
81 // ~Contact6D();
82
83 // setters
84 void setMu(const double &mu);
85 void setGu(const double &gu);
86 void setForceWeights(const Eigen::Vector3d &force_weights);
87 void setTorqueWeights(const Eigen::Vector3d &torque_weights);
88 void setSurfaceHalfWidth(const double &half_width);
89 void setSurfaceHalfLength(const double &half_length);
90 void updateNewtonEuler(const Eigen::Vector3d &CoM, const pinocchio::SE3 &oMf);
91 void setFrameID(const size_t frameID) { frameID_ = frameID; }
92 void applyForce(const Eigen::Matrix<double, 6, 1> &force) {
93 contactForce_ << force;
94 }
95 void setPose(pinocchio::SE3 &pose) { oMs_ = pose; }
96 void deactivate() { contactForce_.setZero(); }
97
98 // getters
99 const Contact6DSettings &getSettings() { return settings_; }
100 const Eigen::Matrix<double, 6, 6> toWorldForces() {
101 return oMs_.toActionMatrixInverse().transpose();
102 }
103 const Eigen::Matrix<double, 6, 6> toCoMForces() {
104 return cMo_.act(oMs_).toActionMatrixInverse().transpose();
105 }
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(); }
109 size_t getFrameID() const { return frameID_; }
110 const pinocchio::SE3 &getPose() const { return oMs_; }
111
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_; }
119
120 const Eigen::Matrix<double, 6, 1> &appliedForce() { return contactForce_; }
121};
122
124
129public:
130 double mu;
131 Eigen::Matrix<double, 3, 1> weights;
132 std::string frame_name;
133
134 std::string to_string() {
135 std::ostringstream out;
136 out << "Contact6D "
137 << ":\n";
138 out << " mu: " << this->mu << "\n";
139 out << " weights: " << this->weights.transpose() << std::endl;
140
141 return out.str();
142 }
143
144 std::ostream &operator<<(std::ostream &out) {
145 out << this->to_string();
146 return out;
147 }
148
150 bool test = true;
151 test &= this->frame_name == rhs.frame_name;
152 test &= this->mu == rhs.mu;
153 test &= this->weights == rhs.weights;
154 return test;
155 }
156
157 bool operator!=(const ContactPointSettings &rhs) { return !(*this == rhs); }
158};
159
161private:
162 ContactPointSettings settings_;
163 pinocchio::SE3 oMs_, cMo_;
164
165 // matrices
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_;
173 size_t frameID_;
174 Eigen::Matrix<double, 3, 1> contactForce_;
175
176public:
179 void initialize(const ContactPointSettings &settings);
180
181 // ~ContactPoint();
182
183 // setters
184 void setMu(const double &mu);
185 void setForceWeights(const Eigen::Vector3d &force_weights);
186 void updateNewtonEuler(const Eigen::Vector3d &CoM, const pinocchio::SE3 &oMf);
187 void setFrameID(const size_t frameID) { frameID_ = frameID; }
188 void applyForce(const Eigen::Matrix<double, 3, 1> &force) {
189 contactForce_ << force;
190 }
191
192 // getters
193 const ContactPointSettings &getSettings() { return settings_; }
194 const Eigen::Matrix<double, 6, 3> toWorldForces() {
195 return oMs_.toActionMatrixInverse().transpose().block<6, 3>(0, 0);
196 }
197 const Eigen::Matrix<double, 6, 3> toCoMForces() {
198 return oMs_.act(cMo_).toActionMatrixInverse().transpose().block<6, 3>(0, 0);
199 }
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(); }
203 size_t getFrameID() const { return frameID_; }
204
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_; }
212
213 const Eigen::Matrix<double, 3, 1> &appliedForce() { return contactForce_; }
214};
215
216} // namespace aig
217
218#endif // AIG_CONTACT_6D
Contact6D()
Definition contac6d.cpp:12
void setPose(pinocchio::SE3 &pose)
Definition contact6d.hpp:95
const Eigen::Matrix< double, 5, 6 > & uni_A()
Definition contact6d.hpp:112
void setMu(const double &mu)
Definition contac6d.cpp:70
const Eigen::Matrix< double, 6, 6 > & NE_A()
Definition contact6d.hpp:118
const Eigen::Matrix< double, 6, 6 > & fri_A()
Definition contact6d.hpp:114
void deactivate()
Definition contact6d.hpp:96
const Eigen::Matrix< double, 6, 1 > & reg_A()
Definition contact6d.hpp:116
void setForceWeights(const Eigen::Vector3d &force_weights)
Definition contac6d.cpp:48
size_t getFrameID() const
Definition contact6d.hpp:109
void setTorqueWeights(const Eigen::Vector3d &torque_weights)
Definition contac6d.cpp:53
void setSurfaceHalfLength(const double &half_length)
Definition contac6d.cpp:64
void initialize(const Contact6DSettings &settings)
Definition contac6d.cpp:16
const Eigen::Matrix< double, 6, 1 > & appliedForce()
Definition contact6d.hpp:120
void updateNewtonEuler(const Eigen::Vector3d &CoM, const pinocchio::SE3 &oMf)
Definition contac6d.cpp:80
const Eigen::Matrix< double, 6, 1 > & reg_b()
Definition contact6d.hpp:117
const Eigen::Matrix< double, 5, 1 > & uni_b()
Definition contact6d.hpp:113
const Eigen::Matrix< double, 6, 1 > & fri_b()
Definition contact6d.hpp:115
const Eigen::Matrix< double, 6, 6 > toWorldForces()
Definition contact6d.hpp:100
void setGu(const double &gu)
Definition contac6d.cpp:75
const Eigen::Matrix< double, 6, 6 > toCoMForces()
Definition contact6d.hpp:103
void applyForce(const Eigen::Matrix< double, 6, 1 > &force)
Definition contact6d.hpp:92
size_t uni_rows() const
Definition contact6d.hpp:106
void setFrameID(const size_t frameID)
Definition contact6d.hpp:91
size_t fri_rows() const
Definition contact6d.hpp:107
const pinocchio::SE3 & getPose() const
Definition contact6d.hpp:110
const Contact6DSettings & getSettings()
Definition contact6d.hpp:99
size_t cols() const
Definition contact6d.hpp:108
void setSurfaceHalfWidth(const double &half_width)
Definition contac6d.cpp:58
size_t cols() const
Definition contact6d.hpp:202
const Eigen::Matrix< double, 6, 3 > toCoMForces()
Definition contact6d.hpp:197
size_t getFrameID() const
Definition contact6d.hpp:203
void setMu(const double &mu)
const Eigen::Matrix< double, 4, 1 > & fri_b()
Definition contact6d.hpp:208
const ContactPointSettings & getSettings()
Definition contact6d.hpp:193
const Eigen::Matrix< double, 4, 3 > & fri_A()
Definition contact6d.hpp:207
const Eigen::Matrix< double, 3, 1 > & reg_A()
Definition contact6d.hpp:209
void applyForce(const Eigen::Matrix< double, 3, 1 > &force)
Definition contact6d.hpp:188
const Eigen::Matrix< double, 1, 3 > & uni_A()
Definition contact6d.hpp:205
const Eigen::Matrix< double, 6, 3 > toWorldForces()
Definition contact6d.hpp:194
const Eigen::Matrix< double, 6, 3 > & NE_A()
Definition contact6d.hpp:211
void updateNewtonEuler(const Eigen::Vector3d &CoM, const pinocchio::SE3 &oMf)
const Eigen::Matrix< double, 3, 1 > & reg_b()
Definition contact6d.hpp:210
const Eigen::Matrix< double, 3, 1 > & appliedForce()
Definition contact6d.hpp:213
const Eigen::Matrix< double, 1, 1 > & uni_b()
Definition contact6d.hpp:206
ContactPoint(const ContactPointSettings &settings)
void initialize(const ContactPointSettings &settings)
void setFrameID(const size_t frameID)
Definition contact6d.hpp:187
size_t fri_rows() const
Definition contact6d.hpp:201
size_t uni_rows() const
Definition contact6d.hpp:200
void setForceWeights(const Eigen::Vector3d &force_weights)
Definition arm_ig.hpp:18
Definition contact6d.hpp:21
std::ostream & operator<<(std::ostream &out)
Definition contact6d.hpp:41
double half_width
Definition contact6d.hpp:24
std::string frame_name
Definition contact6d.hpp:26
double half_length
Definition contact6d.hpp:24
std::string to_string()
Definition contact6d.hpp:28
Eigen::Matrix< double, 6, 1 > weights
Definition contact6d.hpp:25
double gu
Definition contact6d.hpp:23
double mu
Definition contact6d.hpp:23
bool operator!=(const Contact6DSettings &rhs)
Definition contact6d.hpp:46
bool operator==(const Contact6DSettings &rhs)
Definition contact6d.hpp:48
Definition contact6d.hpp:128
bool operator!=(const ContactPointSettings &rhs)
Definition contact6d.hpp:157
Eigen::Matrix< double, 3, 1 > weights
Definition contact6d.hpp:131
double mu
Definition contact6d.hpp:130
std::string to_string()
Definition contact6d.hpp:134
bool operator==(const ContactPointSettings &rhs)
Definition contact6d.hpp:149
std::ostream & operator<<(std::ostream &out)
Definition contact6d.hpp:144
std::string frame_name
Definition contact6d.hpp:132