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: AxisThe sensor axis the board’s +X reads.
y: AxisThe sensor axis the board’s +Y reads.
z: AxisThe sensor axis the board’s +Z reads.
Implementations§
Source§impl AxisMap
impl AxisMap
Sourcepub const fn apply(&self, v: [f32; 3]) -> [f32; 3]
pub const fn apply(&self, v: [f32; 3]) -> [f32; 3]
Translates a sensor-frame vector into the board frame.
Sourcepub const fn is_permutation(&self) -> bool
pub const fn is_permutation(&self) -> bool
Whether every sensor axis is used exactly once.
Sourcepub const fn is_right_handed(&self) -> bool
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.
Sourcepub fn from_gravity(
x_up: [f32; 3],
y_up: [f32; 3],
z_up: [f32; 3],
) -> Result<Self, GravityError>
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§
impl Copy for AxisMap
impl Eq for AxisMap
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 Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
🔬This is a nightly-only experimental API. (
clone_to_uninit)