Voting resources, early voting, and poll worker information - VOTE. ... Adafruit is open and shipping.

BNO055 Noise characterization
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

BNO055 Noise characterization

by karthikkamabam on Thu Aug 17, 2017 10:01 am


I don't see noise characterization provided for the sensor anywhere in the manual both by Bosch and Adafruit.
By noise characterization, I mean at what noise frequencies are usually present in device output/ its probability distribution, mean and variance if the noise is assumed to be
gaussian in nature etc. I would greatly appreciate this data for accelerometer mainly since it seems to be the most affected by noise. Please help.

Karthik Kambam

Posts: 1
Joined: Thu Aug 17, 2017 9:51 am

Re: BNO055 Noise characterization

by gammaburst on Sat Aug 19, 2017 5:53 pm

Here's 32 seconds of accelerometer, gyro, and magnetometer data from a BNO055 in NDOF mode. I twirled it around a few times, set it down on a table, oriented it approximately north, and acquired the data. I acquired one sensor at a time, not all three at once. You can study the data in a math program.

BNO055 noise
32 seconds of BNO055 acc/gyr/mag data
(38.88 KiB) Downloaded 52 times

I see a low-amplitude 20 Hz signal in the accelerometer Z-axis. I don't know what's causing it. I tried changing the sensor orientation, I tried minimizing ambient vibration, and I tried another BNO055, but the Z-axis signal persisted. The magnetometer update rate is also 20 Hz, coincidence?

I didn't acquire any fusion data because the BNO055 fusion algorithm does some kind of noise suppression. When the sensor is motionless, the fusion data doesn't change.

Here's my Arduino Uno sketch that acquired the data:

Code: Select all | TOGGLE FULL SIZE
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>


Adafruit_BNO055 bno = Adafruit_BNO055(55);

unsigned long tnext, tnow;

void setup(void)
  tnext = millis() + 103;

void loop(void)
  Serial.print("t ");  Serial.print(0.001*millis(),3);  Serial.print(" ");

  imu::Vector<3> acc = bno.getVector(Adafruit_BNO055::VECTOR_ACCELEROMETER);  Serial.print("Acc ");  Serial.print(acc(0),4);  Serial.print(" "); Serial.print(acc(1),4);  Serial.print(" "); Serial.println(acc(2),4);  // meters/sec/sec
//imu::Vector<3> gyr = bno.getVector(Adafruit_BNO055::VECTOR_GYROSCOPE);      Serial.print("Gyr ");  Serial.print(gyr(0),4);  Serial.print(" "); Serial.print(gyr(1),4);  Serial.print(" "); Serial.println(gyr(2),4);  // degrees/sec
//imu::Vector<3> mag = bno.getVector(Adafruit_BNO055::VECTOR_MAGNETOMETER);   Serial.print("Mag ");  Serial.print(mag(0),4);  Serial.print(" "); Serial.print(mag(1),4);  Serial.print(" "); Serial.println(mag(2),4);  // microteslas

  tnow = millis();
  delay(tnext - tnow);

Posts: 486
Joined: Thu Dec 31, 2015 12:06 pm

Please be positive and constructive with your questions and comments.