Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
jazzy

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
kilted

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
lyrical

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro rolling showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.
No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Repo symbol

libbno055_linux repository

libbno055_linux

ROS Distro
humble

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

Build & Test License: MIT C++ Standard ROS 2 Version

A C++17 driver for the Bosch BNO055 9-axis IMU on Linux, with first-class ROS 2 integration.

BNO055 Visual Dashboard


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-linuximport 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/datasensor_msgs/Imu (quaternion, angular velocity, linear acceleration)
  • /imu/magsensor_msgs/MagneticField
  • /diagnosticsdiagnostic_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

  1. Clone the repository:
   git clone https://github.com/lazytatzv/libbno055-linux.git
   cd libbno055-linux
   
  1. Install CMake and a C++17 compiler:
    • On Ubuntu: sudo apt install build-essential cmake
  2. Build the project:
   mkdir build && cd build
   cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON ..
   make
   
  1. Run tests:
   ctest --output-on-failure
   

Pull Request Process

  1. Update the README.md or docs with details of changes to the interface if applicable.
  2. Make sure all tests pass locally. If you add new functionality, please add a test for it!
  3. Format your code using clang-format and check with clang-tidy (configs are provided in the repo).
  4. Create a Pull Request against the main branch.

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.

# Contributing to libbno055-linux First off, thank you for considering contributing to `libbno055-linux`! ## Setting up your Development Environment 1. **Clone the repository**: ```bash git clone https://github.com/lazytatzv/libbno055-linux.git cd libbno055-linux ``` 2. **Install CMake and a C++17 compiler**: - On Ubuntu: `sudo apt install build-essential cmake` 3. **Build the project**: ```bash mkdir build && cd build cmake -DBUILD_TESTING=ON -DENABLE_CLANG_TIDY=ON .. make ``` 4. **Run tests**: ```bash ctest --output-on-failure ``` ## Pull Request Process 1. Update the README.md or docs with details of changes to the interface if applicable. 2. Make sure all tests pass locally. If you add new functionality, please add a test for it! 3. Format your code using `clang-format` and check with `clang-tidy` (configs are provided in the repo). 4. Create a Pull Request against the `main` branch. ## 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.