1#ifndef ROBOTOC_SPLIT_KKT_MATRIX_HPP_
2#define ROBOTOC_SPLIT_KKT_MATRIX_HPP_
78 Eigen::Block<Eigen::MatrixXd>
Fqq();
83 const Eigen::Block<const Eigen::MatrixXd>
Fqq() const;
90 Eigen::Block<Eigen::MatrixXd>
Fqv();
95 const Eigen::Block<const Eigen::MatrixXd>
Fqv() const;
102 Eigen::Block<Eigen::MatrixXd>
Fvq();
107 const Eigen::Block<const Eigen::MatrixXd>
Fvq() const;
114 Eigen::Block<Eigen::MatrixXd>
Fvv();
119 const Eigen::Block<const Eigen::MatrixXd>
Fvv() const;
137 Eigen::VectorBlock<Eigen::VectorXd>
fq();
142 const Eigen::VectorBlock<const Eigen::VectorXd>
fq() const;
149 Eigen::VectorBlock<Eigen::VectorXd>
fv();
154 const Eigen::VectorBlock<const Eigen::VectorXd>
fv() const;
161 Eigen::Block<Eigen::MatrixXd>
Phix();
166 const Eigen::Block<const Eigen::MatrixXd>
Phix() const;
173 Eigen::Block<Eigen::MatrixXd>
Phiq();
178 const Eigen::Block<const Eigen::MatrixXd>
Phiq() const;
185 Eigen::Block<Eigen::MatrixXd>
Phiv();
190 const Eigen::Block<const Eigen::MatrixXd>
Phiv() const;
197 Eigen::Block<Eigen::MatrixXd>
Phia();
202 const Eigen::Block<const Eigen::MatrixXd>
Phia() const;
209 Eigen::Block<Eigen::MatrixXd>
Phiu();
214 const Eigen::Block<const Eigen::MatrixXd>
Phiu() const;
221 Eigen::VectorBlock<Eigen::VectorXd>
Phit();
226 const Eigen::VectorBlock<const Eigen::VectorXd>
Phit() const;
238 Eigen::Block<Eigen::MatrixXd>
Qqq();
243 const Eigen::Block<const Eigen::MatrixXd>
Qqq() const;
249 Eigen::Block<Eigen::MatrixXd>
Qqv();
254 const Eigen::Block<const Eigen::MatrixXd>
Qqv() const;
260 Eigen::Block<Eigen::MatrixXd>
Qvq();
265 const Eigen::Block<const Eigen::MatrixXd>
Qvq() const;
271 Eigen::Block<Eigen::MatrixXd>
Qvv();
276 const Eigen::Block<const Eigen::MatrixXd>
Qvv() const;
298 Eigen::Block<Eigen::MatrixXd>
Qqu();
303 const Eigen::Block<const Eigen::MatrixXd>
Qqu() const;
310 Eigen::Block<Eigen::MatrixXd>
Qvu();
315 const Eigen::Block<const Eigen::MatrixXd>
Qvu() const;
328 Eigen::Block<Eigen::MatrixXd>
Qff();
333 const Eigen::Block<const Eigen::MatrixXd>
Qff() const;
341 Eigen::Block<Eigen::MatrixXd>
Qqf();
346 const Eigen::Block<const Eigen::MatrixXd>
Qqf() const;
367 Eigen::VectorBlock<Eigen::VectorXd>
hq();
372 const Eigen::VectorBlock<const Eigen::VectorXd>
hq() const;
378 Eigen::VectorBlock<Eigen::VectorXd>
hv();
383 const Eigen::VectorBlock<const Eigen::VectorXd>
hv() const;
401 Eigen::VectorBlock<Eigen::VectorXd>
hf();
406 const Eigen::VectorBlock<const Eigen::VectorXd>
hf() const;
477 void disp(std::ostream& os) const;
479 friend std::ostream& operator<<(std::ostream& os,
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_;
494#include "robotoc/core/split_kkt_matrix.hxx"
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