Go Down

Topic: BNO-055 Breakout- full calibration freezes sensor (Read 2718 times) previous topic - next topic

tuskiomi

Hello, all!
I am using a breakout from adafruit for the BNO-055.
everything in the Raw Data sketch goes well until the system is fully calibrated, at which point the sketch makes the arduino print out
Quote
X: -0.06 Y: -0.06 Z: -0.06      CALIBRATION: Sys=3 Gyro=3 Accel=3 Mag=3
X: -0.06 Y: -0.06 Z: -0.06      CALIBRATION: Sys=3 Gyro=3 Accel=3 Mag=3
constantly, no matter the orientation. The sketch also runs considerably slower, only printing 2 times a second as oppose to the regular ~5 times a second. It is important to note that I am using the arduino Due.
Any thought on why the sensor freezes at full calibration and doesn't give the correct data?

couka

Please include your code directly in the post, using [­code][­/code] tags.


lg, couka
youtube.com/DieBastler1234
Don't send me technical questions via PM. They will be deleted unanswered.

raschemmel

#2
May 30, 2016, 08:57 pm Last Edit: May 30, 2016, 09:04 pm by raschemmel
Did you do all this : ?
Quote
Gyroscope: The device must be standing still in any position
Magnetometer: In the past 'figure 8' motions were required in 3 dimensions, but with recent
devices fast magnetic compensation takes place with sufficient normal movement of the device
Accelerometer: The BNO055 must be placed in 6 standing positions for +X, -X, +Y, -Y, +Z and -
Z. This is the most onerous sensor to calibrate, but the best solution to generate the calibration
data is to find a block of wood or similar object, and place the sensor on each of the 6 'faces' of
the block, which will help to maintain sensor alignment during the calibration process. You
should still be able to get reasonable quality data from the BNO055, however, even if the
accelerometer isn't entirely or perfectly calibrated.
  
The most reliable way to resolve this issue is simply open a support ticket on the Adafruit Support forum. It will take a day or two for them to respond but they answer all the tickets. I have used it and they would be more likely to know what the problem is. I suspect it is "operator error" but no doubt you will swear up and down you did everything correctly so I'll let Adafruit address that issue.
Arduino UNOs, Pro-Minis, ATMega328, ATtiny85, LCDs, MCP4162, keypads,<br />DS18B20s,74c922,nRF24L01, RS232, SD card, RC fixed wing, quadcopter

tuskiomi

#3
May 30, 2016, 09:06 pm Last Edit: May 30, 2016, 09:11 pm by tuskiomi
Please include your code directly in the post, using [­code][­/code] tags.


lg, couka
(it looks like code tags don't work on this board, but I know you guys hate clicking external links, so here it is anyway)
as linked in the OP, code:
[­code]#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

/* This driver reads raw data from the BNO055
 Connections
 ===========
 Connect SCL to analog 5
 Connect SDA to analog 4
 Connect VDD to 3.3V DC
 Connect GROUND to common ground
 History
 =======
 2015/MAR/03  - First release (KTOWN)
*/

/* Set the delay between fresh samples */
#define BNO055_SAMPLERATE_DELAY_MS (100)

Adafruit_BNO055 bno = Adafruit_BNO055();

/**************************************************************************/
/*
  Arduino setup function (automatically called at startup)
*/
/**************************************************************************/
void setup(void)
{
Serial.begin(9600);
Serial.println("Orientation Sensor Raw Data Test"); Serial.println("");

/* Initialise the sensor */
if(!bno.begin())
{
  /* There was a problem detecting the BNO055 ... check your connections */
  Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
  while(1);
}

delay(1000);

/* Display the current temperature */
int8_t temp = bno.getTemp();
Serial.print("Current Temperature: ");
Serial.print(temp);
Serial.println(" C");
Serial.println("");

bno.setExtCrystalUse(true);

Serial.println("Calibration status values: 0=uncalibrated, 3=fully calibrated");
}

/**************************************************************************/
/*
  Arduino loop function, called once 'setup' is complete (your own code
  should go here)
*/
/**************************************************************************/
void loop(void)
{
// Possible vector values can be:
// - VECTOR_ACCELEROMETER - m/s^2
// - VECTOR_MAGNETOMETER  - uT
// - VECTOR_GYROSCOPE     - rad/s
// - VECTOR_EULER         - degrees
// - VECTOR_LINEARACCEL   - m/s^2
// - VECTOR_GRAVITY       - m/s^2
imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);

/* Display the floating point data */
Serial.print("X: ");
Serial.print(euler.x());
Serial.print(" Y: ");
Serial.print(euler.y());
Serial.print(" Z: ");
Serial.print(euler.z());
Serial.print("\t\t");

/*
// Quaternion data
imu::Quaternion quat = bno.getQuat();
Serial.print("qW: ");
Serial.print(quat.w(), 4);
Serial.print(" qX: ");
Serial.print(quat.y(), 4);
Serial.print(" qY: ");
Serial.print(quat.x(), 4);
Serial.print(" qZ: ");
Serial.print(quat.z(), 4);
Serial.print("\t\t");
*/

/* Display calibration status for each sensor. */
uint8_t system, gyro, accel, mag = 0;
bno.getCalibration(&system, &gyro, &accel, &mag);
Serial.print("CALIBRATION: Sys=");
Serial.print(system, DEC);
Serial.print(" Gyro=");
Serial.print(gyro, DEC);
Serial.print(" Accel=");
Serial.print(accel, DEC);
Serial.print(" Mag=");
Serial.println(mag, DEC);

delay(BNO055_SAMPLERATE_DELAY_MS);
}[­/code]



