Skip to main content

AxisMap

Struct AxisMap 

Source
pub struct AxisMap {
    pub x: Axis,
    pub y: Axis,
    pub z: Axis,
}
Expand description

Which sensor axis each board axis reads.

use oxstack_drivers::axes::{Axis, AxisMap};

// Sensor rotated 90° clockwise on the board: board +X is sensor −Y.
let map = AxisMap { x: Axis::NegY, y: Axis::PosX, z: Axis::PosZ };
assert_eq!(map.apply([1.0, 0.0, 0.0]), [0.0, 1.0, 0.0]);
assert!(map.is_right_handed());

Fields§

§x: Axis

The sensor axis the board’s +X reads.

§y: Axis

The sensor axis the board’s +Y reads.

§z: Axis

The sensor axis the board’s +Z reads.

Implementations§

Source§

impl AxisMap

Source

pub const IDENTITY: AxisMap

Board frame equals sensor frame.

Source

pub const fn apply(&self, v: [f32; 3]) -> [f32; 3]

Translates a sensor-frame vector into the board frame.

Source

pub const fn is_permutation(&self) -> bool

Whether every sensor axis is used exactly once.

Source

pub const fn is_right_handed(&self) -> bool

Whether the map is a rotation (determinant +1) rather than a reflection. A sensor soldered flat on a board always gives a rotation; a reflection means one pose was misread.

Source

pub fn from_gravity( x_up: [f32; 3], y_up: [f32; 3], z_up: [f32; 3], ) -> Result<AxisMap, GravityError>

Works the map out from gravity. Each argument is one resting accelerometer reading (in g, sensor frame) with the named board axis pointing straight up, so that it reads about +1 g:

  • x_up: board stood on its left edge (+X up),
  • y_up: board stood on its bottom edge (+Y up),
  • z_up: board lying flat, face up (+Z up).
use oxstack_drivers::axes::{Axis, AxisMap};

let map = AxisMap::from_gravity(
    [0.02, -0.98, 0.05],   // +X up: sensor −Y reads gravity
    [0.99, 0.01, -0.03],   // +Y up: sensor +X
    [-0.04, 0.0, 1.01],    // +Z up: sensor +Z
)
.unwrap();
assert_eq!(map, AxisMap { x: Axis::NegY, y: Axis::PosX, z: Axis::PosZ });

Trait Implementations§

Source§

impl Clone for AxisMap

Source§

fn clone(&self) -> AxisMap

Returns a duplicate of the value. Read more
1.0.0 (const: unstable)§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for AxisMap

Source§

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

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

impl Format for AxisMap
where Axis: Format,

Source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
Source§

impl PartialEq for AxisMap

Source§

fn eq(&self, other: &AxisMap) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable)§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for AxisMap

Source§

impl Eq for AxisMap

Source§

impl StructuralPartialEq for AxisMap

Auto Trait Implementations§

§

impl Freeze for AxisMap

§

impl RefUnwindSafe for AxisMap

§

impl Send for AxisMap

§

impl Sync for AxisMap

§

impl Unpin for AxisMap

§

impl UnsafeUnpin for AxisMap

§

impl UnwindSafe for AxisMap

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
Source§

impl<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
§

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

§

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
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
§

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

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

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

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

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

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,