18 #ifndef __se3_dynamics_hpp__ 19 #define __se3_dynamics_hpp__ 21 #include "pinocchio/multibody/model.hpp" 22 #include "pinocchio/multibody/data.hpp" 23 #include "pinocchio/algorithm/compute-all-terms.hpp" 24 #include "pinocchio/algorithm/cholesky.hpp" 25 #include "pinocchio/algorithm/crba.hpp" 26 #include "pinocchio/algorithm/check.hpp" 28 #include <Eigen/Cholesky> 57 const Eigen::VectorXd & q,
58 const Eigen::VectorXd & v,
59 const Eigen::VectorXd & tau,
60 const Eigen::MatrixXd & J,
61 const Eigen::VectorXd & gamma,
62 const double inv_damping = 0.,
63 const bool updateKinematics =
true 66 assert(q.size() == model.
nq);
67 assert(v.size() == model.
nv);
68 assert(tau.size() == model.
nv);
69 assert(J.cols() == model.
nv);
70 assert(J.rows() == gamma.size());
71 assert(model.
check(data) &&
"data is not consistent with model.");
73 Eigen::VectorXd & a = data.
ddq;
74 Eigen::VectorXd & lambda_c = data.
lambda_c;
80 cholesky::decompose(model, data);
86 data.
sDUiJt = J.transpose();
88 cholesky::Uiv(model, data, data.
sDUiJt);
89 for(
int k=0;k<model.
nv;++k) data.
sDUiJt.row(k) /= sqrt(data.
D[k]);
93 data.
JMinvJt.diagonal().array() += inv_damping;
101 a = J.transpose() * lambda_c;
102 cholesky::solve (model, data, a);
128 const Eigen::VectorXd & q,
129 const Eigen::VectorXd & v_before,
130 const Eigen::MatrixXd & J,
131 const double r_coeff = 0.,
132 const bool updateKinematics =
true 135 assert(q.size() == model.
nq);
136 assert(v_before.size() == model.
nv);
137 assert(J.cols() == model.
nv);
138 assert(model.
check(data) &&
"data is not consistent with model.");
140 Eigen::VectorXd & impulse_c = data.
impulse_c;
141 Eigen::VectorXd & dq_after = data.
dq_after;
144 if (updateKinematics)
145 crba(model, data, q);
148 cholesky::decompose(model, data);
150 data.
sDUiJt = J.transpose();
152 cholesky::Uiv(model, data, data.
sDUiJt);
153 for(
int k=0;k<model.
nv;++k) data.
sDUiJt.row(k) /= sqrt(data.
D[k]);
159 impulse_c = (-r_coeff - 1.) * (J * v_before);
163 dq_after = J.transpose() * impulse_c;
164 cholesky::solve (model, data, dq_after);
165 dq_after += v_before;
172 #endif // ifndef __se3_dynamics_hpp__
int nq
Dimension of the configuration vector representation.
int nv
Dimension of the velocity vector space.
void computeAllTerms(const Model &model, Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v)
Computes efficiently all the terms needed for dynamic simulation. It is equivalent to the call at the...
const Eigen::MatrixXd & crba(const Model &model, Data &data, const Eigen::VectorXd &q)
Computes the upper triangular part of the joint space inertia matrix M by using the Composite Rigid B...
Eigen::LLT< Eigen::MatrixXd > llt_JMinvJt
Cholesky decompostion of .
Eigen::VectorXd lambda_c
Lagrange Multipliers corresponding to the contact forces in se3::forwardDynamics. ...
Eigen::VectorXd D
Diagonal of the joint space intertia matrix obtained by a Cholesky Decomposition. ...
Eigen::VectorXd ddq
The joint accelerations computed from ABA.
Eigen::VectorXd torque_residual
Temporary corresponding to the residual torque .
Eigen::VectorXd impulse_c
Lagrange Multipliers corresponding to the contact impulses in se3::impulseDynamics.
Eigen::MatrixXd JMinvJt
Inverse of the operational-space inertia matrix.
Eigen::VectorXd nle
Vector of Non Linear Effects (dim model.nv). It corresponds to concatenation of the Coriolis...
const Eigen::VectorXd & forwardDynamics(const Model &model, Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const Eigen::VectorXd &tau, const Eigen::MatrixXd &J, const Eigen::VectorXd &gamma, const double inv_damping=0., const bool updateKinematics=true)
Compute the forward dynamics with contact constraints.
Eigen::VectorXd dq_after
Generalized velocity after impact.
const Eigen::VectorXd & impulseDynamics(const Model &model, Data &data, const Eigen::VectorXd &q, const Eigen::VectorXd &v_before, const Eigen::MatrixXd &J, const double r_coeff=0., const bool updateKinematics=true)
Compute the impulse dynamics with contact constraints.
bool check(const AlgorithmCheckerBase< D > &checker=AlgorithmCheckerBase< D >()) const
Eigen::MatrixXd sDUiJt
Temporary corresponding to .