Did you do all this : ?
The most reliable way to resolve this issue is simply open a support ticket on the Adafruit Support forum. It will take a day or two for them to respond but they answer all the tickets. I have used it and they would be more likely to know what the problem is. I suspect it is "operator error" but no doubt you will swear up and down you did everything correctly so I'll let Adafruit address that issue.
Figure 8-ing the sensor is what jams it.

raschemmel

#4
May 30, 2016, 09:09 pm Last Edit: May 30, 2016, 09:13 pm by raschemmel
Quote
Figure 8-ing the sensor is what jams it
Quote
Magnetometer: In the past 'figure 8' motions were required in 3 dimensions, but with recent
devices fast magnetic compensation takes place with sufficient normal movement of the device
 
Describe EXACTLY how you did that .


Quote
Another thing to be aware of is that until the sensor calibrates it has a relative orientation output (i.e.
orientation will be relative to where the sensor was when it powered on).
A system status value of '0' in NDOF mode means that the device has not yet found the 'north pole',
and orientation values will be relative not absolute. Once calibration and setup is complete (system
status > '0') the heading will jump to an absolute value since the BNO has found magnetic north (the
system calibration status jumps to 1 or higher). See the Device Calibration page in this learning guide
for further details 
bno055-absolute-orientation-sensor.pdf
Arduino UNOs, Pro-Minis, ATMega328, ATtiny85, LCDs, MCP4162, keypads,<br />DS18B20s,74c922,nRF24L01, RS232, SD card, RC fixed wing, quadcopter

tuskiomi

#5
May 30, 2016, 09:13 pm Last Edit: May 30, 2016, 09:20 pm by tuskiomi
Describe EXACTLY how you did that .

^moving the sensor along a path that looks like that from the top

raschemmel

#6
May 30, 2016, 09:16 pm Last Edit: May 30, 2016, 09:18 pm by raschemmel
Quote
moving the sensor along a path that looks like that from the top
Quote
Magnetometer: In the past 'figure 8' motions were required in 3 dimensions, but with recent
devices fast magnetic compensation takes place with sufficient normal movement of the device
I would interpret that as meaning 3 figure 8s, one in X axis, one in Y axis and one in Z axis but actually that is very open to interpretation.(like which way  is X ? which way is Y? and which way is Z ?)
Arduino UNOs, Pro-Minis, ATMega328, ATtiny85, LCDs, MCP4162, keypads,<br />DS18B20s,74c922,nRF24L01, RS232, SD card, RC fixed wing, quadcopter

tuskiomi


tuskiomi

new discoveries:
when the sensor dies, the arduino aquires a high-frequency whine.
also, I tried disconnecting the VCC line (+3.3V) while not calibrated, and it will print out the same thing.I'm going to check the connections to the chip

raschemmel

Quote
new discoveries:
when the sensor dies, the arduino aquires a high-frequency whine.
also, I tried disconnecting the VCC line (+3.3V) while not calibrated, and it will print out the same thing.I'm going to check the connections to the chip
Is it possible to use it without calibrating it or does it report all zeros ?
Arduino UNOs, Pro-Minis, ATMega328, ATtiny85, LCDs, MCP4162, keypads,<br />DS18B20s,74c922,nRF24L01, RS232, SD card, RC fixed wing, quadcopter

tuskiomi

Is it possible to use it without calibrating it or does it report all zeros ?
the data sheet says that it is always calibrating, so I cannot, sadly :-(

couka

(it looks like code tags don't work on this board, but I know you guys hate clicking external links, so here it is anyway)
They do, but you probably copied my [­code][­/code] tags, which are written in a way that avoids them getting interpreted. Otherwise you couldn't see them ;)

You can either write them by hand, or use the </>-Button.

lg, couka
youtube.com/DieBastler1234
Don't send me technical questions via PM. They will be deleted unanswered.

raschemmel

Just highlight the code and click the button and then save.
Arduino UNOs, Pro-Minis, ATMega328, ATtiny85, LCDs, MCP4162, keypads,<br />DS18B20s,74c922,nRF24L01, RS232, SD card, RC fixed wing, quadcopter

tuskiomi


raschemmel

Quote
It was a connection issue. solved. 
Would you care to elaborate for the benefit of others who may have similar issues or are you simply saying you screwed up when wiring it ?
Arduino UNOs, Pro-Minis, ATMega328, ATtiny85, LCDs, MCP4162, keypads,<br />DS18B20s,74c922,nRF24L01, RS232, SD card, RC fixed wing, quadcopter

Go Up