pub struct ArticulatedBodyInertia {
pub top_left: SymmetricMat3,
pub h: SMatrix<3, 3>,
pub mass: SymmetricMat3,
}Expand description
Articulated body spatial inertia matrix for complex multi-body systems.
This represents the effective inertia of an articulated body, which accounts for the inertia of all bodies in the subtree beyond a given joint. Unlike rigid body inertia, articulated body inertia captures the dynamic coupling between joints in a kinematic chain.
§Matrix Structure
The articulated body inertia has the form:
| I H |
I_A = | |
| Hᵀ M |where:
- I: 3×3 matrix representing rotational inertia effects
- H: 3×3 matrix representing coupling between rotation and translation
- M: 3×3 matrix representing translational inertia effects
§Physical Meaning
Articulated body inertia represents the effective inertia seen at a joint when all bodies beyond that joint move together. It accounts for:
- Propagated inertia: Inertia of all bodies in the subtree
- Dynamic coupling: How motion at one joint affects other joints
- Constraint forces: Forces transmitted through the kinematic chain
§Use in Dynamics
This is a key component in Featherstone’s Articulated Body Algorithm:
- Used in forward dynamics to compute joint accelerations
- Captures the influence of the entire subtree on each joint
- Enables O(n) complexity dynamics for tree-structured mechanisms
§Storage
The matrix stores 21 independent elements (6 for I, 9 for H, 6 for M), optimized for the symmetric structure of the top-left and bottom-right blocks.
Fields§
§top_left: SymmetricMat3Top-left 3×3 block (I) of the articulated body inertia matrix.
This symmetric matrix represents rotational inertia effects and couples angular accelerations to resulting moments.
h: SMatrix<3, 3>Top-right 3×3 block (H) of the articulated body inertia matrix.
This general (non-symmetric) matrix represents cross-coupling between rotational and translational motion in the articulated system.
mass: SymmetricMat3Bottom-right 3×3 block (M) of the articulated body inertia matrix.
This symmetric matrix represents translational inertia effects and couples linear accelerations to resulting forces.
Implementations§
Source§impl ArticulatedBodyInertia
impl ArticulatedBodyInertia
pub fn add_arti_inertia(&self, rhs: &Self) -> Self
pub fn sub_arti_inertia(&self, rhs: &Self) -> Self
Sourcepub fn add_spat_inertia(&self, rhs: &RigidBodyInertia) -> Self
pub fn add_spat_inertia(&self, rhs: &RigidBodyInertia) -> Self
Add a rigid body inertia to this articulated body inertia.
This operation is used in the articulated body algorithm when propagating inertia from child bodies to parent bodies. It combines the effective articulated body inertia of the subtree with the rigid body inertia of the current body.
§Physical Meaning
This represents adding the inertia of a rigid body to an existing articulated body, effectively extending the articulated system by one body. The operation accounts for:
- Adding the rigid body’s mass to the translational inertia
- Including cross-coupling effects from the rigid body’s first moment
- Adding the rigid body’s rotational inertia to the system
§Algorithm Context
This is a crucial step in Featherstone’s articulated body algorithm for computing the effective inertia at each joint in a kinematic tree.
pub fn mul_motion_vec( &self, motion_vec: SpatialMotionVector, ) -> SpatialForceVector
Sourcepub fn from_symmertic_matrix(matrix: SMatrix<6, 6>) -> Self
pub fn from_symmertic_matrix(matrix: SMatrix<6, 6>) -> Self
take the lower triangle part.
pub fn matrix(&self) -> SMatrix<6, 6>
Trait Implementations§
Source§impl Add<RigidBodyInertia> for ArticulatedBodyInertia
impl Add<RigidBodyInertia> for ArticulatedBodyInertia
Source§type Output = ArticulatedBodyInertia
type Output = ArticulatedBodyInertia
+ operator.Source§impl Add for &ArticulatedBodyInertia
impl Add for &ArticulatedBodyInertia
Source§type Output = ArticulatedBodyInertia
type Output = ArticulatedBodyInertia
+ operator.Source§fn add(self, rhs: Self) -> ArticulatedBodyInertia
fn add(self, rhs: Self) -> ArticulatedBodyInertia
+ operation. Read moreSource§impl Add for ArticulatedBodyInertia
impl Add for ArticulatedBodyInertia
Source§impl AddAssign<&ArticulatedBodyInertia> for ArticulatedBodyInertia
impl AddAssign<&ArticulatedBodyInertia> for ArticulatedBodyInertia
Source§fn add_assign(&mut self, rhs: &ArticulatedBodyInertia)
fn add_assign(&mut self, rhs: &ArticulatedBodyInertia)
+= operation. Read moreSource§impl Clone for ArticulatedBodyInertia
impl Clone for ArticulatedBodyInertia
Source§fn clone(&self) -> ArticulatedBodyInertia
fn clone(&self) -> ArticulatedBodyInertia
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ArticulatedBodyInertia
impl Debug for ArticulatedBodyInertia
Source§impl Default for ArticulatedBodyInertia
impl Default for ArticulatedBodyInertia
Source§fn default() -> ArticulatedBodyInertia
fn default() -> ArticulatedBodyInertia
Source§impl From<RigidBodyInertia> for ArticulatedBodyInertia
impl From<RigidBodyInertia> for ArticulatedBodyInertia
Source§fn from(value: RigidBodyInertia) -> Self
fn from(value: RigidBodyInertia) -> Self
Source§impl Mul<&ArticulatedBodyInertia> for PluckerTransform
impl Mul<&ArticulatedBodyInertia> for PluckerTransform
Source§type Output = ArticulatedBodyInertia
type Output = ArticulatedBodyInertia
* operator.Source§fn mul(self, rhs: &ArticulatedBodyInertia) -> ArticulatedBodyInertia
fn mul(self, rhs: &ArticulatedBodyInertia) -> ArticulatedBodyInertia
* operation. Read moreSource§impl Mul<SpatialVector<Motion>> for &ArticulatedBodyInertia
impl Mul<SpatialVector<Motion>> for &ArticulatedBodyInertia
Source§type Output = SpatialVector<Force>
type Output = SpatialVector<Force>
* operator.Source§impl Mul<SpatialVector<Motion>> for ArticulatedBodyInertia
impl Mul<SpatialVector<Motion>> for ArticulatedBodyInertia
Source§type Output = SpatialVector<Force>
type Output = SpatialVector<Force>
* operator.Source§impl Sub<ArticulatedBodyInertia> for &ArticulatedBodyInertia
impl Sub<ArticulatedBodyInertia> for &ArticulatedBodyInertia
Source§type Output = ArticulatedBodyInertia
type Output = ArticulatedBodyInertia
- operator.Auto Trait Implementations§
impl Freeze for ArticulatedBodyInertia
impl RefUnwindSafe for ArticulatedBodyInertia
impl Send for ArticulatedBodyInertia
impl Sync for ArticulatedBodyInertia
impl Unpin for ArticulatedBodyInertia
impl UnwindSafe for ArticulatedBodyInertia
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.