<div dir="ltr">Murray,<div> The "fusion" of the sensors is the Kalman filter (or the secret sauce). The difference between imu and ndof modes is that the magnetometer is added to the gyroscope and accelerometer sensors. It is the magnetometer that needs to be waved in the air. The gyroscope and accelerometer will self-calibrate after a short period of time. To calibrate any magnetometer, you have to wave it a bit (for example an iphone). The big advantage of the BNO055 is the low drift of the gyroscope (due in part to the internal Kalman filter). </div><div><br></div><div>Regards,</div><div>Doug P.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, May 14, 2020 at 5:04 PM Murray Altheim <<a href="mailto:murray18@altheim.com">murray18@altheim.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Doug,<br>
<br>
I believe the NDOF mode is the default for the device. By IMU mode I'm assuming<br>
you mean "IMUPLUS":<br>
<br>
OPERATION_MODE_IMUPLUS 0x08 Inertial Measurement Unit (Accelerometer and Gyroscope Sensor Fusion Mode)<br>
OPERATION_MODE_NDOF 0x0C 9 Degrees of Freedom Sensor Fusion<br>
<br>
The difference seems to be that the NDOF mode additionally "fuses" the other<br>
sensors into an improved measurement using some kind of Bosch secret sauce.<br>
The IMU mode uses only the accelerometer and gyroscope. I tried to locate any<br>
mention of the Kalman filters in the docs but couldn't. I dug around a bit on<br>
Kalman filters, which to my understanding reads a series of measurements over<br>
time and applies a filter to remove outliers and noise. That would seem to be<br>
particularly helpful for a small robot.<br>
<br>
One of the things I don't like about the BNO055 (though I understand the why)<br>
is that in order to get its calibration pin to set 'true' one has to wave the<br>
robot in the air for awhile. A guy wanted to mount one on his motorcycle, so<br>
this wasn't an option for him. My take is to have the sensor available on my<br>
I2C bus and have it send an event when it finally (due to the robot's motion)<br>
manages to get calibrated. But in practice this is difficult because my robot<br>
operates largely in 2D (the floor) so it never gets that Z axis motion that<br>
seems necessary for calibration. As has been noted, the BNO055 has a habit of<br>
falling in and out of calibration as well, which I've noted.<br>
<br>
I'm guessing that an accelerometer doesn't need calibration, maybe a gyroscope<br>
doesn't either (?), so David A's usage, though he gets drift, probably doesn't<br>
require him to pick up his robot and dance around with it. Though I guess that<br>
could be entertaining to the cat...<br>
<br>
I've collected some of my notes (including the complete table of modes) onto a<br>
wiki page at:<br>
<br>
BNO055 Absolute Orientation Sensor<br>
<a href="https://service.robots.org.nz/wiki/Wiki.jsp?page=BNO055AbsoluteOrientationSensor" rel="noreferrer" target="_blank">https://service.robots.org.nz/wiki/Wiki.jsp?page=BNO055AbsoluteOrientationSensor</a><br>
<br>
Cheers,<br>
<br>
Murray<br>
<br>
On 15/05/20 1:00 am, Doug Paradis wrote:<br>
> Murray,<br>
> Make sure you have the BNO055 in the right operation mode. I like the "imu" mode for indoor robots which outputs the results of an internal Kalman filter using the gyroscope and .accelerometer. It sounds like you want to run in "ndof" <br>
> mode. As I have stated before, accurate magnetometer readings indoors on a mobile robot that will be operating in different locations is going to problematic due to non-constant hard iron distortions. You might find this link informative, <br>
> <a href="https://www.vectornav.com/support/library/magnetometer" rel="noreferrer" target="_blank">https://www.vectornav.com/support/library/magnetometer</a>.<br>
> <br>
> Regards,<br>
> Doug P.<br>
> <br>
> On Thu, May 14, 2020 at 5:55 AM Murray Altheim via DPRGlist <<a href="mailto:dprglist@lists.dprg.org" target="_blank">dprglist@lists.dprg.org</a> <mailto:<a href="mailto:dprglist@lists.dprg.org" target="_blank">dprglist@lists.dprg.org</a>>> wrote:<br>
> <br>
> Hi,<br>
> <br>
> I think we've discussed this subject a bit recently. Here's a few papers I've<br>
> managed to find:<br>
> <br>
> Minimal-Drift Heading Measurement using a MEMS Gyro for Indoor Mobile Robots<br>
> Sung Kyung Hong * and Sungsu Park<br>
> Dept. of Aerospace Engineering, Sejong University, Seoul, 143-747, Korea<br>
> Sensors 2008, 8, 7287-7299; DOI: 10.3390/s8117287 <a href="http://www.mdpi.com/journal/sensors" rel="noreferrer" target="_blank">www.mdpi.com/journal/sensors</a> <<a href="http://www.mdpi.com/journal/sensors" rel="noreferrer" target="_blank">http://www.mdpi.com/journal/sensors</a>><br>
> <a href="https://www.researchgate.net/publication/26551593_Minimal-Drift_Heading_Measurement_using_a_MEMS_Gyro_for_Indoor_Mobile_Robots" rel="noreferrer" target="_blank">https://www.researchgate.net/publication/26551593_Minimal-Drift_Heading_Measurement_using_a_MEMS_Gyro_for_Indoor_Mobile_Robots</a><br>
> <a href="https://www.mdpi.com/1424-8220/8/11/7287/pdf" rel="noreferrer" target="_blank">https://www.mdpi.com/1424-8220/8/11/7287/pdf</a><br>
> <br>
> Indoor Mobile Robot Heading Detection Using MEMS Gyro North Finding Approach<br>
> November 2011, DOI: 10.7746/jkros.2011.6.4.334<br>
> Yuan-Long Wei, Min Cheol Lee, Chi yen Kim<br>
> <a href="https://www.researchgate.net/publication/271336529_Indoor_Mobile_Robot_Heading_Detection_Using_MEMS_Gyro_North_Finding_Approach" rel="noreferrer" target="_blank">https://www.researchgate.net/publication/271336529_Indoor_Mobile_Robot_Heading_Detection_Using_MEMS_Gyro_North_Finding_Approach</a><br>
> <br>
> Using Inertial Sensors for Position and Orientation Estimation<br>
> Manon Kok, Jeroen D. Hol and Thomas B. Schön (2017),<br>
> Foundations and Trends in Signal Processing: Vol. 11: No. 1-2, pp 1-153.<br>
> <a href="http://dx.doi.org/10.1561/2000000094" rel="noreferrer" target="_blank">http://dx.doi.org/10.1561/2000000094</a><br>
> <br>
> Pose Estimation of a Mobile Robot Based on Fusion of IMU Data and Vision<br>
> Data Using an Extended Kalman Filter<br>
> Mary B. Alatise and Gerhard P. Hancke<br>
> <a href="https://www.mdpi.com/1424-8220/17/10/2164" rel="noreferrer" target="_blank">https://www.mdpi.com/1424-8220/17/10/2164</a><br>
> <br>
> though the latter is a bit beyond what I'm looking for. There's a *lot* of<br>
> articles on MDPI's website. I'm also happy to have found the Sensors journal.<br>
> <br>
> What would be nicer than digging around for an algorithm would be a Python<br>
> library that could give me a compass heading from a gyroscope (and possibly<br>
> an accelerometer) measurement. I tried writing my own using just a<br>
> magnetometer and had limited success (but then again I gave up too early).<br>
> <br>
> At this point I've got six (!) different boards (BNO055, LSM9DS1,<br>
> LSM6DSOX, LISMDL, ICM20948, LSM303D) that all do similar things but all<br>
> seem to have issues and while the BNO055 does most everything, it seems<br>
> to have the most issues, like not being particularly compatible with a<br>
> Raspberry Pi (as one). All I *really* want is an accurate compass heading<br>
> for an indoor robot (therefore no GPS). Pie in the sky?<br>
> <br>
> On a lighter note, my cat scanner now works pretty well. I'll hopefully<br>
> post a video to my YouTube channel sometime soon.<br>
> <br>
> Cheers,<br>
> <br>
> Murray<br>
> <br>
> ...........................................................................<br>
> Murray Altheim <murray18 at altheim dot com> = = ===<br>
> <a href="http://www.altheim.com/murray/" rel="noreferrer" target="_blank">http://www.altheim.com/murray/</a> === ===<br>
> = = ===<br>
> In the evening<br>
> The rice leaves in the garden<br>
> Rustle in the autumn wind<br>
> That blows through my reed hut.<br>
> -- Minamoto no Tsunenobu<br>
> <br>
> _______________________________________________<br>
> DPRGlist mailing list<br>
> <a href="mailto:DPRGlist@lists.dprg.org" target="_blank">DPRGlist@lists.dprg.org</a> <mailto:<a href="mailto:DPRGlist@lists.dprg.org" target="_blank">DPRGlist@lists.dprg.org</a>><br>
> <a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" rel="noreferrer" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br>
> <br>
<br>
-- <br>
<br>
...........................................................................<br>
Murray Altheim <murray18 at altheim dot com> = = ===<br>
<a href="http://www.altheim.com/murray/" rel="noreferrer" target="_blank">http://www.altheim.com/murray/</a> === ===<br>
= = ===<br>
In the evening<br>
The rice leaves in the garden<br>
Rustle in the autumn wind<br>
That blows through my reed hut.<br>
-- Minamoto no Tsunenobu<br>
<br>
</blockquote></div>