BNO085 or BNO080 IMU

Sorry forgot the pic Screenshot_20201210-221440

Saw this in one of your earlier posts, couldn’t figure out how to reply with the pic in reply

Could that be something electrical affecting it or is re calibration on? I’ve not tested a CMPS14. I’ve got the Adafruit BNO085 breakout.

With the magnetometer on, I once had my lights pull the heading way off course. I have the magnetometer off now. Not tested it properly but nothing seems to bother it now.

I have been driving it around a fair bit. This is completely different software, but the cmps14 has proven rock solid so far.

https://www.youtube.com/watch?v=8HZ4DnVfWYQ

1 Like

Oops, wrong video - but it is still pretty interesting as well…

https://www.youtube.com/watch?v=ePNxMK8fYgk

1 Like

Hello,

Here is my edited version fo Autosteer_USB_4.3.10.ino to use BNO08x with AOG.
It’s based on previous code posted, but with some improvement in the .ino and in the Sparkfun Library:

  • I add in the library the possibility to plot the current calibration configuration
  • When we enable a BNO08x report, the BNO08x respond with a report to confirm the correct activation of the report: I add functions to retrieve this report and check if the report is correctly enable

The code is available in the following zip (I would see later to put it on GitHub): https://1drv.ms/u/s!At0hnqbQtv42pVtYpDwNU0x2fiqq?e=oexJXw
All edited line are identified with a comment starting by “Edited by Math”, so you can easily found the edited lines.

The code let you choose if you want to use BNO08x instead of MMA, or instead BNO055 or instead of both (so you can easily switch from one module to the orther if you want to make comparativ test). So at the begining of code you have a config zone with:

  • BNO08x_ADRESS: adresse of the BNO, 0x4A for Adafruit BNO085 board, 0x4B for Sparkfun BNO080 board
  • USE_BNO08X_ROLL: set to 1, it will force the .INO to use the BNO08x for roll instead of MMA/DOGS2 (regardless of the Inclinometer you have choose in AOG module configuration page)
  • USE_BNO08X_HEADING: set to 1, it will force the .INO to use the BNO08x for heading instead of BNO055 (regardless if BNO is selected or not in AOG module configuration page)
  • REPORT_INTERVAL: if you want to change report interval of the Rotation Vector report, for advanced users
  • ENABLE_GYRO_CAL: set to 1 if you want to enable the background gyroscope calibration. By default background calibration is enable only for magnetometer and accelerometer. If you set this parameter to 1, during the setup, the Arduino will check the BNO08x background calibration enable and print it to the serial port, so with a serial consol you can check if the calibration are correctly enable

Even if you choose to use BNO08x for roll, in the AOG module configuation page you can still choose the inclinometer axis: the MMA axis selection, will change the BNO08x axis use for roll. If you need to inverse roll value for BNO08x, you just have to activate “invert roll” in AOG module configuration page.

The code is made so that, if we want to add BNO08x as an official alternativ of MMA/BNO055, I can be easily edited to treat BNO08x as additionnal option (we just have to define the corrsponding value for aogSettings.BNOInstalled and aogSettings.InclinometerInstalled).

Tested in my test bench it’s work. I will test it in one week on the tractor and I hop it will solve the difficulty I encounter with MMA: Perfect straight line without MMA, slight oscillation with MMA

Math

2 Likes

Finally have the BNO080 and the CMPS14 on the same board with a nano. So guess which one is the clear winner? (The line should be straight like the blue one. )

Screenshot_1

Another pic.

Screenshot_3

The blue is probably the CMPS14, if it follows what you have been testing earlier. Too bad I have already got the BNO085 before this :frowning:
But what exactly did you do with the board, while performing this test ?
Hope there is a way to make the BNO perform better.

1 Like

The roll seems to take off as you rotate the board - like steering. But oddly it takes a while to settle back to where it should be at 0 again. The roll follows each other with noisy and rapid movement etc. It responds very quickly.

