Skip to content

The ROS Driver for the IMU Sensor Bosch BNO055

A BNO055 is a single-chip inertial measurement unit (IMU) sensor created by Bosch. It’s a small SMT component, so for development purposes, it has been prepared a board with this module – Adafruit BNO055. It supports both I2C and UART interfaces, so it can be easily connected with the computer using a USB-UART converter (for example, this one).

What is the IMU?

Inertial Measurement Unit (IMU) is a device that measures the accelerations, angular velocities and in case of some devices, the orientation of the object. It consists of the accelerometer, the gyroscope, optionally magnetometer, and some kind of processing unit, for example to filter raw data from the sensors. It can have a form of completely integrated device in one small MEMS (Micro-Electro-Mechanical System) packaging, like in case of Bosch BNO055. But it can also be a bigger device that consists of separate sensors.

ROS driver

Some time ago, I have created a simple, open-source ROS driver for the BNO055 IMU in Python. It’s available on GitHub repository mdrwiega/bosh_imu_driver. The ROS (Robotic Operating System) is a framework intended mostly for the creation and integration of robotics systems. Therefore, the main target applications of the driver are robotics systems. The ROS driver works only with the sensor connected by the UART interface. To switch BNO055 module mode to serial UART, it’s necessary to connect the PS1 pin to VCC (by default I2C mode is enabled).

The ROS driver creates a separate node that has some parameters like USB port name, frequency, or operating mode. Depending on the selected mode, it publishes raw data from the accelerometer, gyroscope, and thermometer but also estimates 3D orientation. More details can be found in repository description.


The ROS driver was tested during the experiments with different IMU sensors, especially the Advanced Navigation Orientus device, Sparkfun Razor device, and Bosch BNO055. All sensors have been placed on the same aluminium plate that has been mounted on the small, four-wheeled mobile robot. Then, sensors were connected to a Raspberry Pi single-board computer. Moreover, the robot has been equipped with reflective markers used by a motion capture system. The optical motion capture system has been used as a reference (ground truth) system to compare results from different IMU sensors. Measurements from sensors (captured by Raspberry Pi) and from the motion capture system have been received on the external computer through the ROS ecosystem and stored for further analysis.

Robot with IMU

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.