ArticulatedBodyInertia

Struct ArticulatedBodyInertia 

Source
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:

  1. Propagated inertia: Inertia of all bodies in the subtree
  2. Dynamic coupling: How motion at one joint affects other joints
  3. 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: SymmetricMat3

Top-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: SymmetricMat3

Bottom-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

Source

pub fn add_arti_inertia(&self, rhs: &Self) -> Self

Source

pub fn sub_arti_inertia(&self, rhs: &Self) -> Self

Source

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.

Source

pub fn mul_motion_vec( &self, motion_vec: SpatialMotionVector, ) -> SpatialForceVector

Source

pub fn from_symmertic_matrix(matrix: SMatrix<6, 6>) -> Self

take the lower triangle part.

Source

pub fn matrix(&self) -> SMatrix<6, 6>

Trait Implementations§

Source§

impl Add<RigidBodyInertia> for ArticulatedBodyInertia

Source§

type Output = ArticulatedBodyInertia

The resulting type after applying the + operator.
Source§

fn add(self, rhs: RigidBodyInertia) -> Self::Output

Performs the + operation. Read more
Source§

impl Add for &ArticulatedBodyInertia

Source§

type Output = ArticulatedBodyInertia

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> ArticulatedBodyInertia

Performs the + operation. Read more
Source§

impl Add for ArticulatedBodyInertia

Source§

type Output = ArticulatedBodyInertia

The resulting type after applying the + operator.
Source§

fn add(self, rhs: Self) -> Self::Output

Performs the + operation. Read more
Source§

impl AddAssign<&ArticulatedBodyInertia> for ArticulatedBodyInertia

Source§

fn add_assign(&mut self, rhs: &ArticulatedBodyInertia)

Performs the += operation. Read more
Source§

impl Clone for ArticulatedBodyInertia

Source§

fn clone(&self) -> ArticulatedBodyInertia

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ArticulatedBodyInertia

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ArticulatedBodyInertia

Source§

fn default() -> ArticulatedBodyInertia

Returns the “default value” for a type. Read more
Source§

impl From<RigidBodyInertia> for ArticulatedBodyInertia

Source§

fn from(value: RigidBodyInertia) -> Self

Converts to this type from the input type.
Source§

impl Mul<&ArticulatedBodyInertia> for PluckerTransform

Source§

type Output = ArticulatedBodyInertia

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &ArticulatedBodyInertia) -> ArticulatedBodyInertia

Performs the * operation. Read more
Source§

impl Mul<SpatialVector<Motion>> for &ArticulatedBodyInertia

Source§

type Output = SpatialVector<Force>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: SpatialMotionVector) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<SpatialVector<Motion>> for ArticulatedBodyInertia

Source§

type Output = SpatialVector<Force>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: SpatialMotionVector) -> Self::Output

Performs the * operation. Read more
Source§

impl Sub<ArticulatedBodyInertia> for &ArticulatedBodyInertia

Source§

type Output = ArticulatedBodyInertia

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: ArticulatedBodyInertia) -> Self::Output

Performs the - operation. Read more
Source§

impl Sub for ArticulatedBodyInertia

Source§

type Output = ArticulatedBodyInertia

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: Self) -> Self::Output

Performs the - operation. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, Right> ClosedAdd<Right> for T
where T: Add<Right, Output = T> + AddAssign<Right>,