10#ifndef M5_UNIT_IMU_IMU_AXIS_ORDER_HPP
11#define M5_UNIT_IMU_IMU_AXIS_ORDER_HPP
53 inline void apply(
float (&v)[3])
const
55 const float src[3] = {v[0], v[1], v[2]};
57 case AxisPermutation::XYZ:
62 case AxisPermutation::XZY:
67 case AxisPermutation::YXZ:
72 case AxisPermutation::YZX:
77 case AxisPermutation::ZXY:
82 case AxisPermutation::ZYX:
107 static const uint8_t table[6][3] = {
115 return table[
static_cast<uint8_t
>(p)];
125 const uint8_t code =
static_cast<uint8_t
>((p[0] << 4) | (p[1] << 2) | p[2]);
127 case (0 << 4) | (1 << 2) | 2:
128 return AxisPermutation::XYZ;
129 case (0 << 4) | (2 << 2) | 1:
130 return AxisPermutation::XZY;
131 case (1 << 4) | (0 << 2) | 2:
132 return AxisPermutation::YXZ;
133 case (1 << 4) | (2 << 2) | 0:
134 return AxisPermutation::YZX;
135 case (2 << 4) | (0 << 2) | 1:
136 return AxisPermutation::ZXY;
137 case (2 << 4) | (1 << 2) | 0:
138 return AxisPermutation::ZYX;
140 return AxisPermutation::XYZ;
162 for (
int i = 0; i < 3; ++i) {
164 inv_c[i] = inv_b[i] != inv_a[pb[i]];
AxisOrder compose(const AxisOrder &first, const AxisOrder &second)
Compose two axis orders into one.
Definition axis_order.hpp:153
AxisPermutation permutation_from_indices(const uint8_t(&p)[3])
Map a source-axis index triplet back to an AxisPermutation.
Definition axis_order.hpp:123
const uint8_t * axis_permutation_indices(const AxisPermutation p)
Source-axis index feeding each output slot, for a given permutation.
Definition axis_order.hpp:105
AxisPermutation
Which raw axis feeds each output slot, read left-to-right.
Definition axis_order.hpp:23
@ XYZ
Identity: output = (X, Y, Z)
Top level namespace of M5Stack.
Definition ahrs_controller.cpp:26
Chip-frame-to-body-frame axis remap: a permutation plus a per-output-axis sign flip.
Definition axis_order.hpp:43
bool invert_y
Negate output Y after permutation.
Definition axis_order.hpp:46
AxisPermutation permutation
Axis permutation.
Definition axis_order.hpp:44
bool invert_z
Negate output Z after permutation.
Definition axis_order.hpp:47
void apply(float(&v)[3]) const
Apply this permutation and sign flip to a physical-unit XYZ triplet, in place.
Definition axis_order.hpp:53
bool invert_x
Negate output X after permutation.
Definition axis_order.hpp:45