Orientation Estimation — Hello World

November 28, 2025


Goals

  • Spin up an IMU-based Orientation Estimator and a Simulation Tool

  • Demonstrate (Basic) Orientation Estimation

System

  • Bosch BNO085 IMU (Digital Twin)

Metrics

  • Convergence rate

  • Steady-state error

  • Drift rate

Tests (Motions)

  • Stationary

  • Sinusoidal

  • Step Response

IMU Model and Simulation Tool

I ordered an Adafruit 9-DOF Orientation IMU (Inertial Measurement Unit) Fusion Breakout board to use as a hardware platform for (basic) State Estimation development. This breakout board provides raw gyro/accelerometer/magnetometer measurements, and it also provides a (quaternion) orientation estimate signal. The latter will be useful to compare with the custom Estimators that I am writing.

While waiting for the parts, I spun up a simple IMU simulation / Digital Twin — this enables Test Driven Development of the major Math & Software components of the State Estimator. The following effects are currently included in the simulated gyro and accelerometer signals:

  • noise std deviation (using Bosch IMU datasheet)

  • bias random walk (ChatGPT)

  • bias instability (ChatGPT)

The Bosch IMU datasheet doesn’t provide values for the Bias effects, so I will need to experimentally characterize the sensor when I have the hardware testbed set up.

The above Figures demonstrate the behavior of the Simulated IMU at rest (no motion).

Orientation Estimator — Performance at Rest

I implemented a basic Orientation Estimator — i.e. a component that takes raw IMU gyro and accelerometer measurements as inputs and outputs estimates of the Orientation/Rotation of the IMU Frame with respect to an Inertial/World Frame.

This section demonstrates the behavior of the Estimator in simulation of an IMU at rest (motionless), as observed in three separate experiments. The performance metrics of interest are the Roll and Pitch accuracy (we want the estimate to be as close as possible to the actual, which is zero degrees in this case). We expect Yaw behavior to drift due to unobservability.

Experiment 1 (leftmost Figure) demonstrates the Estimator’s baseline Roll/Pitch accuracy. Experiment 2 (middle) demonstrates convergence from an erroneous initial guess for Roll of 1 radian (~ 60 degrees). And Experiment 3 (right) demonstrates Yaw drift — mostly just for illustrative / macroscopic behavior purposes.

Orientation Estimation — Performance in Roll Motion

This section demonstrates Estimator performance for Sinusoidal (left) and step-response (right) motions in the Roll degree of freedom. Performance during movement (acceleration) seems to be within 2 degrees, while steady state-error is a bit worse at around 5 degrees. Both seem reasonable for the scope of this initial foray into simulated Orientation Estimation.

It will be interesting to see the performance of this Estimator on hardware, and to compare it with the performance of the built-in estimator provided in the Bosch BNO085 board.