Giter VIP home page Giter VIP logo

ros_bno055's Introduction

ros_bno055

A ROS package containing a Linux hardware driver for Adafruit's BNO055 9-DoF Orientation Sensor Breakout and a ROS node wrapper that exposes the sensor driver to the ROS ecosystem.

Overview

The hardware driver for the BNO055 sensor is ROS-agnostic, meaning it provides a clean functional Linux interface to the sensor that can be used on any Linux system independent of ROS. The driver utilizes System Management Bus (SMBus), which is derived from the I2C serial bus protocol, for communication between the sensor and the OS. Additionally, the ROS node simply wraps around the driver and connects the sensor data to ROS topics.

Prerequisites

Software

  • Ubuntu 16.04 (Xenial)
  • ROS Kinetic

Hardware

  • Adafruit's BNO055 Absolute Orientation Sensor

Installation

Install from Git Repository

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone --single-branch --branch kinetic-devel https://github.com/joeyjyyang/ros_bno055.git
cd .. 
sudo apt-get install -y
sudo apt-get install libi2c-dev # for I2C SMBUS functions
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
catkin_make # catkin build ros_bno055 (if using catkin_tools)
source devel/setup.bash
rospack profile

Setup

Calibration

Nodes

  • bno055_node

Topics

  • /imu/data
  • /imu/magnetic_field
  • /imu/temperature
  • /imu/orientation_euler
  • /imu/gravity

Usage

Example

roslaunch ros_bno055 bno055_imu.launch

Notes

Raspberry Pi I2C Clock Stretching (Bug)

Adafruit's BNO055 sensor utilizes I2C clock stretching to function correctly; however, there is an existing hardware bug within the Raspberry Pi (all versions and models) that prevents the hardware I2C from supporting the clock stretching functionality. As a result, there are 2 possible workarounds to choose from:

  1. Enabling and using the software I2C driver on the Raspberry Pi, as it does support I2C clock stretching: https://github.com/fivdi/i2c-bus/blob/master/doc/raspberry-pi-software-i2c.md
  • Note: if using method 1. above (enabling and using the software I2C driver on the Raspberry Pi), ensure that the I2C_BUS constant in src/bno_driver.cpp is set to /dev/i2c-3, instead of the default /dev/i2c-1.
  1. Slowing down the I2C clock on the Raspberry Pi by reducing the baudrate: https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/i2c-clock-stretching

Contact

ros_bno055's People

Contributors

joeyjyyang avatar jyang-cpr avatar hidethedandi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.