User Tools

Site Tools


Sensor fusion


The aim of this project is to learn sensor fusion algorithms and implement them on ARM microcontroller.


GY-80 is a cheap sensor board. Available on Ebay and DealExtreme.

Board feature 4 sensors providing in total 10-dimensional information.

Sensor Description I2C Address (8bit)
L3G4200D ST three-axis digital output gyroscope 0x69
ADXL345 3axis Digital Accelerometer 0x53
HMC5883L Honeywell Three-Axis Digital Compass 0x1E
BMP085 Bosh Digital Pressure Sensor 0x77

Project assumptions

The purpose of this project is to provide sensor fusion solution using low-cost sensor board.

Phase I

  • Build a I2C ↔ PClink
  • Set up sensors
  • Read data periodically
  • Plot the data

<html> <?xml version=“1.0” encoding=“UTF-8” standalone=“no”?> <!– Created with Inkscape ( –>


Launchpad connections

  • Serial transmission parameters: 115200 8N1
1.1 GY-80 VCC_3.3V
1.10 GY-80 SDA
1.9 GY-80 SCL

Source code



  • Scaling is being adjusted in real time, shake sensor board to set maximum values so graph can be scaled to fit the window.
  • Keys 1 to - turn on/off plotting value
  • Key c clears the window

Phase II

  • Implement 1D Kalman filter



  • Key k - toggles filtered graph
  • Key m - toggles measured value

Source code

Phase III

  • 2D Sensor fusion

Following graph show angle measurement using accelerometer (red) and gyroscope (blue). Gyro clearly shows error-induced drift.

Complementary filter

<html> <?xml version=“1.0” encoding=“UTF-8” standalone=“no”?>


Complementary filter is a good alternative for small systems.



  • Red - Complementary
  • Green - Kalman

While both methods provided unbiased value, the Kalman filter provided more stable readout. Present-day MCUs provide sufficient power to use Kalman filter in real-time.

Phase IV

  • Build balancing robot.


The robot consists of 5 parts: Tamiya gearbox, double H-bridge driver, Bluetooth wireless module, Stellaris launchpad board and GY-80 sensor board. The power is provided externally.

GY-80 board provides accelerometer and gyro sensor measurement at 100 [Hz] (UPS variable). Sensor data is then processed by kalman filter and feed into PI controller. Control signal is driving PWM output driving motors H bridges.


  • The stability is good but not perfect
  • Kalman filter response was rally bad. I have boosted the response by multiplying angular acceleration value. Estimated angle value has overshot now but is fast enough.
  • Robot motors are powered externally. Wires are influencing robot stability.
  • Taller robot would be much better (bigger moment of inertia).
  • Both robot wheels are independent. Connected wheels would work much better reducing yaw.

Source code

Robot operation. Red - accelerometer angle. Green - Gyro angular acceleration. Blue - estimated angle. Yellow - PI control signal.


projects/gy-80.txt · Last modified: 2013/03/04 22:13 by mkucia