M5Unit-IMU 0.0.2 git rev:e5b00aa
Loading...
Searching...
No Matches
axis_order.hpp File Reference

Per-source axis permutation and inversion applied to raw-to-physical IMU samples. More...

#include <cstdint>

Go to the source code of this file.

Classes

struct  m5::imu::AxisOrder
 Chip-frame-to-body-frame axis remap: a permutation plus a per-output-axis sign flip. More...
 

Namespaces

namespace  m5
 Top level namespace of M5Stack.
 

Enumerations

enum class  m5::imu::AxisPermutation : uint8_t {
  XYZ , XZY , YXZ , YZX ,
  ZXY , ZYX
}
 Which raw axis feeds each output slot, read left-to-right. More...
 

Functions

const uint8_t * m5::imu::axis_permutation_indices (const AxisPermutation p)
 Source-axis index feeding each output slot, for a given permutation.
 
AxisPermutation m5::imu::permutation_from_indices (const uint8_t(&p)[3])
 Map a source-axis index triplet back to an AxisPermutation.
 
AxisOrder m5::imu::compose (const AxisOrder &first, const AxisOrder &second)
 Compose two axis orders into one.
 

Detailed Description

Per-source axis permutation and inversion applied to raw-to-physical IMU samples.

Enumeration Type Documentation

◆ AxisPermutation

enum class m5::imu::AxisPermutation : uint8_t
strong

Which raw axis feeds each output slot, read left-to-right.

e.g. YXZ means output[0] = raw Y, output[1] = raw X, output[2] = raw Z.

Enumerator
XYZ 

Identity: output = (X, Y, Z)

XZY 

output = (X, Z, Y)

YXZ 

output = (Y, X, Z)

YZX 

output = (Y, Z, X)

ZXY 

output = (Z, X, Y)

ZYX 

output = (Z, Y, X)

Function Documentation

◆ axis_permutation_indices()

const uint8_t * m5::imu::axis_permutation_indices ( const AxisPermutation p)
inline

Source-axis index feeding each output slot, for a given permutation.

Parameters
pPermutation
Returns
Pointer to a static 3-element array: out[i] = src[result[i]]

◆ compose()

AxisOrder m5::imu::compose ( const AxisOrder & first,
const AxisOrder & second )
inline

Compose two axis orders into one.

Parameters
firstAxis order applied first
secondAxis order applied second
Returns
An AxisOrder R such that R.apply(v) == second.apply(first.apply(v)) for every v

AxisOrder is a signed axis permutation, so the composition is itself an AxisOrder (no information is lost). Used by AhrsController to fold a global user axis order onto each source's fixed board correction without applying two transforms per sample.

◆ permutation_from_indices()

AxisPermutation m5::imu::permutation_from_indices ( const uint8_t(&) p[3])
inline

Map a source-axis index triplet back to an AxisPermutation.

Parameters
p3-element array holding a permutation of {0,1,2} (out[i] = src[p[i]])
Returns
The matching AxisPermutation; AxisPermutation::XYZ if p is not a valid permutation