Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.
Repository Summary
| Checkout URI | https://github.com/lazytatzv/libbno055-linux.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-08-04 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Packages
| Name | Version |
|---|---|
| libbno055_linux | 1.9.0 |
README
libbno055-linux
A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

Components
| Component | Description |
|---|---|
| Hardware Driver | C++17 I2C/UART driver for the BNO055. Handles initialization, sensor reads, calibration, and transport recovery. |
| ROS 2 Package | Composable and Lifecycle nodes publishing sensor_msgs/Imu, sensor_msgs/MagneticField, and diagnostics. |
| Python Bindings |
pip install libbno055-linux → import libbno055
|
| Rust Crate | cargo add libbno055 |
| C API | Stable C99 FFI interface (bno055_c.h) |
| Heading Controller | Optional PID-based straight-line correction for differential-drive robots. See docs/HEADING_CONTROL.md. |
Quick Start
ROS 2 — IMU Driver Node
ros2 launch libbno055_linux bno055_launch.py
Published topics:
-
/imu/data—sensor_msgs/Imu(quaternion, angular velocity, linear acceleration) -
/imu/mag—sensor_msgs/MagneticField -
/diagnostics—diagnostic_msgs/DiagnosticArray
For Nav2 Lifecycle Manager:
ros2 launch libbno055_linux bno055_launch.py node_type:=lifecycle
C++17
#include "libbno055-linux/bno055.hpp"
bno055lib::BNO055 imu(0x28, "/dev/i2c-1");
imu.begin(bno055lib::OpMode::NDOF);
auto quat = imu.getQuaternionNoexcept();
if (quat) {
// quat->w, quat->x, quat->y, quat->z
}
Python
Note: The pip package name and the Python module name differ. Install:
pip install libbno055-linux— Import:import libbno055
pip install libbno055-linux
import libbno055
imu = libbno055.BNO055(address=0x28, device="/dev/i2c-1")
imu.begin(libbno055.OpMode.NDOF)
q = imu.get_quaternion()
Rust
cargo add libbno055
Driver Features
Hardware Driver (C++17)
- I2C and UART transport backends with POSIX drivers
- Automatic transport recovery on bus errors and communication failures
- 18-byte sequential burst read for Accel + Mag + Gyro in a single transaction
- Stale Data Deduplication Filter — eliminates duplicate frame publishing in ROS 2
- Configurable sensor output data rates in AMG mode (up to Accel 1 kHz / Gyro 2 kHz ODR)
- Optional background polling thread for continuous non-blocking reads
- Calibration management — save and load sensor offsets to/from file
Empirical Benchmark (RDK X5 Hardware Validation)
Tested out-of-the-box on RDK X5 (Sunrise RDK) via standard Linux /dev/i2c-5 interface with zero tuning or custom OS setup:
File truncated at 100 lines see the full file
CONTRIBUTING
Contributing to libbno055-linux
First off, thank you for considering contributing to libbno055-linux!
Setting up your Development Environment
- Clone the repository:
git clone https://github.com/lazytatzv/libbno055-linux.git
cd libbno055-linux
-
Install CMake and a C++17 compiler:
- On Ubuntu:
sudo apt install build-essential cmake
- On Ubuntu:
- Build the project:
mkdir build && cd build
cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
make
- Run tests:
ctest --output-on-failure
Pull Request Process
- Update the README.md or docs with details of changes to the interface if applicable.
- Make sure all tests pass locally. If you add new functionality, please add a test for it!
- Format your code using
clang-formatand check withclang-tidy(configs are provided in the repo). - Create a Pull Request against the
mainbranch.
Reporting Bugs
Please use the provided Bug Report template in the Issues tab. Ensure you include:
- OS Version
- BNO055 wiring / hardware setup
- Library version (or git commit)
- Minimal reproducible example
Suggesting Enhancements
Please use the Feature Request template in the Issues tab and provide as much detail as possible about why the feature is needed and how it should work.