Skip to main content

nabled_dynamics/
config.rs

1//! Dynamics configuration (gravity and defaults).
2
3use nabled_core::scalar::NabledReal;
4
5/// Forward dynamics implementation selector.
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
7pub enum ForwardDynamicsMethod {
8    /// Articulated Body Algorithm (O(n), default).
9    #[default]
10    Aba,
11    /// Composite rigid-body mass matrix + LU solve (cross-check / fallback).
12    CrbaLu,
13}
14
15/// Configuration for inverse/forward dynamics routines.
16#[derive(Debug, Clone, Copy, PartialEq)]
17pub struct DynamicsConfig<T> {
18    /// World-frame gravity vector `[gx, gy, gz]`.
19    pub gravity:          [T; 3],
20    /// Forward dynamics algorithm (ABA default; CRBA+LU fallback).
21    pub forward_dynamics: ForwardDynamicsMethod,
22}
23
24impl<T: NabledReal> Default for DynamicsConfig<T> {
25    fn default() -> Self {
26        Self {
27            gravity:          [T::zero(), T::from_f64(-9.81).unwrap_or(T::zero()), T::zero()],
28            forward_dynamics: ForwardDynamicsMethod::default(),
29        }
30    }
31}