robotoc
robotoc - efficient ROBOT Optimal Control solvers
Loading...
Searching...
No Matches
split_kkt_matrix.hpp
Go to the documentation of this file.
1#ifndef ROBOTOC_SPLIT_KKT_MATRIX_HPP_
2#define ROBOTOC_SPLIT_KKT_MATRIX_HPP_
3
4#include <iostream>
5
6#include "Eigen/Core"
7
10
11
12namespace robotoc {
13
19public:
24 SplitKKTMatrix(const Robot& robot);
25
30
34 ~SplitKKTMatrix() = default;
35
39 SplitKKTMatrix(const SplitKKTMatrix&) = default;
40
45
49 SplitKKTMatrix(SplitKKTMatrix&&) noexcept = default;
50
54 SplitKKTMatrix& operator=(SplitKKTMatrix&&) noexcept = default;
55
60 void setContactDimension(const int dimf);
61
67
71 Eigen::MatrixXd Fxx;
72
78 Eigen::Block<Eigen::MatrixXd> Fqq();
79
83 const Eigen::Block<const Eigen::MatrixXd> Fqq() const;
84
90 Eigen::Block<Eigen::MatrixXd> Fqv();
91
95 const Eigen::Block<const Eigen::MatrixXd> Fqv() const;
96
102 Eigen::Block<Eigen::MatrixXd> Fvq();
103
107 const Eigen::Block<const Eigen::MatrixXd> Fvq() const;
108
114 Eigen::Block<Eigen::MatrixXd> Fvv();
115
119 const Eigen::Block<const Eigen::MatrixXd> Fvv() const;
120
124 Eigen::MatrixXd Fvu;
125
130 Eigen::VectorXd fx;
131
137 Eigen::VectorBlock<Eigen::VectorXd> fq();
138
142 const Eigen::VectorBlock<const Eigen::VectorXd> fq() const;
143
149 Eigen::VectorBlock<Eigen::VectorXd> fv();
150
154 const Eigen::VectorBlock<const Eigen::VectorXd> fv() const;
155
161 Eigen::Block<Eigen::MatrixXd> Phix();
162
166 const Eigen::Block<const Eigen::MatrixXd> Phix() const;
167
173 Eigen::Block<Eigen::MatrixXd> Phiq();
174
178 const Eigen::Block<const Eigen::MatrixXd> Phiq() const;
179
185 Eigen::Block<Eigen::MatrixXd> Phiv();
186
190 const Eigen::Block<const Eigen::MatrixXd> Phiv() const;
191
197 Eigen::Block<Eigen::MatrixXd> Phia();
198
202 const Eigen::Block<const Eigen::MatrixXd> Phia() const;
203
209 Eigen::Block<Eigen::MatrixXd> Phiu();
210
214 const Eigen::Block<const Eigen::MatrixXd> Phiu() const;
215
221 Eigen::VectorBlock<Eigen::VectorXd> Phit();
222
226 const Eigen::VectorBlock<const Eigen::VectorXd> Phit() const;
227
228
232 Eigen::MatrixXd Qxx;
233
238 Eigen::Block<Eigen::MatrixXd> Qqq();
239
243 const Eigen::Block<const Eigen::MatrixXd> Qqq() const;
244
249 Eigen::Block<Eigen::MatrixXd> Qqv();
250
254 const Eigen::Block<const Eigen::MatrixXd> Qqv() const;
255
260 Eigen::Block<Eigen::MatrixXd> Qvq();
261
265 const Eigen::Block<const Eigen::MatrixXd> Qvq() const;
266
271 Eigen::Block<Eigen::MatrixXd> Qvv();
272
276 const Eigen::Block<const Eigen::MatrixXd> Qvv() const;
277
281 Eigen::MatrixXd Qaa;
282
286 Eigen::MatrixXd Qdvdv;
287
291 Eigen::MatrixXd Qxu;
292
298 Eigen::Block<Eigen::MatrixXd> Qqu();
299
303 const Eigen::Block<const Eigen::MatrixXd> Qqu() const;
304
310 Eigen::Block<Eigen::MatrixXd> Qvu();
311
315 const Eigen::Block<const Eigen::MatrixXd> Qvu() const;
316
321 Eigen::MatrixXd Quu;
322
328 Eigen::Block<Eigen::MatrixXd> Qff();
329
333 const Eigen::Block<const Eigen::MatrixXd> Qff() const;
334
341 Eigen::Block<Eigen::MatrixXd> Qqf();
342
346 const Eigen::Block<const Eigen::MatrixXd> Qqf() const;
347
351 double Qtt;
352
356 double Qtt_prev;
357
361 Eigen::VectorXd hx;
362
367 Eigen::VectorBlock<Eigen::VectorXd> hq();
368
372 const Eigen::VectorBlock<const Eigen::VectorXd> hq() const;
373
378 Eigen::VectorBlock<Eigen::VectorXd> hv();
379
383 const Eigen::VectorBlock<const Eigen::VectorXd> hv() const;
384
388 Eigen::VectorXd hu;
389
393 Eigen::VectorXd ha;
394
401 Eigen::VectorBlock<Eigen::VectorXd> hf();
402
406 const Eigen::VectorBlock<const Eigen::VectorXd> hf() const;
407
411 void setZero();
412
418 int dimf() const;
419
425 int dims() const;
426
427
433
439 bool isApprox(const SplitKKTMatrix& other) const;
440
445 bool hasNaN() const;
446
450 void setRandom();
451
456 void setRandom(const ContactStatus& contact_status);
457
463 static SplitKKTMatrix Random(const Robot& robot);
464
471 static SplitKKTMatrix Random(const Robot& robot,
472 const ContactStatus& contact_status);
473
477 void disp(std::ostream& os) const;
478
479 friend std::ostream& operator<<(std::ostream& os,
480 const SplitKKTMatrix& kkt_matrix);
481
482private:
483 Eigen::MatrixXd Phix_full_, Phia_full_, Phiu_full_;
484 Eigen::VectorXd Phit_full_;
485 Eigen::MatrixXd Qff_full_, Qqf_full_;
486 Eigen::VectorXd hf_full_;
487 bool has_floating_base_;
488 int dimv_, dimx_, dimu_, dimf_, dims_;
489
490};
491
492} // namespace robotoc
493
494#include "robotoc/core/split_kkt_matrix.hxx"
495
496#endif // ROBOTOC_SPLIT_KKT_MATRIX_HPP_
Contact status of robot model.
Definition: contact_status.hpp:32
Dynamics and kinematics model of robots. Wraps pinocchio::Model and pinocchio::Data....
Definition: robot.hpp:32
The KKT matrix split into a time stage.
Definition: split_kkt_matrix.hpp:18
SplitKKTMatrix(const SplitKKTMatrix &)=default
Default copy constructor.
int dimf() const
Returns the dimension of the stack of contact forces at the current contact status.
Definition: split_kkt_matrix.hxx:279
Eigen::Block< Eigen::MatrixXd > Phiu()
Jacobian of the swithcing constraint w.r.t. u.
Definition: split_kkt_matrix.hxx:125
Eigen::Block< Eigen::MatrixXd > Fqq()
Jacobian of the state equation (w.r.t. q) w.r.t. q.
Definition: split_kkt_matrix.hxx:25
Eigen::Block< Eigen::MatrixXd > Fqv()
Jacobian of the state equation (w.r.t. q) w.r.t. v.
Definition: split_kkt_matrix.hxx:35
SplitKKTMatrix(SplitKKTMatrix &&) noexcept=default
Default move constructor.
void setContactDimension(const int dimf)
Sets contact status, i.e., set dimension of the contact forces.
Definition: split_kkt_matrix.hxx:11
void setRandom()
Set by random value based on the current contact status.
Eigen::VectorXd fx
Derivative of the discrete time state equation w.r.t. the length of the time interval.
Definition: split_kkt_matrix.hpp:130
SplitKKTMatrix()
Default constructor.
Eigen::MatrixXd Fvu
Jacobian of the state equation (w.r.t. v) w.r.t. u.
Definition: split_kkt_matrix.hpp:124
Eigen::MatrixXd Qaa
Hessian w.r.t. the acceleration a and acceleration a.
Definition: split_kkt_matrix.hpp:281
Eigen::Block< Eigen::MatrixXd > Phix()
Jacobian of the swithcing constraint w.r.t. x.
Definition: split_kkt_matrix.hxx:85
static SplitKKTMatrix Random(const Robot &robot)
Generates split KKT matrix filled randomly.
Eigen::MatrixXd Qxu
Hessian w.r.t. the state x and the control input torques u.
Definition: split_kkt_matrix.hpp:291
Eigen::Block< Eigen::MatrixXd > Qqu()
Hessian of the Lagrangian with respect to the configuration q and control input torques u.
Definition: split_kkt_matrix.hxx:185
Eigen::Block< Eigen::MatrixXd > Qff()
Hessian of the Lagrangian with respect to the contact forces f.
Definition: split_kkt_matrix.hxx:205
Eigen::VectorXd hx
Derivative of the Hamiltonian w.r.t. the state.
Definition: split_kkt_matrix.hpp:361
Eigen::Block< Eigen::MatrixXd > Qvv()
Hessian w.r.t. the joint velocity v and joint velocity v.
Definition: split_kkt_matrix.hxx:175
void disp(std::ostream &os) const
Displays the split KKT matrix onto a ostream.
Eigen::MatrixXd Fxx
Jacobian of the state equation w.r.t. the state x.
Definition: split_kkt_matrix.hpp:71
Eigen::VectorBlock< Eigen::VectorXd > fv()
Derivative of the discrete-time state equation w.r.t. the velocity v w.r.t. the length of the time in...
Definition: split_kkt_matrix.hxx:75
Eigen::Block< Eigen::MatrixXd > Phia()
Jacobian of the swithcing constraint w.r.t. a.
Definition: split_kkt_matrix.hxx:115
Eigen::Block< Eigen::MatrixXd > Fvv()
Jacobian of the state equation (w.r.t. v) to v.
Definition: split_kkt_matrix.hxx:55
Eigen::VectorXd hu
Derivative of the Hamiltonian w.r.t. the control input.
Definition: split_kkt_matrix.hpp:388
Eigen::Block< Eigen::MatrixXd > Phiq()
Jacobian of the swithcing constraint w.r.t. q.
Definition: split_kkt_matrix.hxx:95
Eigen::Block< Eigen::MatrixXd > Qqq()
Hessian w.r.t. the configuration q and configuration q.
Definition: split_kkt_matrix.hxx:145
Eigen::Block< Eigen::MatrixXd > Qvu()
Hessian of the Lagrangian with respect to the velocity v and control input torques u.
Definition: split_kkt_matrix.hxx:195
Eigen::MatrixXd Quu
Hessian w.r.t. the control input torques u and the control input torques u.
Definition: split_kkt_matrix.hpp:321
Eigen::Block< Eigen::MatrixXd > Qqf()
Hessian of the Lagrangian with respect to the configuration and contact forces.
Definition: split_kkt_matrix.hxx:215
Eigen::VectorBlock< Eigen::VectorXd > Phit()
Jacobian of the swithcing constraint w.r.t. the switching time.
Definition: split_kkt_matrix.hxx:135
double Qtt
Hessian of the Lagrangian w.r.t. the switching time.
Definition: split_kkt_matrix.hpp:351
void setZero()
Set the all components zero.
Definition: split_kkt_matrix.hxx:255
bool isDimensionConsistent() const
Checks dimensional consistency of each component.
~SplitKKTMatrix()=default
Default destructor.
void setSwitchingConstraintDimension(const int dims)
Sets the dimension of the switching constraint.
Definition: split_kkt_matrix.hxx:18
Eigen::Block< Eigen::MatrixXd > Qqv()
Hessian w.r.t. the configuration q and joint velocity v.
Definition: split_kkt_matrix.hxx:155
Eigen::VectorBlock< Eigen::VectorXd > hq()
Derivative of the Hamiltonian w.r.t. the configuration q.
Definition: split_kkt_matrix.hxx:225
Eigen::Block< Eigen::MatrixXd > Fvq()
Jacobian of the state equation (w.r.t. v) w.r.t. q.
Definition: split_kkt_matrix.hxx:45
Eigen::MatrixXd Qdvdv
Hessian w.r.t. the impact change in the velocity ddv.
Definition: split_kkt_matrix.hpp:286
Eigen::Block< Eigen::MatrixXd > Phiv()
Jacobian of the swithcing constraint w.r.t. v.
Definition: split_kkt_matrix.hxx:105
double Qtt_prev
Hessian of the Lagrangian w.r.t. the previoius switching time.
Definition: split_kkt_matrix.hpp:356
SplitKKTMatrix(const Robot &robot)
Construct a split KKT matrix.
bool isApprox(const SplitKKTMatrix &other) const
Checks the equivalence of two SplitKKTMatrix.
int dims() const
Returns the dimension of the stack of the contact forces at the current contact status.
Definition: split_kkt_matrix.hxx:284
Eigen::VectorBlock< Eigen::VectorXd > hv()
Derivative of the Hamiltonian w.r.t. the velocity v.
Definition: split_kkt_matrix.hxx:235
Eigen::VectorXd ha
Derivative of the Hamiltonian w.r.t. the acceleration.
Definition: split_kkt_matrix.hpp:393
SplitKKTMatrix & operator=(const SplitKKTMatrix &)=default
Default copy operator.
Eigen::VectorBlock< Eigen::VectorXd > fq()
Derivative of the discrete-time state equation w.r.t. the configuration q w.r.t. the length of the ti...
Definition: split_kkt_matrix.hxx:65
bool hasNaN() const
Checks this has at least one NaN.
Eigen::MatrixXd Qxx
Hessian w.r.t. to the state x and state x.
Definition: split_kkt_matrix.hpp:232
Eigen::Block< Eigen::MatrixXd > Qvq()
Hessian w.r.t. the joint velocity v and configuration q.
Definition: split_kkt_matrix.hxx:165
Eigen::VectorBlock< Eigen::VectorXd > hf()
Derivative of the Hamiltonian w.r.t. the stack of the contact forces f.
Definition: split_kkt_matrix.hxx:245
Definition: constraint_component_base.hpp:17