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

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<Self, 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

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
§

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
§

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.

§

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.