Nine Axis Motion Shield

Hello,

I'm looking for general advice using the Nine Axis Motion Shield (or the BNO055).

I am wondering about the calibration. There are four outputs about calibration status for the sensor:

  • ( 0-3) for the accelerometer
  • (0-3) for the mag
  • (0-3) for the gyro
  • (0-3) for the system overall

I'm wanting to use the sensor for an outdoor mobile robot, but I need the data to be as close to absolute as possible. Following their calibration instructions, I can sometimes get the calibration status of all outputs equal to 3, but it seems like most frequently I can get the sensors to 3, but not the overall system. My output will be something like 3, 3, 3, 0 and the reported Euler Angles don't appear relative to true north. At startup the sensor heading angle is reported with respect to the starting orientation, but as calibration occurs the heading angle should converge to true north. The few times I have gotten all outputs to 3, the sensor seems relative to true north to the extent I need it.

The BNO055 documentation says to discard all values where the sensor isn't fully calibrated and I can't really use the values where the sensor is fully calibrated anyway, because this means the location of the "fixed" frame everything is relative to is moving and changing. I can't seem to get the overall system calibration status to 3 the majority of the time. Why might that be the case? What can I do differently to make the calibration more successful? Any suggestions (other than using a better sensor)?

From the documentation, I know the sensor is also continually calibrating. When I do have full calibration it tends to be much less noisy in the values, but I'll often lose full calibration on the overall system (while retaining it on the sensors). I'm also curious if anyone knows what determines the overall calibration status number.

I'm asking the community, because from what I have seen, the documentation for this sensor is terrible.

EDIT WITH FOLLOWUP QUESTIONS:
If my state is 3, 3, 3, 0 does that mean I can trust the values from each of the sensors but none of the Euler data? Does the system calib represent the quality of their sensor fusion or something? Should I just perform my own EKF off the sensor values to get Euler angles relative to north? I'd prefer not to, but if it works I'm open minded.

I don't know what that means, but the BNO055 is an old design, and does not perform very well. The built-in calibration is an undocumented black box, and is probably the least satisfactory aspect of the sensor, because it can actually corrupt the data and you can't turn the calibration off.

For example, see this forum thread investigating the problems with it: https://forums.adafruit.com/viewtopic.php?f=19&t=112315

Any modern 9DOF sensor running the Madgwick or Mahony AHRS algorithm will easily outperform the BNO055, but you need to carefully calibrate all three sensors for acceptable performance.

1 Like

If I moved to a different board, do you have a recommendation for a sensor that will give me reliable heading information?

ICM20948, LSM9DS1, Pololu's MiniIMU v5 are roughly equivalent.

Hi @jremington, Thank you for your response. I also read some of your other comments on a similar post about LSM6DS1. You seem very knowledgeable about the topic. By "absolute" I just mean relative to north and not relative to a startup frame

The only thing I really need is a reliable (within 3 or 4 degrees) estimate of where true/magnetic north is. Everything else is unimportant to me.

My project is an outdoor mobile robot and as I understand it, getting an Euler angle heading with respect to north is one of the main challenges for building these types of robots.

I am now reluctantly looking to replace the shield with another board. I know metal, and EMF strength can mess with the magnetometer. I was able to take some measurements of this around my robot. Directly ontop of the robot I have measurements that are roughly 0.15 microT. About 6 inches above that it drops off to 0.1 microT which Ive found is roughly comparable to being adjacent to my laptop.

Will any of the chips you mentioned directly report an Euler heading angle from its onboard fusion that is accurate to 4-5 degrees if mounted 6 inches above my robot? I'm willing to jump to a slightly higher price range if needed. I just need something relatively plug and play. A reliable compass sensor absent the accelerometer and gyro could also work.

I really dislike the continuous calibration of the BNO055 too, so boards that don't behave like that would be a real pleasure to work with.

Thanks again :slight_smile:

They will all do that, and for heading, all you need to implement is a tilt-compensated compass.

However, for that to be accurate, the magnetometer must be calibrated in place (after mounting on the robot), to remove the effects of nearby magnets, current carrying wires, steel supports, etc.

For all of the sensors listed in post #4, tilt-compensated compass code can be found on my Github page, as well as many other places.

I'm not sure I fully understand what you mean. If those sensors report Euler angles with respect to north is that not already compensating for tilt (pitch/roll)?

Yes, but the additional input of the gyro for the fusion calculation is unneeded in a land vehicle, and mostly noise, which is likely to degrade the accuracy of the heading result derived from the full fusion algorithm.

The function of the gyro in a fusion algorithm is to compensate for the fact that the reference direction "down", which is solely derived from the accelerometer, is distorted by rapid turning motions.

If you have doubts, test both approaches and choose the one that gives the most accurate results in your robot, under typical use conditions.