On a development forum such as this a little more information would be good. If that is roll then something is set up wrong. I tested the BNO085 on the bench with very very violent horizontal movements on a flat plane and roll didn’t move one tiny bit. Neither did yaw, if I slid the sensor sharply back and forth along a fixed straight edge.

Not sure what your testing involved there but something seems wrong.

They are basically both the same sensor, with the same Hillcrest firmware after all.

I may be wrong but, given the basically identical price point I would guess all that the cmps14 has extra is i2c conversion to standard protocol and maybe a standard setup that serves it’s target usage to the detriment of flexibility.

I would be leaving background calibration turned off. In the tractor with it turned on I got basically exactly the same problem that the BNO055 has. Drift after calibration.

Why nobody want to try UFSMAX?
Reading their articles it is looks like they did great job.
Drift can be eliminated only by the calibration.
So they implement dynamic calibration.
I had ordered 2 pcs, but it will take around a month to delivery to Europe.

What evidence are you basing that on?

1 Like

The CMPS is calibrated in a special jig. something we just can not do accurately at home. Andreas experienced this as well. I was testing the BNO080 from sparkfun, not the 085. I have ordered the 085 as well, may as well try everything we can. I have spent a ridiculous amount of time with testing IMU’s so i kind of know how to make them show their insecurities. They are all hobby devices and the goal is to find the least crappy. :slight_smile:

Both sensors were read at the exact same time mounted on the same board, merged code. The library is HUGE for the bno080 and the 085 library (according to AdaFruit) is too big to fit on the atmel 328, this is also a problem, whereas the CMPS requirement is a about 300 bytes.

I don’t think the imu always pointing north is critical with AOG. All we really need is something that has a stable roll and fairly consistent heading to smooth out the single antenna GPS heading. In fact a stable accel/gyro is all we really need like in commercial units but at a much lower cost. The random drift and problems of the BNO055 made it especially useless.

3 Likes

Looking forward to hear how it works!

Isn’t the sparkfun BNO080 library pretty small? It’s compatible with the 085 also. Will definitely run on a 328.

The sparkfun library works absolutely fine with the 328.

Hello,

@BrianTee_Admin, very interesting results. If I understand well, you obtain this by translating BNO080 on a flat surface (following x and y axis) and rotation aroung Z axis ?
Your BNO080 was calibrated following Hillcrest procedure with Sparkfun calibration code ?

Few weeks ago, I log data from my comparativ board with MMA, BNO085 and BNO055 when driving my car. Board was positionned, such as roll measurement from BNO085 and MMA correspond to the pitch of the car. Here the result of the first log:
Figure0

In zooming on roll measurement, we saw that I perhaps catch the same phenomen that you show before. By example where I put some marks. We can see:

  • A pic variation from MMA and BNO085 roll
  • A pic variation from BNO085 pitch
  • This corelated to heading variation.
    I didn’t pay attention to that before because I add the same measurement on MMA and BNO085. As I’ve no other references I cannot check if it’s a real car movement or not. So I suppose if both catch them, it’s a real measurement.
    Figure1

But: when I do this measurement, BNO085 was not calibrated (because I never obtain a good calibration status). I could why I add this and @Alan.Webb doesn’t see this phenomen.
And: I don’t understand why I will also happen on MMA measurement ?

@Alan.Webb Thank for your answer, I will try angain calibration on BNO085.

I will also add the possibility to disable calibration in my code. What sort of problem do you encournter ? Drifting ? When I look on my log, I cannot see drifting of roll between MMA and BNO (background calibration for acc and magn was enable).

Agree with that. Not easy job, lot of test to do, and we never had a reference to compare the measurement.

BNO08x has an output report call “Game Rotation Vector”, thas output yaw/pitch/roll without the use of magnetometer (so heading is not referenced to north). Perhaps we shall use this mode ?
Do you know if there is an equivalent with CPMS ?

Math

I saw the classic BNO055 type yaw drift despite heading in a straight line, or standing still. With the 055 it would nearly always work fine for a while then randomly start drifting for no apparent reason. An issue when it re-calibrated I assume.

I’m hoping to get out and do some more testing in the next few days.