contact6d.hpp
Go to the documentation of this file.
1 
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 
19 namespace aig {
20 
22  public:
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 
60 class Contact6D {
61  private:
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 
76  public:
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 
129  public:
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 
149  bool operator==(const ContactPointSettings &rhs) {
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 
161  private:
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 
176  public:
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
Definition: contact6d.hpp:60
Contact6D()
Definition: contac6d.cpp:12
const Eigen::Matrix< double, 6, 6 > & fri_A()
Definition: contact6d.hpp:114
void setPose(pinocchio::SE3 &pose)
Definition: contact6d.hpp:95
const Eigen::Matrix< double, 6, 6 > toCoMForces()
Definition: contact6d.hpp:103
void setMu(const double &mu)
Definition: contac6d.cpp:70
const Contact6DSettings & getSettings()
Definition: contact6d.hpp:99
const Eigen::Matrix< double, 6, 1 > & reg_b()
Definition: contact6d.hpp:117
const Eigen::Matrix< double, 5, 1 > & uni_b()
Definition: contact6d.hpp:113
void deactivate()
Definition: contact6d.hpp:96
const pinocchio::SE3 & getPose() const
Definition: contact6d.hpp:110
void setForceWeights(const Eigen::Vector3d &force_weights)
Definition: contac6d.cpp:48
const Eigen::Matrix< double, 5, 6 > & uni_A()
Definition: contact6d.hpp:112
const Eigen::Matrix< double, 6, 6 > toWorldForces()
Definition: contact6d.hpp:100
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
void updateNewtonEuler(const Eigen::Vector3d &CoM, const pinocchio::SE3 &oMf)
Definition: contac6d.cpp:80
const Eigen::Matrix< double, 6, 6 > & NE_A()
Definition: contact6d.hpp:118
const Eigen::Matrix< double, 6, 1 > & appliedForce()
Definition: contact6d.hpp:120
const Eigen::Matrix< double, 6, 1 > & reg_A()
Definition: contact6d.hpp:116
void setGu(const double &gu)
Definition: contac6d.cpp:75
void applyForce(const Eigen::Matrix< double, 6, 1 > &force)
Definition: contact6d.hpp:92
size_t uni_rows() const
Definition: contact6d.hpp:106
const Eigen::Matrix< double, 6, 1 > & fri_b()
Definition: contact6d.hpp:115
void setFrameID(const size_t frameID)
Definition: contact6d.hpp:91
size_t fri_rows() const
Definition: contact6d.hpp:107
size_t cols() const
Definition: contact6d.hpp:108
void setSurfaceHalfWidth(const double &half_width)
Definition: contac6d.cpp:58
Definition: contact6d.hpp:160
size_t cols() const
Definition: contact6d.hpp:202
const Eigen::Matrix< double, 6, 3 > toWorldForces()
Definition: contact6d.hpp:194
size_t getFrameID() const
Definition: contact6d.hpp:203
void setMu(const double &mu)
void applyForce(const Eigen::Matrix< double, 3, 1 > &force)
Definition: contact6d.hpp:188
const Eigen::Matrix< double, 1, 1 > & uni_b()
Definition: contact6d.hpp:206
const Eigen::Matrix< double, 6, 3 > toCoMForces()
Definition: contact6d.hpp:197
const Eigen::Matrix< double, 1, 3 > & uni_A()
Definition: contact6d.hpp:205
const Eigen::Matrix< double, 3, 1 > & reg_A()
Definition: contact6d.hpp:209
void updateNewtonEuler(const Eigen::Vector3d &CoM, const pinocchio::SE3 &oMf)
const ContactPointSettings & getSettings()
Definition: contact6d.hpp:193
const Eigen::Matrix< double, 4, 3 > & fri_A()
Definition: contact6d.hpp:207
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
const Eigen::Matrix< double, 4, 1 > & fri_b()
Definition: contact6d.hpp:208
size_t uni_rows() const
Definition: contact6d.hpp:200
const Eigen::Matrix< double, 3, 1 > & appliedForce()
Definition: contact6d.hpp:213
const Eigen::Matrix< double, 6, 3 > & NE_A()
Definition: contact6d.hpp:211
void setForceWeights(const Eigen::Vector3d &force_weights)
const Eigen::Matrix< double, 3, 1 > & reg_b()
Definition: contact6d.hpp:210
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::ostream & operator<<(std::ostream &out)
Definition: contact6d.hpp:144
std::string to_string()
Definition: contact6d.hpp:134
bool operator==(const ContactPointSettings &rhs)
Definition: contact6d.hpp:149
std::string frame_name
Definition: contact6d.hpp:132