Skip to main content

URDFChain

Struct URDFChain 

Source
pub struct URDFChain<const N: usize> { /* private fields */ }
Expand description

FK chain using exact URDF joint transforms.

Accumulation works directly on columns:

  1. Translation: t += fx·c0 + fy·c1 + fz·c2
  2. Fixed rotation: (c0,c1,c2) = (c0,c1,c2) * fixed_rot
  3. Joint rotation: 2D rotation on the appropriate column pair

When fixed_rot is identity (RPY = 0, the common case), step 2 is skipped entirely, making per-joint cost a single 2D column rotation plus translation — cheaper than DH.

Implementations§

Source§

impl<const N: usize> URDFChain<N>

Source

pub const fn new(joints: [URDFJoint; N]) -> Result<Self, URDFBuildError>

Build a chain from exactly N actuated (revolute) joints. Returns URDFBuildError::JointTypeMismatch if any entry is Fixed or Prismatic. For a slice that mixes fixed joints in, use URDFChain::from_urdf instead.

Source

pub const fn from_urdf(joints: &[URDFJoint]) -> Result<Self, URDFBuildError>

Build a chain from a flat URDF joint list (any mix of Fixed, Revolute, and/or Prismatic). The list must describe a single branch in parent→child order.

  • Leading Fixed joints become the prefix (applied before joint 0).
  • Trailing Fixed joints become the suffix (applied after the last actuated joint).
  • Fixed joints sandwiched between actuated joints are folded into the origin of the next actuated joint so the kinematics are preserved exactly.
  • The number of Revolute joints must equal N.

Returns URDFBuildError::JointTypeMismatch if a Prismatic joint appears (not handled by URDFChain itself — wrap the result in PrismaticFK for a prismatic joint at the start or end), or URDFBuildError::RevoluteCountMismatch if the revolute count doesn’t match N.

Source

pub const fn with_fixed_prefix( self, joints: &[URDFJoint], ) -> Result<Self, URDFBuildError>

Bake a sequence of URDF fixed-joint origins (parent→child order) into the base side of the chain. The composed transform is applied before joint 0, so every joint frame returned by FKChain::fk and every position returned by FKChain::joint_axes_positions reflects the fixed prefix.

Each joint in joints must be URDFJointType::Fixed. An empty slice clears any previously set prefix. Returns DekeError::URDFJointTypeMismatch if any joint is non-Fixed.

Source

pub const fn with_fixed_suffix( self, joints: &[URDFJoint], ) -> Result<Self, URDFBuildError>

Bake a sequence of URDF fixed-joint origins (parent→child order) into the tool side of the chain. The composed transform is applied after the last actuated joint, so the final frame of FKChain::fk, the result of FKChain::fk_end, and the p_ee returned by FKChain::joint_axes_positions all include the fixed suffix.

Joint pivot positions and axes (positions[0..N], axes[0..N]) remain at the actuated joint origins — they are not shifted by the suffix.

Each joint in joints must be URDFJointType::Fixed. An empty slice clears any previously set suffix. Returns DekeError::URDFJointTypeMismatch if any joint is non-Fixed.

Source

pub const fn with_fixed_joints( self, prefix: &[URDFJoint], suffix: &[URDFJoint], ) -> Result<Self, URDFBuildError>

Convenience: set both a fixed-joint prefix and suffix in one call.

Trait Implementations§

Source§

impl<const N: usize> Clone for URDFChain<N>

Source§

fn clone(&self) -> URDFChain<N>

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<const N: usize> Debug for URDFChain<N>

Source§

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

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

impl<const N: usize> FKChain<N> for URDFChain<N>

Source§

type Error = DekeError

Source§

fn fk(&self, q: &SRobotQ<N>) -> Result<[Affine3A; N], Self::Error>

Source§

fn fk_end(&self, q: &SRobotQ<N>) -> Result<Affine3A, Self::Error>

Source§

fn joint_axes_positions( &self, q: &SRobotQ<N>, ) -> Result<([Vec3A; N], [Vec3A; N], Vec3A), Self::Error>

Returns joint rotation axes and axis-origin positions in world frame at configuration q, plus the end-effector position.
Source§

fn dof(&self) -> usize

Source§

fn max_reach(&self) -> Result<f32, Self::Error>

Theoretical maximum reach: sum of link lengths (upper bound, ignores joint limits).
Source§

fn jacobian(&self, q: &SRobotQ<N>) -> Result<[[f32; N]; 6], Self::Error>

Geometric Jacobian (6×N) at configuration q. Rows 0–2: linear velocity, rows 3–5: angular velocity.
Source§

fn jacobian_dot( &self, q: &SRobotQ<N>, qdot: &SRobotQ<N>, ) -> Result<[[f32; N]; 6], Self::Error>

First time-derivative of the geometric Jacobian.
Source§

fn jacobian_ddot( &self, q: &SRobotQ<N>, qdot: &SRobotQ<N>, qddot: &SRobotQ<N>, ) -> Result<[[f32; N]; 6], Self::Error>

Second time-derivative of the geometric Jacobian.
Source§

impl From<URDFChain<1>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<1>) -> Self

Converts to this type from the input type.
Source§

impl From<URDFChain<2>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<2>) -> Self

Converts to this type from the input type.
Source§

impl From<URDFChain<3>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<3>) -> Self

Converts to this type from the input type.
Source§

impl From<URDFChain<4>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<4>) -> Self

Converts to this type from the input type.
Source§

impl From<URDFChain<5>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<5>) -> Self

Converts to this type from the input type.
Source§

impl From<URDFChain<6>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<6>) -> Self

Converts to this type from the input type.
Source§

impl From<URDFChain<7>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<7>) -> Self

Converts to this type from the input type.
Source§

impl From<URDFChain<8>> for DynamicURDFChain

Source§

fn from(chain: URDFChain<8>) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<const N: usize> Freeze for URDFChain<N>

§

impl<const N: usize> RefUnwindSafe for URDFChain<N>

§

impl<const N: usize> Send for URDFChain<N>

§

impl<const N: usize> Sync for URDFChain<N>

§

impl<const N: usize> Unpin for URDFChain<N>

§

impl<const N: usize> UnsafeUnpin for URDFChain<N>

§

impl<const N: usize> UnwindSafe for URDFChain<N>

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