robotoc
robotoc - efficient ROBOT Optimal Control solvers
Loading...
Searching...
No Matches
contact_dynamics_data.hpp
Go to the documentation of this file.
1#ifndef ROBOTOC_CONTACT_DYNAMICS_DATA_HPP_
2#define ROBOTOC_CONTACT_DYNAMICS_DATA_HPP_
3
4#include "Eigen/Core"
6
7
8namespace robotoc {
9
15public:
16 using Vector6d = Eigen::Matrix<double, 6, 1>;
17
23
28
33
38
43
48
52 ContactDynamicsData& operator=(ContactDynamicsData&&) noexcept = default;
53
54 void setContactDimension(const int dimf);
55
57
58 int dimv() const;
59
60 int dimu() const;
61
62 int dimf() const;
63
64 int dimvf() const;
65
66 int dims() const;
67
68 int dim_passive() const;
69
70 bool hasFloatingBase() const;
71
72 Eigen::MatrixXd Qxu_passive;
73
74 Eigen::MatrixXd Quu_passive_topRight;
75
76 Eigen::VectorXd lu_passive;
77
78 Eigen::MatrixXd dIDda;
79
80 Eigen::MatrixXd dIDddv;
81
82 Eigen::Block<Eigen::MatrixXd> dCda();
83
84 const Eigen::Block<const Eigen::MatrixXd> dCda() const;
85
86 Eigen::Block<Eigen::MatrixXd> dIDCdqv();
87
88 const Eigen::Block<const Eigen::MatrixXd> dIDCdqv() const;
89
90 Eigen::Block<Eigen::MatrixXd> dIDdq();
91
92 const Eigen::Block<const Eigen::MatrixXd> dIDdq() const;
93
94 Eigen::Block<Eigen::MatrixXd> dIDdv();
95
96 const Eigen::Block<const Eigen::MatrixXd> dIDdv() const;
97
98 Eigen::Block<Eigen::MatrixXd> dCdq();
99
100 const Eigen::Block<const Eigen::MatrixXd> dCdq() const;
101
102 Eigen::Block<Eigen::MatrixXd> dCdv();
103
104 const Eigen::Block<const Eigen::MatrixXd> dCdv() const;
105
106 Eigen::Block<Eigen::MatrixXd> MJtJinv();
107
108 const Eigen::Block<const Eigen::MatrixXd> MJtJinv() const;
109
110 Eigen::Block<Eigen::MatrixXd> MJtJinv_dIDCdqv();
111
112 const Eigen::Block<const Eigen::MatrixXd> MJtJinv_dIDCdqv() const;
113
114 Eigen::Block<Eigen::MatrixXd> Qafqv();
115
116 const Eigen::Block<const Eigen::MatrixXd> Qafqv() const;
117
118 Eigen::Block<Eigen::MatrixXd> Qdvfqv() { return Qafqv(); }
119
120 const Eigen::Block<const Eigen::MatrixXd> Qdvfqv() const { return Qafqv(); }
121
122 Eigen::Block<Eigen::MatrixXd> Qafu_full();
123
124 const Eigen::Block<const Eigen::MatrixXd> Qafu_full() const;
125
126 Eigen::Block<Eigen::MatrixXd> Qafu_passive();
127
128 const Eigen::Block<const Eigen::MatrixXd> Qafu_passive() const;
129
130 Eigen::Block<Eigen::MatrixXd> Qafu();
131
132 const Eigen::Block<const Eigen::MatrixXd> Qafu() const;
133
134 Eigen::VectorBlock<Eigen::VectorXd> IDC();
135
136 const Eigen::VectorBlock<const Eigen::VectorXd> IDC() const;
137
138 Eigen::VectorBlock<Eigen::VectorXd> ID_full();
139
140 const Eigen::VectorBlock<const Eigen::VectorXd> ID_full() const;
141
142 Eigen::VectorBlock<Eigen::VectorXd> ID_passive();
143
144 const Eigen::VectorBlock<const Eigen::VectorXd> ID_passive() const;
145
146 Eigen::VectorBlock<Eigen::VectorXd> ID();
147
148 const Eigen::VectorBlock<const Eigen::VectorXd> ID() const;
149
150 Eigen::VectorBlock<Eigen::VectorXd> C();
151
152 const Eigen::VectorBlock<const Eigen::VectorXd> C() const;
153
154 Eigen::VectorBlock<Eigen::VectorXd> MJtJinv_IDC();
155
156 const Eigen::VectorBlock<const Eigen::VectorXd> MJtJinv_IDC() const;
157
158 Eigen::Block<Eigen::MatrixXd> Phia();
159
160 const Eigen::Block<const Eigen::MatrixXd> Phia() const;
161
162 Eigen::VectorBlock<Eigen::VectorXd> laf();
163
164 const Eigen::VectorBlock<const Eigen::VectorXd> laf() const;
165
166 Eigen::VectorBlock<Eigen::VectorXd> la();
167
168 const Eigen::VectorBlock<const Eigen::VectorXd> la() const;
169
170 Eigen::VectorBlock<Eigen::VectorXd> ldvf() { return laf(); }
171
172 const Eigen::VectorBlock<const Eigen::VectorXd> ldvf() const { return laf(); }
173
174 Eigen::VectorBlock<Eigen::VectorXd> ldv() { return la(); }
175
176 const Eigen::VectorBlock<const Eigen::VectorXd> ldv() const { return la(); }
177
178 Eigen::VectorBlock<Eigen::VectorXd> lf();
179
180 const Eigen::VectorBlock<const Eigen::VectorXd> lf() const;
181
182 Eigen::VectorBlock<Eigen::VectorXd> haf();
183
184 const Eigen::VectorBlock<const Eigen::VectorXd> haf() const;
185
186 Eigen::VectorBlock<Eigen::VectorXd> ha();
187
188 const Eigen::VectorBlock<const Eigen::VectorXd> ha() const;
189
190 Eigen::VectorBlock<Eigen::VectorXd> hf();
191
192 const Eigen::VectorBlock<const Eigen::VectorXd> hf() const;
193
194 template <int p=1>
195 double primalFeasibility() const {
196 return IDC().template lpNorm<p>();
197 }
198
199 template <int p=1>
200 double dualFeasibility() const {
201 return lu_passive.template lpNorm<p>();
202 }
203
204 double KKTError() const {
205 return (IDC().squaredNorm() + lu_passive.squaredNorm());
206 }
207
208private:
209 Eigen::MatrixXd dCda_full_, dIDCdqv_full_, MJtJinv_full_,
210 MJtJinv_dIDCdqv_full_, Qafqv_full_,
211 Qafu_full_full_, Phia_full_;
212 Eigen::VectorXd IDC_full_, MJtJinv_IDC_full_, laf_full_, haf_full_;
213 int dimv_, dimu_, dimf_, dimvf_, dims_, dim_passive_;
214 bool has_floating_base_;
215
216};
217
218} // namespace robotoc
219
221
222#endif // ROBOTOC_CONTACT_DYNAMICS_DATA_HPP_
Data used in ContactDynamics.
Definition: contact_dynamics_data.hpp:14
const Eigen::VectorBlock< const Eigen::VectorXd > ldv() const
Definition: contact_dynamics_data.hpp:176
Eigen::VectorBlock< Eigen::VectorXd > ha()
Definition: contact_dynamics_data.hxx:309
Eigen::VectorBlock< Eigen::VectorXd > la()
Definition: contact_dynamics_data.hxx:276
Eigen::Block< Eigen::MatrixXd > MJtJinv()
Definition: contact_dynamics_data.hxx:123
int dimu() const
Definition: contact_dynamics_data.hxx:27
Eigen::VectorBlock< Eigen::VectorXd > hf()
Definition: contact_dynamics_data.hxx:320
int dimvf() const
Definition: contact_dynamics_data.hxx:37
ContactDynamicsData(const ContactDynamicsData &)=default
Default copy constructor.
~ContactDynamicsData()=default
Default destructor.
void setSwitchingConstraintDimension(const int dims)
Definition: contact_dynamics_data.hxx:16
Eigen::Block< Eigen::MatrixXd > Qdvfqv()
Definition: contact_dynamics_data.hpp:118
Eigen::Block< Eigen::MatrixXd > dIDdv()
Definition: contact_dynamics_data.hxx:90
Eigen::VectorBlock< Eigen::VectorXd > IDC()
Definition: contact_dynamics_data.hxx:189
ContactDynamicsData(const Robot &robot)
Constructs a data.
Eigen::MatrixXd Quu_passive_topRight
Definition: contact_dynamics_data.hpp:74
Eigen::Block< Eigen::MatrixXd > Qafu_passive()
Definition: contact_dynamics_data.hxx:167
Eigen::Block< Eigen::MatrixXd > dCda()
Definition: contact_dynamics_data.hxx:57
ContactDynamicsData(ContactDynamicsData &&) noexcept=default
Default move constructor.
Eigen::VectorBlock< Eigen::VectorXd > MJtJinv_IDC()
Definition: contact_dynamics_data.hxx:244
int dimv() const
Definition: contact_dynamics_data.hxx:22
Eigen::Block< Eigen::MatrixXd > dCdq()
Definition: contact_dynamics_data.hxx:101
double KKTError() const
Definition: contact_dynamics_data.hpp:204
Eigen::VectorXd lu_passive
Definition: contact_dynamics_data.hpp:76
int dim_passive() const
Definition: contact_dynamics_data.hxx:47
Eigen::VectorBlock< Eigen::VectorXd > ID()
Definition: contact_dynamics_data.hxx:222
Eigen::VectorBlock< Eigen::VectorXd > ID_passive()
Definition: contact_dynamics_data.hxx:211
void setContactDimension(const int dimf)
Definition: contact_dynamics_data.hxx:8
Eigen::Matrix< double, 6, 1 > Vector6d
Definition: contact_dynamics_data.hpp:16
const Eigen::VectorBlock< const Eigen::VectorXd > ldvf() const
Definition: contact_dynamics_data.hpp:172
const Eigen::Block< const Eigen::MatrixXd > Qdvfqv() const
Definition: contact_dynamics_data.hpp:120
double dualFeasibility() const
Definition: contact_dynamics_data.hpp:200
Eigen::VectorBlock< Eigen::VectorXd > ldvf()
Definition: contact_dynamics_data.hpp:170
Eigen::VectorBlock< Eigen::VectorXd > laf()
Definition: contact_dynamics_data.hxx:265
ContactDynamicsData()
Default constructor.
Eigen::VectorBlock< Eigen::VectorXd > haf()
Definition: contact_dynamics_data.hxx:298
Eigen::Block< Eigen::MatrixXd > dIDdq()
Definition: contact_dynamics_data.hxx:79
int dims() const
Definition: contact_dynamics_data.hxx:42
Eigen::VectorBlock< Eigen::VectorXd > lf()
Definition: contact_dynamics_data.hxx:287
double primalFeasibility() const
Definition: contact_dynamics_data.hpp:195
Eigen::Block< Eigen::MatrixXd > Phia()
Definition: contact_dynamics_data.hxx:255
Eigen::Block< Eigen::MatrixXd > Qafqv()
Definition: contact_dynamics_data.hxx:145
Eigen::Block< Eigen::MatrixXd > dCdv()
Definition: contact_dynamics_data.hxx:112
Eigen::VectorBlock< Eigen::VectorXd > ldv()
Definition: contact_dynamics_data.hpp:174
int dimf() const
Definition: contact_dynamics_data.hxx:32
Eigen::VectorBlock< Eigen::VectorXd > C()
Definition: contact_dynamics_data.hxx:233
Eigen::MatrixXd dIDddv
Definition: contact_dynamics_data.hpp:80
bool hasFloatingBase() const
Definition: contact_dynamics_data.hxx:52
Eigen::VectorBlock< Eigen::VectorXd > ID_full()
Definition: contact_dynamics_data.hxx:200
Eigen::MatrixXd dIDda
Definition: contact_dynamics_data.hpp:78
ContactDynamicsData & operator=(const ContactDynamicsData &)=default
Default copy operator.
Eigen::Block< Eigen::MatrixXd > MJtJinv_dIDCdqv()
Definition: contact_dynamics_data.hxx:134
Eigen::Block< Eigen::MatrixXd > Qafu()
Definition: contact_dynamics_data.hxx:178
Eigen::MatrixXd Qxu_passive
Definition: contact_dynamics_data.hpp:72
Eigen::Block< Eigen::MatrixXd > Qafu_full()
Definition: contact_dynamics_data.hxx:156
Eigen::Block< Eigen::MatrixXd > dIDCdqv()
Definition: contact_dynamics_data.hxx:68
Dynamics and kinematics model of robots. Wraps pinocchio::Model and pinocchio::Data....
Definition: robot.hpp:32
Definition: constraint_component_base.hpp:17