This repository contains the fximu package. This is the only package you need to install in order to run fximu.


FXIMU utilizes a port of ROS's complementary filter on the TM4C123 MCU using the NXP semiconductor FXOS8700 accelerometer magnetometer and FXAS21002 gyro sensor.

fximu v1c

Documentation Contents

  • QUICKSTART for instructions on how to start the device

  • PARAMETERS for description of parameters

  • CALIBRATION for instructions on calibration. The device comes calibrated, but once you mount it to your application, you might need to recalibrate it.

  • HOWTO on tips on operation

  • EKF about using FXIMU with robot_localization package

  • The firmware code is available at

  • The hardware files are available at


It works with ROS without any problems, does not require drivers, uses standard message types, and is open source.

Sensor data is directly fed to the complementary filter, updated up to 400hz. The filter then queried to get quaternion data at a desired output rate by using a output_rate_divider parameter.

Hardware is configurable using a fximu_params.yaml

Here is example parameters file:

params/imu: {
calibration_mode: 0,
sensor_read_rate: 400, output_rate_divider: 8,
adaptive_gain: 1, bias_estimation: 1,
gain_acc: 0.02, gain_mag: 0.01, bias_alpha: 0.1,
imu_frame_id: "imu_link", mag_frame_id: "imu_link",
gfsr: 2, afsr: 1,
steady_limit: 32,
world_frame: 0,
use_mag: 1,
kAngularVelocityThreshold: 0.06, kAccelerationThreshold: 0.35, kDeltaAngularVelocityThreshold: 0.05,
mag_offset_x: 27.00, mag_offset_y: 78.14, mag_offset_z: 85.36,
mag_soft_iron_ix: 0.987, mag_soft_iron_iy: -0.040, mag_soft_iron_iz: -0.021,
mag_soft_iron_jx: -0.040, mag_soft_iron_jy: 1.006, mag_soft_iron_jz: 0.006,
mag_soft_iron_kx: -0.021, mag_soft_iron_ky: 0.006, mag_soft_iron_kz: 1.009

See Parameters for detailed explanation of each parameter.

The device is equipped with a red and green led. Opon reset, the device will blink green first, then red.

If loading one of the parameters fails for calibration_mode=2 or calibration_mode=3, FXIMU will be disabled, and the red led will blink long.

During normal operation, if ROS connection is active, red led will turn on faintly, depending on your loop speed.

If the device is at steady state, then green led will turn on faintly, indicating that the device is on stationary state.


Roberto G. Valenti for writing the original complementary filter.

Vitor Matos for writing the rosserial tivac library.

Charles Tsai and user cb1_mobile from forums, for help on debugging the problems on sensor chipset.

Melih Karakelle for advice on the development of the circuit.


tr000003 license