| Directory: | ./ |
|---|---|
| File: | include/pinocchio/multibody/data.hpp |
| Date: | 2025-02-12 21:03:38 |
| Exec | Total | Coverage | |
|---|---|---|---|
| Lines: | 3 | 3 | 100.0% |
| Branches: | 127 | 260 | 48.8% |
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // | ||
| 2 | // Copyright (c) 2015-2024 CNRS INRIA | ||
| 3 | // Copyright (c) 2015 Wandercraft, 86 rue de Paris 91400 Orsay, France. | ||
| 4 | // | ||
| 5 | |||
| 6 | #ifndef __pinocchio_multibody_data_hpp__ | ||
| 7 | #define __pinocchio_multibody_data_hpp__ | ||
| 8 | |||
| 9 | #include "pinocchio/spatial/fwd.hpp" | ||
| 10 | #include "pinocchio/math/tensor.hpp" | ||
| 11 | |||
| 12 | #include "pinocchio/spatial/se3.hpp" | ||
| 13 | #include "pinocchio/spatial/force.hpp" | ||
| 14 | #include "pinocchio/spatial/motion.hpp" | ||
| 15 | #include "pinocchio/spatial/inertia.hpp" | ||
| 16 | #include "pinocchio/multibody/fwd.hpp" | ||
| 17 | #include "pinocchio/multibody/joint/joint-generic.hpp" | ||
| 18 | #include "pinocchio/container/aligned-vector.hpp" | ||
| 19 | #include "pinocchio/algorithm/contact-cholesky.hpp" | ||
| 20 | |||
| 21 | #include "pinocchio/serialization/serializable.hpp" | ||
| 22 | |||
| 23 | #include <Eigen/Cholesky> | ||
| 24 | #include <Eigen/StdVector> | ||
| 25 | #include <Eigen/src/Core/util/Constants.h> | ||
| 26 | |||
| 27 | #include <cstddef> | ||
| 28 | #include <set> | ||
| 29 | |||
| 30 | namespace pinocchio | ||
| 31 | { | ||
| 32 | |||
| 33 | template<typename _Scalar, int _Options, template<typename, int> class JointCollectionTpl> | ||
| 34 | struct traits<DataTpl<_Scalar, _Options, JointCollectionTpl>> | ||
| 35 | { | ||
| 36 | typedef _Scalar Scalar; | ||
| 37 | }; | ||
| 38 | |||
| 39 | template<typename _Scalar, int _Options, template<typename, int> class JointCollectionTpl> | ||
| 40 | struct DataTpl | ||
| 41 | : serialization::Serializable<DataTpl<_Scalar, _Options, JointCollectionTpl>> | ||
| 42 | , NumericalBase<DataTpl<_Scalar, _Options, JointCollectionTpl>> | ||
| 43 | { | ||
| 44 | EIGEN_MAKE_ALIGNED_OPERATOR_NEW | ||
| 45 | |||
| 46 | typedef _Scalar Scalar; | ||
| 47 | enum | ||
| 48 | { | ||
| 49 | Options = _Options | ||
| 50 | }; | ||
| 51 | |||
| 52 | typedef JointCollectionTpl<Scalar, Options> JointCollection; | ||
| 53 | |||
| 54 | typedef ModelTpl<Scalar, Options, JointCollectionTpl> Model; | ||
| 55 | |||
| 56 | typedef SE3Tpl<Scalar, Options> SE3; | ||
| 57 | typedef MotionTpl<Scalar, Options> Motion; | ||
| 58 | typedef ForceTpl<Scalar, Options> Force; | ||
| 59 | typedef InertiaTpl<Scalar, Options> Inertia; | ||
| 60 | typedef FrameTpl<Scalar, Options> Frame; | ||
| 61 | |||
| 62 | typedef pinocchio::Index Index; | ||
| 63 | typedef pinocchio::JointIndex JointIndex; | ||
| 64 | typedef pinocchio::GeomIndex GeomIndex; | ||
| 65 | typedef pinocchio::FrameIndex FrameIndex; | ||
| 66 | typedef std::vector<Index> IndexVector; | ||
| 67 | |||
| 68 | typedef JointModelTpl<Scalar, Options, JointCollectionTpl> JointModel; | ||
| 69 | typedef JointDataTpl<Scalar, Options, JointCollectionTpl> JointData; | ||
| 70 | |||
| 71 | typedef PINOCCHIO_ALIGNED_STD_VECTOR(JointModel) JointModelVector; | ||
| 72 | typedef PINOCCHIO_ALIGNED_STD_VECTOR(JointData) JointDataVector; | ||
| 73 | |||
| 74 | typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Options> MatrixXs; | ||
| 75 | typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1, Options> VectorXs; | ||
| 76 | typedef Eigen::Matrix<Scalar, 1, Eigen::Dynamic, Options | Eigen::RowMajor> RowVectorXs; | ||
| 77 | typedef Eigen::Matrix<Scalar, 3, 1, Options> Vector3; | ||
| 78 | typedef Eigen::Matrix<Scalar, 6, 1, Options> Vector6; | ||
| 79 | |||
| 80 | typedef Eigen::Matrix<Scalar, 6, 1, Options> Vector6c; | ||
| 81 | typedef Eigen::Matrix<Scalar, 1, 6, Eigen::RowMajor | Options> Vector6r; | ||
| 82 | |||
| 83 | /// \brief Dense vectorized version of a joint configuration vector. | ||
| 84 | typedef VectorXs ConfigVectorType; | ||
| 85 | |||
| 86 | /// \brief Dense vectorized version of a joint tangent vector (e.g. velocity, acceleration, | ||
| 87 | /// etc). | ||
| 88 | /// It also handles the notion of co-tangent vector (e.g. torque, etc). | ||
| 89 | typedef VectorXs TangentVectorType; | ||
| 90 | |||
| 91 | /// \brief The 6d jacobian type (temporary) | ||
| 92 | typedef Eigen::Matrix<Scalar, 6, Eigen::Dynamic, Options> Matrix6x; | ||
| 93 | /// \brief The 3d jacobian type (temporary) | ||
| 94 | typedef Eigen::Matrix<Scalar, 3, Eigen::Dynamic, Options> Matrix3x; | ||
| 95 | |||
| 96 | typedef Eigen::Matrix<Scalar, 6, 6, Options> Matrix6; | ||
| 97 | typedef Eigen::Matrix<Scalar, 6, 6, Eigen::RowMajor | Options> RowMatrix6; | ||
| 98 | typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor | Options> | ||
| 99 | RowMatrixXs; | ||
| 100 | |||
| 101 | /// \brief The type of the body regressor | ||
| 102 | typedef Eigen::Matrix<Scalar, 6, 10, Options> BodyRegressorType; | ||
| 103 | |||
| 104 | /// \brief The type of Tensor for Kinematics and Dynamics second order derivatives | ||
| 105 | typedef Tensor<Scalar, 3, Options> Tensor3x; | ||
| 106 | |||
| 107 | // TODO Remove when API is stabilized | ||
| 108 | PINOCCHIO_COMPILER_DIAGNOSTIC_PUSH | ||
| 109 | PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS | ||
| 110 | typedef ContactCholeskyDecompositionTpl<Scalar, Options> ContactCholeskyDecomposition; | ||
| 111 | PINOCCHIO_COMPILER_DIAGNOSTIC_POP | ||
| 112 | |||
| 113 | /// \brief Vector of pinocchio::JointData associated to the pinocchio::JointModel stored in | ||
| 114 | /// model, encapsulated in JointDataAccessor. | ||
| 115 | JointDataVector joints; | ||
| 116 | |||
| 117 | /// \brief Vector of joint accelerations expressed in the local frame of the joint. | ||
| 118 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) a; | ||
| 119 | |||
| 120 | /// \brief Vector of joint accelerations expressed at the origin of the world. | ||
| 121 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) oa; | ||
| 122 | |||
| 123 | /// \brief Vector of joint accelerations expressed at the origin of the world. | ||
| 124 | /// These accelerations are used in the context of augmented Lagrangian algorithms. | ||
| 125 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) oa_drift; | ||
| 126 | |||
| 127 | /// \brief Vector of joint accelerations expressed at the origin of the world. | ||
| 128 | /// These accelerations are used in the context of augmented Lagrangian algorithms. | ||
| 129 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) oa_augmented; | ||
| 130 | |||
| 131 | /// \brief Vector of joint accelerations due to the gravity field. | ||
| 132 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) a_gf; | ||
| 133 | |||
| 134 | /// \brief Vector of joint accelerations expressed at the origin of the world including the | ||
| 135 | /// gravity contribution. | ||
| 136 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) oa_gf; | ||
| 137 | |||
| 138 | /// \brief Vector of joint velocities expressed in the local frame of the joint. | ||
| 139 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) v; | ||
| 140 | |||
| 141 | /// \brief Vector of joint velocities expressed at the origin of the world. | ||
| 142 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) ov; | ||
| 143 | |||
| 144 | /// \brief Vector of body forces expressed in the local frame of the joint. For each body, the | ||
| 145 | /// force represents the sum of | ||
| 146 | /// all external forces acting on the body. | ||
| 147 | PINOCCHIO_ALIGNED_STD_VECTOR(Force) f; | ||
| 148 | |||
| 149 | /// \brief Vector of body forces expressed at the origin of the world. For each body, the force | ||
| 150 | /// represents the sum of | ||
| 151 | /// all external forces acting on the body. | ||
| 152 | PINOCCHIO_ALIGNED_STD_VECTOR(Force) of; | ||
| 153 | |||
| 154 | /// \brief Vector of body forces expressed in the world frame. For each body, the force | ||
| 155 | /// represents the sum of | ||
| 156 | /// all external forces acting on the body. These forces are used in the context of | ||
| 157 | /// augmented Lagrangian algorithms. | ||
| 158 | PINOCCHIO_ALIGNED_STD_VECTOR(Force) of_augmented; | ||
| 159 | |||
| 160 | /// \brief Vector of spatial momenta expressed in the local frame of the joint. | ||
| 161 | PINOCCHIO_ALIGNED_STD_VECTOR(Force) h; | ||
| 162 | |||
| 163 | /// \brief Vector of spatial momenta expressed at the origin of the world. | ||
| 164 | PINOCCHIO_ALIGNED_STD_VECTOR(Force) oh; | ||
| 165 | |||
| 166 | /// \brief Vector of absolute joint placements (wrt the world). | ||
| 167 | PINOCCHIO_ALIGNED_STD_VECTOR(SE3) oMi; | ||
| 168 | |||
| 169 | /// \brief Vector of relative joint placements (wrt the body parent). | ||
| 170 | PINOCCHIO_ALIGNED_STD_VECTOR(SE3) liMi; | ||
| 171 | |||
| 172 | /// \brief Vector of joint torques (dim model.nv). | ||
| 173 | TangentVectorType tau; | ||
| 174 | |||
| 175 | /// \brief Vector of Non Linear Effects (dim model.nv). It corresponds to concatenation of the | ||
| 176 | /// Coriolis, centrifugal and gravitational effects. \note In the multibody dynamics equation | ||
| 177 | /// \f$ M\ddot{q} + b(q, \dot{q}) = \tau \f$, | ||
| 178 | /// the non linear effects are associated to the term \f$b\f$. | ||
| 179 | VectorXs nle; | ||
| 180 | |||
| 181 | /// \brief Vector of generalized gravity (dim model.nv). | ||
| 182 | /// \note In the multibody dynamics equation \f$ M\ddot{q} + c(q, \dot{q}) + g(q) = \tau \f$, | ||
| 183 | /// the gravity effect is associated to the \f$g\f$ term. | ||
| 184 | VectorXs g; | ||
| 185 | |||
| 186 | /// \brief Vector of absolute operationnel frame placements (wrt the world). | ||
| 187 | PINOCCHIO_ALIGNED_STD_VECTOR(SE3) oMf; | ||
| 188 | |||
| 189 | /// \brief Vector of sub-tree composite rigid body inertias, i.e. the apparent inertia of the | ||
| 190 | /// subtree supported by the joint | ||
| 191 | /// and expressed in the local frame of the joint.. | ||
| 192 | PINOCCHIO_ALIGNED_STD_VECTOR(Inertia) Ycrb; | ||
| 193 | |||
| 194 | /// \brief Vector of sub-tree composite rigid body inertia time derivatives \f$ | ||
| 195 | /// \dot{Y}_{crb}\f$. See Data::Ycrb for more details. | ||
| 196 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) dYcrb; // TODO: change with dense symmetric matrix6 | ||
| 197 | |||
| 198 | /// \brief The joint space inertia matrix (a square matrix of dim model.nv). | ||
| 199 | MatrixXs M; | ||
| 200 | |||
| 201 | /// \brief The inverse of the joint space inertia matrix (a square matrix of dim model.nv). | ||
| 202 | RowMatrixXs Minv; | ||
| 203 | |||
| 204 | /// \brief The Coriolis matrix (a square matrix of dim model.nv). | ||
| 205 | MatrixXs C; | ||
| 206 | |||
| 207 | /// \brief Variation of the spatial momenta set with respect to the joint configuration. | ||
| 208 | Matrix6x dHdq; | ||
| 209 | |||
| 210 | /// \brief Variation of the forceset with respect to the joint configuration. | ||
| 211 | Matrix6x dFdq; | ||
| 212 | |||
| 213 | /// \brief Variation of the forceset with respect to the joint velocity. | ||
| 214 | Matrix6x dFdv; | ||
| 215 | |||
| 216 | /// \brief Variation of the forceset with respect to the joint acceleration. | ||
| 217 | Matrix6x dFda; | ||
| 218 | |||
| 219 | /// \brief Used in computeMinverse | ||
| 220 | Matrix6x SDinv; | ||
| 221 | |||
| 222 | /// \brief Used in computeMinverse | ||
| 223 | Matrix6x UDinv; | ||
| 224 | |||
| 225 | /// \brief Used in computeMinverse | ||
| 226 | Matrix6x IS; | ||
| 227 | |||
| 228 | /// \brief Right variation of the inertia matrix | ||
| 229 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) vxI; | ||
| 230 | |||
| 231 | /// \brief Left variation of the inertia matrix | ||
| 232 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) Ivx; | ||
| 233 | |||
| 234 | /// \brief Combined variations of the inertia matrix \f$ B_i = \frac{1}{2} [(v_i\times∗)I_i + | ||
| 235 | /// (I_i v_i)\times^{∗} − I_i(v_i\times)] \f$ consistent with Christoffel symbols. | ||
| 236 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) B; | ||
| 237 | |||
| 238 | /// \brief Rigid Body Inertia supported by the joint expressed in the world frame | ||
| 239 | PINOCCHIO_ALIGNED_STD_VECTOR(Inertia) oinertias; | ||
| 240 | |||
| 241 | /// \brief Composite Rigid Body Inertia expressed in the world frame | ||
| 242 | PINOCCHIO_ALIGNED_STD_VECTOR(Inertia) oYcrb; | ||
| 243 | |||
| 244 | /// \brief Time variation of Composite Rigid Body Inertia expressed in the world frame | ||
| 245 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) doYcrb; | ||
| 246 | |||
| 247 | /// \brief Temporary for derivative algorithms | ||
| 248 | Matrix6 Itmp; | ||
| 249 | |||
| 250 | /// \brief Temporary for derivative algorithms | ||
| 251 | Matrix6 M6tmp; | ||
| 252 | RowMatrix6 M6tmpR; | ||
| 253 | RowMatrix6 M6tmpR2; | ||
| 254 | |||
| 255 | /// \brief The joint accelerations computed from ABA | ||
| 256 | TangentVectorType ddq; | ||
| 257 | |||
| 258 | // ABA internal data | ||
| 259 | /// \brief Articulated Body Inertia matrix of the subtree expressed in the LOCAL coordinate | ||
| 260 | /// frame of the joint | ||
| 261 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) Yaba; // TODO: change with dense symmetric matrix6 | ||
| 262 | |||
| 263 | /// \brief Articulated Body Inertia matrix of the subtree expressed in the WORLD coordinate | ||
| 264 | /// frame | ||
| 265 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) oYaba; // TODO: change with dense symmetric matrix6 | ||
| 266 | |||
| 267 | /// \brief Articulated Body Inertia matrix with contact apparent inertia, of a given the subtree | ||
| 268 | /// and expressed in the WORLD coordinate frame | ||
| 269 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) | ||
| 270 | oYaba_contact; // TODO: change with dense symmetric matrix6 | ||
| 271 | |||
| 272 | /// \brief Acceleration propagator | ||
| 273 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) oL; // TODO: change with dense symmetric matrix6 | ||
| 274 | |||
| 275 | /// \brief Inverse articulated inertia | ||
| 276 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) oK; // TODO: change with dense symmetric matrix6 | ||
| 277 | |||
| 278 | /// \brief Intermediate quantity corresponding to apparent torque [ABA] | ||
| 279 | TangentVectorType u; // Joint Inertia | ||
| 280 | |||
| 281 | // CCRBA return quantities | ||
| 282 | /// \brief Centroidal Momentum Matrix | ||
| 283 | /// \note \f$ hg = A_g \dot{q}\f$ maps the joint velocity set to the centroidal momentum. | ||
| 284 | Matrix6x Ag; | ||
| 285 | |||
| 286 | // dCCRBA return quantities | ||
| 287 | /// \brief Centroidal Momentum Matrix Time Variation | ||
| 288 | /// \note \f$ \dot{h_g} = A_g \ddot{q}\ + \dot{A_g}\dot{q}\f$ maps the joint velocity and | ||
| 289 | /// acceleration vectors to the time variation of the centroidal momentum. | ||
| 290 | Matrix6x dAg; | ||
| 291 | |||
| 292 | /// \brief Centroidal momentum quantity. | ||
| 293 | /// \note The centroidal momentum is expressed in the frame centered at the CoM and aligned with | ||
| 294 | /// the inertial frame (i.e. the world frame). \note \f$ h_g = \left( m\dot{c}, L_{g} \right); | ||
| 295 | /// \f$. \f$ h_g \f$ is the stack of the linear momentum and the angular momemtum vectors. | ||
| 296 | /// | ||
| 297 | Force hg; | ||
| 298 | |||
| 299 | /// \brief Centroidal momentum time derivative. | ||
| 300 | /// \note The centroidal momentum time derivative is expressed in the frame centered at the CoM | ||
| 301 | /// and aligned with the inertial frame (i.e. the world frame). \note \f$ \dot{h_g} = \left( | ||
| 302 | /// m\ddot{c}, \dot{L}_{g} \right); \f$. \f$ \dot{h_g} \f$ is the stack of the linear momentum | ||
| 303 | /// variation and the angular momemtum variation. | ||
| 304 | /// | ||
| 305 | Force dhg; | ||
| 306 | |||
| 307 | /// \brief Centroidal Composite Rigid Body Inertia. | ||
| 308 | /// \note \f$ hg = Ig v_{\text{mean}}\f$ map a mean velocity to the current centroidal momentum | ||
| 309 | /// quantity. | ||
| 310 | Inertia Ig; | ||
| 311 | |||
| 312 | /// \brief Spatial forces set, used in CRBA and CCRBA | ||
| 313 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6x) Fcrb; | ||
| 314 | |||
| 315 | /// \brief Index of the last child (for CRBA) | ||
| 316 | std::vector<int> lastChild; | ||
| 317 | |||
| 318 | /// \brief Dimension of the subtree motion space (for CRBA) | ||
| 319 | std::vector<int> nvSubtree; | ||
| 320 | |||
| 321 | /// \brief Starting index of the Joint motion subspace | ||
| 322 | std::vector<int> start_idx_v_fromRow; | ||
| 323 | |||
| 324 | /// \brief End index of the Joint motion subspace | ||
| 325 | std::vector<int> end_idx_v_fromRow; | ||
| 326 | |||
| 327 | /// \brief Joint space intertia matrix square root (upper trianglular part) computed with a | ||
| 328 | /// Cholesky Decomposition. | ||
| 329 | MatrixXs U; | ||
| 330 | |||
| 331 | /// \brief Diagonal of the joint space intertia matrix obtained by a Cholesky Decomposition. | ||
| 332 | VectorXs D; | ||
| 333 | |||
| 334 | /// \brief Diagonal inverse of the joint space intertia matrix obtained by a Cholesky | ||
| 335 | /// Decomposition. | ||
| 336 | VectorXs Dinv; | ||
| 337 | |||
| 338 | /// \brief Temporary of size NV used in Cholesky Decomposition. | ||
| 339 | VectorXs tmp; | ||
| 340 | |||
| 341 | /// \brief First previous non-zero row in M (used in Cholesky Decomposition). | ||
| 342 | std::vector<int> parents_fromRow; | ||
| 343 | |||
| 344 | /// \brief Each element of this vector corresponds to the ordered list of indexes belonging to | ||
| 345 | /// the supporting tree of the | ||
| 346 | /// given index at the row level. It may be helpful to retrieve the sparsity pattern | ||
| 347 | /// through it. | ||
| 348 | std::vector<std::vector<int>> supports_fromRow; | ||
| 349 | |||
| 350 | /// \brief Subtree of the current row index (used in Cholesky Decomposition). | ||
| 351 | std::vector<int> nvSubtree_fromRow; | ||
| 352 | |||
| 353 | /// \brief Jacobian of joint placements. | ||
| 354 | /// \note The columns of J corresponds to the basis of the spatial velocities of each joint and | ||
| 355 | /// expressed at the origin of the inertial frame. In other words, if \f$ v_{J_{i}} = S_{i} | ||
| 356 | /// \dot{q}_{i}\f$ is the relative velocity of the joint i regarding to its parent, then \f$J = | ||
| 357 | /// \begin{bmatrix} ^{0}X_{1} S_{1} & \cdots & ^{0}X_{i} S_{i} & \cdots & ^{0}X_{\text{nj}} | ||
| 358 | /// S_{\text{nj}} \end{bmatrix} \f$. This Jacobian has no special meaning. To get the jacobian | ||
| 359 | /// of a precise joint, you need to call pinocchio::getJointJacobian | ||
| 360 | Matrix6x J; | ||
| 361 | |||
| 362 | /// \brief Derivative of the Jacobian with respect to the time. | ||
| 363 | Matrix6x dJ; | ||
| 364 | |||
| 365 | /// \brief Second derivative of the Jacobian with respect to the time. | ||
| 366 | Matrix6x ddJ; | ||
| 367 | |||
| 368 | /// \brief psidot Derivative of Jacobian w.r.t to the parent body moving | ||
| 369 | /// v(p(j)) x Sj | ||
| 370 | Matrix6x psid; | ||
| 371 | |||
| 372 | /// \brief psiddot Second Derivative of Jacobian w.r.t to the parent body | ||
| 373 | /// moving a(p(j)) x Sj + v(p(j)) x psidj | ||
| 374 | Matrix6x psidd; | ||
| 375 | |||
| 376 | /// \brief Variation of the spatial velocity set with respect to the joint configuration. | ||
| 377 | Matrix6x dVdq; | ||
| 378 | |||
| 379 | /// \brief Variation of the spatial acceleration set with respect to the joint configuration. | ||
| 380 | Matrix6x dAdq; | ||
| 381 | |||
| 382 | /// \brief Variation of the spatial acceleration set with respect to the joint velocity. | ||
| 383 | Matrix6x dAdv; | ||
| 384 | |||
| 385 | /// \brief Partial derivative of the joint torque vector with respect to the joint | ||
| 386 | /// configuration. | ||
| 387 | RowMatrixXs dtau_dq; | ||
| 388 | |||
| 389 | /// \brief Partial derivative of the joint torque vector with respect to the joint velocity. | ||
| 390 | RowMatrixXs dtau_dv; | ||
| 391 | |||
| 392 | /// \brief Partial derivative of the joint acceleration vector with respect to the joint | ||
| 393 | /// configuration. | ||
| 394 | RowMatrixXs ddq_dq; | ||
| 395 | |||
| 396 | /// \brief Partial derivative of the joint acceleration vector with respect to the joint | ||
| 397 | /// velocity. | ||
| 398 | RowMatrixXs ddq_dv; | ||
| 399 | |||
| 400 | /// \brief Partial derivative of the joint acceleration vector with respect to the joint | ||
| 401 | /// torques. | ||
| 402 | RowMatrixXs ddq_dtau; | ||
| 403 | |||
| 404 | /// \brief Stack of partial derivative of the contact frame acceleration with respect to the | ||
| 405 | /// joint parameters. | ||
| 406 | MatrixXs dvc_dq; | ||
| 407 | MatrixXs dac_dq; | ||
| 408 | MatrixXs dac_dv; | ||
| 409 | MatrixXs dac_da; | ||
| 410 | |||
| 411 | /// \brief Operational space inertia matrix; | ||
| 412 | MatrixXs osim; | ||
| 413 | |||
| 414 | /// \brief Partial derivatives of the constraints forces with respect to the joint | ||
| 415 | /// configuration, velocity and torque; | ||
| 416 | MatrixXs dlambda_dq; | ||
| 417 | MatrixXs dlambda_dv; | ||
| 418 | MatrixXs dlambda_dtau; | ||
| 419 | MatrixXs dlambda_dx_prox, drhs_prox; | ||
| 420 | |||
| 421 | /// \brief Vector of joint placements wrt to algorithm end effector. | ||
| 422 | PINOCCHIO_ALIGNED_STD_VECTOR(SE3) iMf; | ||
| 423 | |||
| 424 | /// \brief Vector of subtree center of mass positions expressed in the root joint of the | ||
| 425 | /// subtree. In other words, com[j] is the CoM position of the subtree supported by joint \f$ j | ||
| 426 | /// \f$ and expressed in the joint frame \f$ j \f$. The element com[0] corresponds to the center | ||
| 427 | /// of mass position of the whole model and expressed in the global frame. | ||
| 428 | PINOCCHIO_ALIGNED_STD_VECTOR(Vector3) com; | ||
| 429 | |||
| 430 | /// \brief Vector of subtree center of mass linear velocities expressed in the root joint of the | ||
| 431 | /// subtree. In other words, vcom[j] is the CoM linear velocity of the subtree supported by | ||
| 432 | /// joint \f$ j \f$ and expressed in the joint frame \f$ j \f$. The element vcom[0] corresponds | ||
| 433 | /// to the velocity of the CoM of the whole model expressed in the global frame. | ||
| 434 | PINOCCHIO_ALIGNED_STD_VECTOR(Vector3) vcom; | ||
| 435 | |||
| 436 | /// \brief Vector of subtree center of mass linear accelerations expressed in the root joint of | ||
| 437 | /// the subtree. In other words, acom[j] is the CoM linear acceleration of the subtree supported | ||
| 438 | /// by joint \f$ j \f$ and expressed in the joint frame \f$ j \f$. The element acom[0] | ||
| 439 | /// corresponds to the acceleration of the CoM of the whole model expressed in the global frame. | ||
| 440 | PINOCCHIO_ALIGNED_STD_VECTOR(Vector3) acom; | ||
| 441 | |||
| 442 | /// \brief Vector of subtree mass. In other words, mass[j] is the mass of the subtree supported | ||
| 443 | /// by joint \f$ j \f$. The element mass[0] corresponds to the total mass of the model. | ||
| 444 | std::vector<Scalar> mass; | ||
| 445 | |||
| 446 | /// \brief Jacobian of center of mass. | ||
| 447 | /// \note This Jacobian maps the joint velocity vector to the velocity of the center of mass, | ||
| 448 | /// expressed in the inertial frame. In other words, \f$ v_{\text{CoM}} = J_{\text{CoM}} | ||
| 449 | /// \dot{q}\f$. | ||
| 450 | Matrix3x Jcom; | ||
| 451 | |||
| 452 | /// \brief Kinetic energy of the system. | ||
| 453 | Scalar kinetic_energy; | ||
| 454 | |||
| 455 | /// \brief Potential energy of the system. | ||
| 456 | Scalar potential_energy; | ||
| 457 | |||
| 458 | /// \brief Mechanical energy of the system. | ||
| 459 | Scalar mechanical_energy; | ||
| 460 | |||
| 461 | // Temporary variables used in forward dynamics | ||
| 462 | |||
| 463 | /// \brief Inverse of the operational-space inertia matrix | ||
| 464 | MatrixXs JMinvJt; | ||
| 465 | |||
| 466 | /// \brief Cholesky decompostion of \f$JMinvJt\f$. | ||
| 467 | Eigen::LLT<MatrixXs> llt_JMinvJt; | ||
| 468 | |||
| 469 | /// \brief Lagrange Multipliers corresponding to the contact forces in | ||
| 470 | /// pinocchio::forwardDynamics. | ||
| 471 | VectorXs lambda_c; | ||
| 472 | |||
| 473 | /// \brief Proximal Lagrange Multipliers used in the computation of the Forward Dynamics | ||
| 474 | /// computations. | ||
| 475 | VectorXs lambda_c_prox; | ||
| 476 | |||
| 477 | /// \brief Difference between two consecutive iterations of the proxy algorithm. | ||
| 478 | VectorXs diff_lambda_c; | ||
| 479 | |||
| 480 | /// \brief Temporary corresponding to \f$ \sqrt{D} U^{-1} J^{\top} \f$. | ||
| 481 | MatrixXs sDUiJt; | ||
| 482 | |||
| 483 | /// \brief Temporary corresponding to the residual torque \f$ \tau - b(q,\dot{q}) \f$. | ||
| 484 | VectorXs torque_residual; | ||
| 485 | |||
| 486 | /// \brief Generalized velocity after impact. | ||
| 487 | TangentVectorType dq_after; | ||
| 488 | |||
| 489 | /// \brief Lagrange Multipliers corresponding to the contact impulses in | ||
| 490 | /// pinocchio::impulseDynamics. | ||
| 491 | VectorXs impulse_c; | ||
| 492 | |||
| 493 | /// \brief Matrix related to static regressor | ||
| 494 | Matrix3x staticRegressor; | ||
| 495 | |||
| 496 | /// \brief Body regressor | ||
| 497 | BodyRegressorType bodyRegressor; | ||
| 498 | |||
| 499 | /// \brief Matrix related to joint torque regressor | ||
| 500 | MatrixXs jointTorqueRegressor; | ||
| 501 | |||
| 502 | /// \brief Matrix related to kinetic energy regressor | ||
| 503 | RowVectorXs kineticEnergyRegressor; | ||
| 504 | |||
| 505 | /// \brief Matrix related to potential energy regressor | ||
| 506 | RowVectorXs potentialEnergyRegressor; | ||
| 507 | |||
| 508 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6x) KA; | ||
| 509 | PINOCCHIO_ALIGNED_STD_VECTOR(MatrixXs) LA; | ||
| 510 | PINOCCHIO_ALIGNED_STD_VECTOR(VectorXs) lA; | ||
| 511 | PINOCCHIO_ALIGNED_STD_VECTOR(VectorXs) lambdaA; | ||
| 512 | PINOCCHIO_ALIGNED_STD_VECTOR(int) par_cons_ind; | ||
| 513 | PINOCCHIO_ALIGNED_STD_VECTOR(Motion) a_bias; | ||
| 514 | PINOCCHIO_ALIGNED_STD_VECTOR(MatrixXs) KAS; | ||
| 515 | PINOCCHIO_ALIGNED_STD_VECTOR(int) constraint_ind; | ||
| 516 | Eigen::LLT<MatrixXs> osim_llt; | ||
| 517 | |||
| 518 | #if defined(_MSC_VER) | ||
| 519 | // Eigen tensor warning: Eigen\CXX11\src/Tensor/Tensor.h(76,1): warning C4554: '&': check | ||
| 520 | // operator precedence for possible error | ||
| 521 | #pragma warning(disable : 4554) | ||
| 522 | #endif | ||
| 523 | |||
| 524 | /// \brief Tensor containing the kinematic Hessian of all the joints. | ||
| 525 | Tensor3x kinematic_hessians; | ||
| 526 | |||
| 527 | #if defined(_MSC_VER) | ||
| 528 | #pragma warning(default : 4554) // C4554 enabled after tensor definition | ||
| 529 | #endif | ||
| 530 | |||
| 531 | /// \brief Cholesky decomposition of the KKT contact matrix | ||
| 532 | ContactCholeskyDecomposition contact_chol; | ||
| 533 | |||
| 534 | /// \brief RHS vector when solving the contact dynamics KKT problem | ||
| 535 | VectorXs primal_dual_contact_solution; | ||
| 536 | |||
| 537 | /// \brief Primal RHS in contact dynamic equations | ||
| 538 | VectorXs primal_rhs_contact; | ||
| 539 | |||
| 540 | #if defined(_MSC_VER) | ||
| 541 | // Eigen tensor warning: Eigen\CXX11\src/Tensor/Tensor.h(76,1): warning C4554: '&': check | ||
| 542 | // operator precedence for possible error | ||
| 543 | #pragma warning(disable : 4554) | ||
| 544 | #endif | ||
| 545 | |||
| 546 | /// \brief SO Partial derivative of the joint torque vector with respect to | ||
| 547 | /// the joint configuration. | ||
| 548 | Tensor3x d2tau_dqdq; | ||
| 549 | |||
| 550 | /// \brief SO Partial derivative of the joint torque vector with respect to | ||
| 551 | /// the joint velocity. | ||
| 552 | Tensor3x d2tau_dvdv; | ||
| 553 | |||
| 554 | /// \brief SO Cross-Partial derivative of the joint torque vector with | ||
| 555 | /// respect to the joint configuration/velocity. | ||
| 556 | Tensor3x d2tau_dqdv; | ||
| 557 | |||
| 558 | /// \brief SO Cross-Partial derivative of the joint torque vector with | ||
| 559 | /// respect to the joint acceleration/configuration. This also equals to the | ||
| 560 | /// first-order partial derivative of the Mass Matrix w.r.t joint | ||
| 561 | /// configuration. | ||
| 562 | Tensor3x d2tau_dadq; | ||
| 563 | |||
| 564 | #if defined(_MSC_VER) | ||
| 565 | #pragma warning(default : 4554) // C4554 enabled after tensor definition | ||
| 566 | #endif | ||
| 567 | |||
| 568 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) | ||
| 569 | extended_motion_propagator; // Stores force propagator to the base link | ||
| 570 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) extended_motion_propagator2; | ||
| 571 | PINOCCHIO_ALIGNED_STD_VECTOR(Matrix6) spatial_inv_inertia; // Stores spatial inverse inertia | ||
| 572 | PINOCCHIO_ALIGNED_STD_VECTOR(size_t) accumulation_descendant; | ||
| 573 | PINOCCHIO_ALIGNED_STD_VECTOR(size_t) accumulation_ancestor; | ||
| 574 | PINOCCHIO_ALIGNED_STD_VECTOR(int) constraints_supported_dim; | ||
| 575 | PINOCCHIO_ALIGNED_STD_VECTOR(std::set<size_t>) constraints_supported; | ||
| 576 | PINOCCHIO_ALIGNED_STD_VECTOR(size_t) joints_supporting_constraints; | ||
| 577 | PINOCCHIO_ALIGNED_STD_VECTOR(size_t) accumulation_joints; | ||
| 578 | PINOCCHIO_ALIGNED_STD_VECTOR(std::vector<size_t>) constraints_on_joint; | ||
| 579 | |||
| 580 | /// | ||
| 581 | /// \brief Default constructor of pinocchio::Data from a pinocchio::Model. | ||
| 582 | /// | ||
| 583 | /// \param[in] model The model structure of the rigid body system. | ||
| 584 | /// | ||
| 585 | explicit DataTpl(const Model & model); | ||
| 586 | |||
| 587 | /// | ||
| 588 | /// \brief Default constructor | ||
| 589 | /// | ||
| 590 | 8 | DataTpl() | |
| 591 |
127/260✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 8 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 8 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 8 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 8 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 8 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 8 times.
✗ Branch 36 not taken.
✓ Branch 38 taken 8 times.
✗ Branch 39 not taken.
✓ Branch 41 taken 8 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 8 times.
✗ Branch 45 not taken.
✓ Branch 47 taken 8 times.
✗ Branch 48 not taken.
✓ Branch 50 taken 8 times.
✗ Branch 51 not taken.
✓ Branch 53 taken 8 times.
✗ Branch 54 not taken.
✓ Branch 56 taken 8 times.
✗ Branch 57 not taken.
✓ Branch 59 taken 8 times.
✗ Branch 60 not taken.
✓ Branch 62 taken 8 times.
✗ Branch 63 not taken.
✓ Branch 65 taken 8 times.
✗ Branch 66 not taken.
✓ Branch 68 taken 8 times.
✗ Branch 69 not taken.
✓ Branch 71 taken 8 times.
✗ Branch 72 not taken.
✓ Branch 74 taken 8 times.
✗ Branch 75 not taken.
✓ Branch 77 taken 8 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 8 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 8 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 8 times.
✗ Branch 87 not taken.
✓ Branch 89 taken 8 times.
✗ Branch 90 not taken.
✓ Branch 92 taken 8 times.
✗ Branch 93 not taken.
✓ Branch 95 taken 8 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 8 times.
✗ Branch 99 not taken.
✓ Branch 101 taken 8 times.
✗ Branch 102 not taken.
✓ Branch 104 taken 8 times.
✗ Branch 105 not taken.
✓ Branch 107 taken 8 times.
✗ Branch 108 not taken.
✓ Branch 110 taken 8 times.
✗ Branch 111 not taken.
✓ Branch 113 taken 8 times.
✗ Branch 114 not taken.
✓ Branch 116 taken 8 times.
✗ Branch 117 not taken.
✓ Branch 119 taken 8 times.
✗ Branch 120 not taken.
✓ Branch 122 taken 8 times.
✗ Branch 123 not taken.
✓ Branch 125 taken 8 times.
✗ Branch 126 not taken.
✓ Branch 128 taken 8 times.
✗ Branch 129 not taken.
✓ Branch 131 taken 8 times.
✗ Branch 132 not taken.
✓ Branch 134 taken 8 times.
✗ Branch 135 not taken.
✓ Branch 137 taken 8 times.
✗ Branch 138 not taken.
✓ Branch 140 taken 8 times.
✗ Branch 141 not taken.
✓ Branch 143 taken 8 times.
✗ Branch 144 not taken.
✓ Branch 146 taken 8 times.
✗ Branch 147 not taken.
✓ Branch 149 taken 8 times.
✗ Branch 150 not taken.
✓ Branch 152 taken 8 times.
✗ Branch 153 not taken.
✓ Branch 155 taken 8 times.
✗ Branch 156 not taken.
✓ Branch 158 taken 8 times.
✗ Branch 159 not taken.
✓ Branch 161 taken 8 times.
✗ Branch 162 not taken.
✓ Branch 168 taken 8 times.
✗ Branch 169 not taken.
✓ Branch 171 taken 8 times.
✗ Branch 172 not taken.
✓ Branch 174 taken 8 times.
✗ Branch 175 not taken.
✓ Branch 177 taken 8 times.
✗ Branch 178 not taken.
✓ Branch 183 taken 8 times.
✗ Branch 184 not taken.
✓ Branch 186 taken 8 times.
✗ Branch 187 not taken.
✓ Branch 189 taken 8 times.
✗ Branch 190 not taken.
✓ Branch 192 taken 8 times.
✗ Branch 193 not taken.
✓ Branch 195 taken 8 times.
✗ Branch 196 not taken.
✓ Branch 198 taken 8 times.
✗ Branch 199 not taken.
✓ Branch 201 taken 8 times.
✗ Branch 202 not taken.
✓ Branch 204 taken 8 times.
✗ Branch 205 not taken.
✓ Branch 207 taken 8 times.
✗ Branch 208 not taken.
✓ Branch 210 taken 8 times.
✗ Branch 211 not taken.
✓ Branch 213 taken 8 times.
✗ Branch 214 not taken.
✓ Branch 216 taken 8 times.
✗ Branch 217 not taken.
✓ Branch 219 taken 8 times.
✗ Branch 220 not taken.
✓ Branch 222 taken 8 times.
✗ Branch 223 not taken.
✓ Branch 225 taken 8 times.
✗ Branch 226 not taken.
✓ Branch 228 taken 8 times.
✗ Branch 229 not taken.
✓ Branch 231 taken 8 times.
✗ Branch 232 not taken.
✓ Branch 234 taken 8 times.
✗ Branch 235 not taken.
✓ Branch 237 taken 8 times.
✗ Branch 238 not taken.
✓ Branch 240 taken 8 times.
✗ Branch 241 not taken.
✓ Branch 243 taken 8 times.
✗ Branch 244 not taken.
✓ Branch 246 taken 8 times.
✗ Branch 247 not taken.
✓ Branch 249 taken 8 times.
✗ Branch 250 not taken.
✓ Branch 252 taken 8 times.
✗ Branch 253 not taken.
✓ Branch 255 taken 8 times.
✗ Branch 256 not taken.
✓ Branch 258 taken 8 times.
✗ Branch 259 not taken.
✓ Branch 261 taken 8 times.
✗ Branch 262 not taken.
✓ Branch 265 taken 8 times.
✗ Branch 266 not taken.
✓ Branch 268 taken 8 times.
✗ Branch 269 not taken.
✓ Branch 271 taken 8 times.
✗ Branch 272 not taken.
✓ Branch 274 taken 8 times.
✗ Branch 275 not taken.
✓ Branch 277 taken 8 times.
✗ Branch 278 not taken.
✓ Branch 280 taken 8 times.
✗ Branch 281 not taken.
✓ Branch 283 taken 8 times.
✗ Branch 284 not taken.
✓ Branch 286 taken 8 times.
✗ Branch 287 not taken.
✓ Branch 289 taken 8 times.
✗ Branch 290 not taken.
✓ Branch 292 taken 8 times.
✗ Branch 293 not taken.
✓ Branch 295 taken 8 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 8 times.
✗ Branch 299 not taken.
✓ Branch 301 taken 8 times.
✗ Branch 302 not taken.
✓ Branch 304 taken 8 times.
✗ Branch 305 not taken.
✓ Branch 307 taken 8 times.
✗ Branch 308 not taken.
✓ Branch 310 taken 8 times.
✗ Branch 311 not taken.
✓ Branch 313 taken 8 times.
✗ Branch 314 not taken.
✓ Branch 316 taken 8 times.
✗ Branch 317 not taken.
✓ Branch 319 taken 8 times.
✗ Branch 320 not taken.
✓ Branch 322 taken 8 times.
✗ Branch 323 not taken.
✓ Branch 325 taken 8 times.
✗ Branch 326 not taken.
✓ Branch 328 taken 8 times.
✗ Branch 329 not taken.
✓ Branch 331 taken 8 times.
✗ Branch 332 not taken.
✓ Branch 334 taken 8 times.
✗ Branch 335 not taken.
✓ Branch 337 taken 8 times.
✗ Branch 338 not taken.
✓ Branch 340 taken 8 times.
✗ Branch 341 not taken.
✓ Branch 343 taken 8 times.
✗ Branch 344 not taken.
✓ Branch 346 taken 8 times.
✗ Branch 347 not taken.
✓ Branch 349 taken 8 times.
✗ Branch 350 not taken.
✓ Branch 352 taken 8 times.
✗ Branch 353 not taken.
✓ Branch 355 taken 8 times.
✗ Branch 356 not taken.
✓ Branch 358 taken 8 times.
✗ Branch 359 not taken.
✓ Branch 361 taken 8 times.
✗ Branch 362 not taken.
✓ Branch 364 taken 8 times.
✗ Branch 365 not taken.
✓ Branch 367 taken 8 times.
✗ Branch 368 not taken.
✓ Branch 370 taken 8 times.
✗ Branch 371 not taken.
✓ Branch 373 taken 8 times.
✗ Branch 374 not taken.
✓ Branch 376 taken 8 times.
✗ Branch 377 not taken.
✓ Branch 379 taken 8 times.
✗ Branch 380 not taken.
✓ Branch 382 taken 8 times.
✗ Branch 383 not taken.
✓ Branch 385 taken 8 times.
✗ Branch 386 not taken.
✓ Branch 388 taken 8 times.
✗ Branch 389 not taken.
✗ Branch 391 not taken.
✗ Branch 392 not taken.
✗ Branch 394 not taken.
✗ Branch 395 not taken.
✗ Branch 397 not taken.
✗ Branch 398 not taken.
|
8 | { |
| 592 | 8 | } | |
| 593 | |||
| 594 | private: | ||
| 595 | void computeLastChild(const Model & model); | ||
| 596 | void computeParents_fromRow(const Model & model); | ||
| 597 | void computeSupports_fromRow(const Model & model); | ||
| 598 | }; | ||
| 599 | |||
| 600 | } // namespace pinocchio | ||
| 601 | |||
| 602 | /* --- Details -------------------------------------------------------------- */ | ||
| 603 | /* --- Details -------------------------------------------------------------- */ | ||
| 604 | /* --- Details -------------------------------------------------------------- */ | ||
| 605 | #include "pinocchio/multibody/data.hxx" | ||
| 606 | |||
| 607 | #if PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION | ||
| 608 | #include "pinocchio/multibody/data.txx" | ||
| 609 | #endif // PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION | ||
| 610 | |||
| 611 | #endif // ifndef __pinocchio_multibody_data_hpp__ | ||
| 612 |