BNO086 - Explanation and detailed info for readings please?

Hi,

I would appreciate if someone could please explain the various readings provided by the BNO086 library in more detail. I have gone through the hookup guide, tried most of the library examples and did read all BNO086 related posts, but still there are some ??? in my head.

So far I think I figured this out:

  1. enableRotationVector()
    1. absolute rotation of the IMU in space, using magnetometer + gyroscope + accelerometer
    2. absolute = it does not matter in which rotation the device is turned on, orientation will always stay the same, e.g. North is North
    3. provides rotation in either Quaternions or Vector3 (roll, pitch, yaw)
    4. problem: gets inaccurate with close magnetic fields, plus at least I get a deviation of around 0-20 degress when turning the devices 360 degrees around itself once.
  2. enableGyroIntegratedRotationVector()
    1. relative rotation of the IMU in space, using gyroscope + accelerometer (but not the magnetic orientation)
    2. relative = in whatever rotation the IMU is turned on, this is rotation zero.
    3. provides rotation in Quaternions or angle velocity in Vector3
    4. Magentometer is not involved, therefore the rotation will be less errorprone to magnetic interference… is it faster? is it more accurate? (need further testings)

And then there are readings like

  1. enableGameRotationVector() (I’ve read it should give faster readings, but more precise?)
  2. enableARVRStabilizedRotationVector()
  3. enableARVRStabilizedGameRotationVector

What is it good for, advantages, disadvantages.. ? (E.g. it is mentioned in this thread that GameRotationVector is faster, but what does it mean by “its faster”?)

Also, when testing enableARVRStabilizedGameRotationVector I tried using getRoll(), getPitch() and getYaw() to get Euler Angles (as there are no methods like “getARVR…Vector”, and it seems to me that the readings are independent from magnetometer. So I assume that via roll pitch yaw I get the proper readings here?

  1. I assume that all readings are provided as Quaternions, but with roll pitch yaw its always possible to access those readings as Euler Angles, no matter what kind of report is set. Is that assumption correct? (With other words, to roll pitch yaw always report the current readings set?)

All in all I think it would be great to have such an overview in the hookup guide along with the examples, like “For use case X use readings Y because Z..”

The best, most complete and reliable source of information is the very extensive BNO086 data sheet. Have you gone through that?

I assume that all readings are provided as Quaternions, but with roll pitch yaw its always possible to access those readings as Euler Angles

The quaternion is the basic entity that contains the orientation information. It can be converted into Euler angles at any time, except for special circumstances where the angles become indeterminate. Do a web search for “gimbal lock” to learn when and why.

Keep in mind that there are many different definitions for Euler angles, and that the order of applying the three rotations matters a great deal. They are also limited in range of application, which is why most people use the quaternion instead.

1 Like