10 #ifndef SPATIAL_DYN_STRUCTS_ARTICULATED_BODY_CACHE_H_
11 #define SPATIAL_DYN_STRUCTS_ARTICULATED_BODY_CACHE_H_
13 #include "spatial_dyn/structs/articulated_body.h"
20 struct ArticulatedBody::Cache {
22 struct TransformData {
23 bool is_T_to_parent_computed =
false;
26 bool is_T_to_world_computed =
false;
29 TransformData T_data_;
32 bool is_computed =
false;
33 std::vector<SpatialMotiond> v;
35 VelocityData vel_data_;
38 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
40 Eigen::Vector3d offset;
42 bool is_computed =
false;
45 JacobianData jac_data_;
47 struct CentrifugalCoriolisData {
48 bool is_computed =
false;
49 std::vector<SpatialMotiond> c_c;
50 std::vector<SpatialForced> f_c;
53 CentrifugalCoriolisData cc_data_;
56 bool is_computed =
false;
57 std::vector<SpatialForced> f_g;
60 GravityData grav_data_;
63 std::vector<SpatialMotiond> a;
64 std::vector<SpatialForced> f;
69 bool is_computed =
false;
70 std::vector<SpatialInertiad> I_c;
73 bool is_inv_computed =
false;
74 Eigen::LDLT<Eigen::MatrixXd> A_inv;
79 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
80 bool is_computed =
false;
81 std::vector<SpatialInertiaMatrixd> I_a;
82 std::vector<SpatialForced> h;
83 std::vector<double> d;
85 bool is_A_inv_computed =
false;
86 Eigen::MatrixXd A_inv;
87 std::vector<SpatialForceXd> P;
88 std::vector<SpatialMotionXd> A;
96 bool is_lambda_computed =
false;
97 Eigen::MatrixXd Lambda;
99 bool is_lambda_inv_computed =
false;
100 Eigen::MatrixXd Lambda_inv;
101 Eigen::MatrixXd A_inv_J_T;
104 bool is_jbar_computed =
false;
105 Eigen::MatrixXd J_bar;
107 OpspaceData opspace_data_;
109 struct OpspaceAbaData {
110 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
112 Eigen::Vector3d offset;
115 bool is_lambda_computed =
false;
116 Eigen::Matrix6d Lambda;
118 bool is_lambda_inv_computed =
false;
119 Eigen::Matrix6d Lambda_inv;
121 std::vector<SpatialForce6d> p;
122 std::vector<Eigen::Matrix<double,1,6>> u;
124 OpspaceAbaData opspace_aba_data_;
127 Eigen::VectorXd q_prev;
129 bool is_q_prev_valid =
false;
131 std::vector<Eigen::Isometry3d> T_to_prev;
132 std::vector<SpatialForced> p_prev;
133 bool is_prev_computed =
false;
135 std::vector<Eigen::Isometry3d> T_from_next;
136 std::vector<SpatialForced> p;
137 std::vector<SpatialForced> dp;
139 DrneaData drnea_data_;
const Eigen::Isometry3d & T_to_world(int i) const
Definition: articulated_body.cc:196
const Eigen::Isometry3d & T_to_parent(int i) const
Definition: articulated_body.cc:178
Definition: discrete_dynamics.cc:21