How do you find the BNO055 based IMU


I’m curious how people are finding the BNO055 device? I’m having difficult keeping the thing calibrated - it’s solid once it is calibrated, but it doesn’t seem to be able to keep that going for long. Anyone have any experience with this?

OpenRov IMU/Compass/Depth module using Arduino

For me I sometimes have issues too, especially with the yaw (i believe) and the compass. After a fresh magnetic calibration the compass is pretty accurate and is an excellent navigation guide on a dive. However, i can only trust its values for a couple of minutes, until i try to refresh it with a magnetic signal. This however is not trivial as I often use the heading and depth hold which has to be turned off for a new magnetic calibration.

This however is a big issue for any Inertial Navigation Systems. Over time its accuracy is greatly reduced by the cumulative measurement fault. The OpenROV is able to recalibrate the compass with the earth natural magnetic field. I usually try to update the compass every couple of minutes and I use a smartphone app for a clean orientation for myself. For me this works for the yaw/heading orientation. I do not yet use the other figures too much.

Regarding this context i was wondering what exactly is the difference when the variable CALIB_MAG is 1 or 2?


Have you noticed any correlation between it loosing calibration and what’s going on at the time? As for what the 1, 2 and 3 numbers mean, the only hint I’ve gotten from reading their developer notes is that 2 and 3 are pretty safe, but otherwise not.

In my case, 'Im using my own hardware, so I have many things that could be problematic. I noticed today that turning the lights on made it lose calibration … which is a bit odd. On the plus side it’s regular as clockwork so should make debugging easier. Might be a power or decoupling thing.


During thruster operation the motors induce such strong magnetic fields, that the sensor cannot draw sufficient data from the magnetic sensor and therefore approximates the current yaws through the gyrosensor in the BNO055. This process however is not accurate due to the cumulative measurement error. That is why the OpenROV refreshes the compass after the thruster have not been used for a couple of seconds. I know that a 2 states that the currently shown compass is pulled from the earth magnetic field and therefore is sufficiently accurate.

I would not think that the lights actually influence the magnetic fields around the ROV but it might be possible. You could check different operational condition with an external magnetic sensor (smartphone app). Test whether there are any changes during thrusting, using lights etc.


@tim_wilkinson having seen your monster ROV, I was not surprised at all when you said the IMU lost calibration when you turned the lights on, haha. Having that IMU anywhere near your power distribution board or any DC current-carrying wires makes detecting Earth’s magnetic field like trying to make out a whisper in a rock concert. You are also bound to lose calibration any time you attempt to drive the motors. Even the 2.x series faces these same challenges, especially since it is so small with all wires, power components, and sensors close together.

We have been doing a lot of research and troubleshooting with the IMU and how to use it on a small ROV, and have learned quite a lot in the process. On Sunday I’ll do an extensive writeup here to both give some insight into what kind of tricky situations the IMU can be placed in and how you can mitigate for them, the limitations of the sensors (both hardware and software), and what our plans are for the future in terms of making them more robust to harsh (magnetic) conditions.


@charlesdc I look forward to reading your experiences - I admit i was hoping you folks would have the most practical experience with this thing (the Internet has been lacking).

The 12V rail which powers the lights does run close to the chip - but not so close that I thought it’d be an issue, though clearly it is (i’ve eliminated most of everything else this morning). I wonder how far away is safe?

In the meantime, I’m going to place an addition IMU in the forward compartment (which holds the cameras) and see how it does.


Is it maybe just that the huge current draw from the motors or lights causes a momentary dip in voltage, below the level at which the IMU resets?


We have seen this phenomenon with normal needle compasses as well.


I checked that, and attaching the lights to a different point on the board didn’t cause the problem (but meant I couldn’t switch them on and off).


Update: So looking at my PCB, it turns out that this part of the board has a very shoddily designed GND plane which is not particularly well connected to the rest of the GND plane. I just fixed that with a jumper wire, and now the lights don’t cause the IMU to reset.