EECE 5554 Robotics Sensing and Navigation  /  Interactive demo

IMU noise and Allan variance

A gyroscope sitting still should read zero, and it doesn’t. This page simulates a gyro at rest with the noise terms you choose, computes its Allan deviation the way Lab 3 does, and shows where to read the angle random walk and bias instability off the plot.

Runs allan_gyro.pyLab 3
Starting...

Gyro noise you set

Angle random walk N
Bias instability B
Rate random walk K

Recording

Like Lab 3: the IMU sits still, and you compute the Allan deviation of the gyro rate.

Red: Allan deviation of the simulated recording. Dashed: the noise terms you set, each with its own slope.

The first 60 seconds of the recording. It should read zero, and it doesn’t.

How to read the plot. N is the value of the slope −1/2 line at τ = 1 s, in deg/hr; divide by 60 to get deg/√hr. B is the flat bottom divided by 0.664. K is the value of the slope +1/2 line at τ = 3 s; multiply by 60 to get deg/hr/√hr. The read values are a little off from what you set because each term adds to the others and a short recording is noisy at long τ.

Try this

  1. Start with the defaults and find the two circled points: N on the slope −1/2 line at τ = 1 s, and B at the flat bottom. Compare them with the values you set.
  2. Set B to 0. The curve keeps falling with slope −1/2: pure white noise averages away forever.
  3. Raise K to about 100. A +1/2 tail appears on the right and lifts the bottom of the curve: past that point, averaging longer makes things worse, not better.
  4. Switch between 30 minutes and 2 hours. A longer recording reaches longer τ and makes the right side of the curve less noisy.

Notebook

Work with the same script in cells, like Jupyter, right here in the browser. Edit any cell and run it. Nothing is saved: Reset brings a cell back, and Download .ipynb keeps your edited version for VS Code or Jupyter.

Loading Python...
The Python script: allan_gyro.py

This is the script the page runs. Run it yourself with python3 allan_gyro.py.

allan_gyro.py