Hello 舒媛 ,
The inertia matrix (M(q)) is a key component in the dynamics equation.
To calculate the inertia matrix, use the massMatrix object function with your current robot configuration.
Unfortunately, there isn’t a direct function for obtaining the Coriolis matrix or inertia matrix for a rigidBodyTree. However, you can compute the Coriolis terms and inertia matrix manually using the following equation -
Here,
- M(q) — is a joint-space mass matrix based on the current robot configuration. You can calculate this matrix by using the "massMatrix" object function.
- C(q,˙q) — are the Coriolis terms, which are multiplied by ˙q to calculate the velocity product. You can calculate the velocity product by using by the "velocityProduct" object function.
- G(q) — is the gravity torques and forces required for all joints to maintain their positions in the specified gravity "Gravity". You can calculate the gravity torque by using the "gravityTorque" object function.
- J(q) — is the geometric Jacobian for the specified joint configuration. You can calculate the geometric Jacobian by using the "geometricJacobian" object function.
- FExt — is a matrix of the external forces applied to the rigid body. You can generate external forces by using the "externalForce" object function.
- τ — are the joint torques and forces applied directly as a vector to each joint.
- q,˙q,¨q — are the joint configuration, joint velocities, and joint accelerations, respectively, as individual vectors. For revolute joints, kindly specify values in radians, rad/s, and rad/s2, respectively. For prismatic joints, specify in meters, m/s, and m/s2.
I hope this helps.