35 const std::array<double, 7>& dq,
36 const std::array<double, 9>& i_total,
38 const std::array<double, 3>& f_x_ctotal,
39 std::array<double, 7>& c_ne)
override;
42 const std::array<double, 7>& dq,
43 const std::array<double, 9>& i_total,
45 const std::array<double, 3>& f_x_ctotal,
46 const std::array<double, 3>& g_earth,
47 std::array<double, 7>& c_ne)
override;
49 void gravity(
const std::array<double, 7>& q,
50 const std::array<double, 3>& g_earth,
52 const std::array<double, 3>& f_x_ctotal,
53 std::array<double, 7>& g_ne)
override;
55 void mass(
const std::array<double, 7>& q,
56 const std::array<double, 9>& i_total,
58 const std::array<double, 3>& f_x_ctotal,
59 std::array<double, 49>& m_ne)
override;
60 std::array<double, 16>
pose(
61 const std::array<double, 7>& q,
62 int joint_index)
override;
64 const std::array<double, 7>& q,
65 const std::array<double, 16>& f_t_ee)
override;
67 const std::array<double, 7>& q)
override;
69 const std::array<double, 7>& q,
70 const std::array<double, 16>& f_t_ee,
71 const std::array<double, 16>& ee_t_k)
override;
73 const std::array<double, 7>& q,
74 int joint_index)
override;
76 const std::array<double, 7>& q)
override;
78 const std::array<double, 7>& q,
79 const std::array<double, 16>& f_t_ee)
override;
81 const std::array<double, 7>& q,
82 const std::array<double, 16>& f_t_ee,
83 const std::array<double, 16>& ee_t_k)
override;
85 const std::array<double, 7>& q,
86 int joint_index)
override;
88 const std::array<double, 7>& q)
override;
90 const std::array<double, 7>& q,
91 const std::array<double, 16>& f_t_ee)
override;
93 const std::array<double, 7>& q,
94 const std::array<double, 16>& f_t_ee,
95 const std::array<double, 16>& ee_t_k)
override;
98 mutable pinocchio::Data data_;
99 mutable pinocchio::Data data_gravity_;
101 mutable Eigen::Matrix<double, 7, 1> q_eigen_;
102 mutable Eigen::Matrix<double, 7, 1> dq_eigen_;
103 mutable Eigen::Matrix<double, 7, 1> tau_eigen_;
104 mutable Eigen::Matrix<double, 7, 1> ddq_temp_eigen_;
105 mutable Eigen::Vector3d com_eigen_;
106 mutable Eigen::Matrix3d inertia_eigen_;
108 mutable std::array<double, 9> cached_i_total_;
109 mutable double cached_m_total_{-1.0};
110 mutable std::array<double, 3> cached_f_x_ctotal_;
111 mutable bool inertia_cache_valid_{
false};
113 mutable pinocchio::Model pinocchio_model_;
119 pinocchio::Data computeForwardKinematics(
120 const std::array<double, 7>& q)
const;
127 static std::array<double, 16> eigenToArray(
const Eigen::Matrix4d& matrix);
134 static std::array<double, 42> eigenToArray(
const Eigen::Matrix<double, 6, 7>& matrix);
141 pinocchio::Data initializeModelAndReturnData(
const std::string& urdf);
150 pinocchio::FrameIndex addFrame(
const std::string& name,
151 pinocchio::FrameIndex parent_frame_id,
152 const pinocchio::SE3& placement);
162 std::array<double, 42> computeJacobian(
163 const std::array<double, 7>& q,
164 int frame_or_joint_index,
166 pinocchio::ReferenceFrame reference_frame);
175 std::array<double, 42> computeEeJacobian(
176 const std::array<double, 7>& q,
177 const std::array<double, 16>& f_t_ee,
178 pinocchio::ReferenceFrame reference_frame);
188 std::array<double, 42> computeStiffnessJacobian(
189 const std::array<double, 7>& q,
190 const std::array<double, 16>& f_t_ee,
191 const std::array<double, 16>& ee_t_k,
192 pinocchio::ReferenceFrame reference_frame);
200 void updateFramePlacements(
const std::array<double, 16>& f_t_ee,
201 const std::array<double, 16>& ee_t_k = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
203 bool update_stiffness =
false);
211 void updateInertiaIfNeeded(
const std::array<double, 9>& i_total,
213 const std::array<double, 3>& f_x_ctotal)
const;
218 void restoreOriginalInertia()
const;
226 void computeGravityVector(
227 const std::array<double, 7>& q,
228 const std::array<double, 3>& g_earth,
229 std::array<double, 7>& g_ne)
const;
231 pinocchio::Inertia initial_last_link_inertia_;
232 pinocchio::FrameIndex last_link_frame_index_;
233 pinocchio::JointIndex last_joint_index_;
234 void copyToEigenQ(
const std::array<double, 7>& q)
const;
236 const std::array<double, 7>& dq)
const;
237 static void copyFromEigen(
const Eigen::VectorXd& src, std::array<double, 7>& dst);
238 static void copyFromEigenMatrix(
const Eigen::MatrixXd& src, std::array<double, 49>& dst);
239 pinocchio::FrameIndex ee_frame_index_;
240 pinocchio::FrameIndex stiffness_frame_index_;