microReticulumTbeam/exercises/21_six_axis/Discussion.md
2026-04-17 08:49:44 -07:00

6.1 KiB
Raw Blame History

Exercise 21 — Six-Axis IMU Characterization

Overview

Exercise 21 establishes a foundational understanding of the six-axis inertial measurement unit (IMU) on the T-Beam Supreme. The IMU (QMI8658) provides:

  • Accelerometer (X, Y, Z) — measures acceleration, including gravity
  • Gyroscope (X, Y, Z) — measures angular velocity

This exercise focuses on interpreting accelerometer data to determine device orientation relative to gravity.


Objective

The goals of this exercise are:

  1. Demonstrate that IMU outputs are frame-dependent but physically consistent
  2. Show that startup orientation does not define the IMU axes
  3. Compute roll and pitch from raw accelerometer data
  4. Quantify real-world deviations from ideal values
  5. Identify sources of measurement error

Test Setup

Two static orientations of the device were evaluated:

Orientation A — Sideways

Device resting on its side (edge of AlleyCat case)

Sideways Orientation

Measured accelerometer values:


Ax = -0.951
Ay = -0.043
Az = -0.003


Orientation B — Upright

Device standing upright (antenna vertical)

Upright Orientation

Measured accelerometer values:


Ax =  0.028
Ay =  0.987
Az =  0.012


Methodology

Roll and pitch were computed using standard inertial navigation formulas:


roll  = atan2(Az, Ay)
pitch = atan2(-Ax, sqrt(Ay² + Az²))

These equations derive orientation from the gravity vector projection onto the sensor axes.


Implementation

A Perl script was used to compute roll and pitch:


scripts/imu_roll_pitch_demo.pl

This script:

  • Accepts predefined accelerometer values
  • Computes roll and pitch in radians and degrees
  • Uses Perls built-in atan2() for accurate quadrant handling

Results

Sideways Orientation


roll  = -176.009°
pitch =  87.405°

Interpretation:

  • Pitch ≈ 90° → confirms device is rotated onto its side
  • Roll near ±180° is expected due to sign conventions when vertical

Upright Orientation


roll  =  0.697°
pitch = -1.625°

Interpretation:

  • Both values near 0° → device is nearly level
  • Small deviations indicate real-world imperfections

Key Findings

1. IMU Axes Are Fixed

The IMU coordinate system is defined by the sensor hardware and PCB layout:

  • It does not change at startup
  • It is independent of how the device is oriented when powered on

2. Orientation Is Derived from Gravity

The accelerometer measures the gravity vector:

  • Different orientations produce different raw values
  • The underlying physics is consistent

3. Roll and Pitch Are Orientation-Invariant

While raw values differ between orientations:

  • Computed roll/pitch reflect true physical orientation
  • Results are consistent regardless of startup pose

4. Coordinate Mapping

From the observed accelerometer data:

  • Upright orientation: +Y_sensor ≈ UP
  • Sideways orientation: -X_sensor ≈ UP (after 90° rotation)

We define a device coordinate system aligned with the AlleyCat enclosure:

  • Z_device = UP (antenna direction)
  • Y_device = FORWARD (normal to display, pointing outward)
  • X_device = RIGHT (along the long axis of the display)

Mapping from sensor frame to device frame:

Z_device = +Y_sensor

The remaining axes are determined by physical orientation and require sign validation:

X_device ≈ +Z_sensor
Y_device ≈ ±X_sensor

Final sign conventions should be verified empirically by observing motion:

  • Rotate device forward/back → affects Y_device
  • Rotate device left/right → affects X_device

This mapping separates:

  • Sensor frame (hardware-defined)
  • Device frame (application-defined)

and provides a consistent basis for roll, pitch, and future magnetometer integration.

Sources of Error

The observed deviations (~12°) are expected and arise from several factors:

Surface Imperfection

  • Table or support surface not perfectly level
  • Enclosure geometry (AlleyCat case) introduces tilt

Sensor Bias (Offset)

  • Example: Ax ≠ 0 when it should be
  • Typical of MEMS sensors

Scale Error

Measured magnitude:


|A| ≈ 0.988 g   (ideal = 1.000 g)

Indicates slight gain inaccuracy.


Axis Misalignment

  • Sensor axes are not perfectly orthogonal
  • Manufacturing tolerances introduce small angular errors

Noise and Quantization

  • Finite precision (3 decimal places)
  • Minor fluctuations expected

Limitations of Exercise 21

This exercise deliberately omits several important elements:

No Absolute Heading

  • Without a magnetometer, yaw (heading) is undefined
  • Only roll and pitch can be determined

No Sensor Fusion

  • Gyroscope data is not integrated
  • No filtering (e.g., complementary or Kalman)

No Calibration

  • Raw sensor values are used directly
  • Bias and scale errors are uncorrected

Static Analysis Only

  • No dynamic motion analysis
  • Gyroscope output not utilized

Significance

Exercise 21 provides a critical baseline:

  • Confirms correct IMU operation
  • Establishes device coordinate frame
  • Demonstrates physical interpretation of accelerometer data
  • Quantifies real-world sensor error

This forms the foundation for:

  • Magnetometer integration (Exercise 22)
  • Tilt-compensated compass
  • Full sensor fusion (AHRS)

Conclusion

The IMU behaves as expected:

  • Raw outputs vary with orientation
  • Derived angles correctly reflect physical pose
  • Measured errors are consistent with typical MEMS performance

Most importantly:

The IMU does not define orientation — it measures vectors.
Orientation is derived through mathematical interpretation of those vectors.


Next Steps

Exercise 22 will extend this work by introducing:

  • Magnetometer (QMC6310)
  • Absolute heading (yaw)
  • Tilt compensation using roll and pitch

References

  • Perl Script: scripts/imu_roll_pitch_demo.pl
  • Images:
    • img/upright_DSC_5194.webp
    • img/sideways_DSC_5195.webp