I'm using the BNO055 in fusion mode to detect pan (yaw) and tilt (pitch). Calibration is OK and also loading the calibration results at startup (in config mode) seems to be fine. The pitch readout is from 0 to 65535 and the 0 value is when levelled. That seems to be OK too.
However, the direction of the pitch seems to be dependent on the position of the sensor when powering on. As the sensor leans forward at boottime, then pitch direction and range are different as when the sensors leans backwards at boottime. I added 2 images to make clear what exactly happens.
It is not 100% reproducable, but this problem makes it difficult(in fact: impossible) to use the BNO055 sensor to read tilt values.
Thanks very much for your reply.
Indeed better use quaterion values iso Euler angles in this setup. I read the quaternion values now (w,x,y,z) and convert them back to angles. However, the reference frame (for both pitch and yaw) still depends on the position of the sensor when powering up. When I look at the raw values (w,x,y,z) they really change when I consider a fixed position. The values depend on the postion the sensor has when it gets powered.
How come the reference frame depends on the startup position, even when reading/using quaterion values? For yaw the zero point is moved 180 degrees (opposite).
The yaw range I get is also not the range as specified: yaw is -180 .. 180 at my site, not 0..360
Thanks again, hoping I get this sensor working as supposed.
Thanks for staying with me 😉
I'll try to explain what problem I'm experiencing. To start with, the problem exists when using both Euler angles and Quaternion output.
I seem so suffer from 2 different orientation frames that result in different signs for pitch and roll and result in a different origin for yaw. I did lots of exeriments and can conclude that there are (only) 2 different orientation frames. Which frame the sensor decides to choose (at startup) is not clear and seems random. My use case is a followspot, mounted on a treepod (see picture of first post). Pan (yaw) and Tilt (pitch) are the 2 planes I'm interested in, but I observe roll as well.
1) orientation frame 1: I power my system (including BNO0555) and observe the signs of pitch and roll when I'm tilting and rolling my spot. Leaning backwards result in negative pitch angles. Leaning forward results in positive pitch angles. Rolling to the left results in negative roll angles, rolling to the right results in positive roll angles. The zero degrees of my yaw is in front of my spot
2) orientation frame 2: I power my system (including BNO0555) and again observe the signs of pitch and roll when I'm tilting and rolling my spot. Leaning backwards result in positive pitch angles. Leaning forward results in negative pitch angles. Rolling to the left results in positve roll angles, rolling to the right results in negative roll angles. The zero degrees of my yaw is behind my spot
I have no control wich orientation frame the BNO055 is using, it seems random at startup.It does use abslote orientation since the range is OK and angles are comparable (they change in sign only). I have no clue why the BNO055 changes its reference frame at startup. I went through the datasheet forward and backward, but cannot find any clue.
The last action seems to give me an important clue. I mentioned that the signs of the axis differ. That is exactly what I configure in the last step: the sign of the pitch and roll axis. I write this 0x06 value to the proper register and read it back for verification. Verification never fails. But.... writing something different then 0x00 to that register, results in unpredicted behaviour: the signs for pitch and roll seem random, resulting in either orientation frame 1 or 2. If I write 0x00 to this register (or leave the default 0x00 as is), then my orientation frame is always the same at startup and my problem is fixed.
After many more experiments, I can conclude that writing anything else then 0x00 to the 'AXIS_MAP_SIGN_ADDRESS' (0x42) results in random signing of the pitch and roll axis and it changes the 0 degrees of the yaw plane (180 degrees opposite).
Am I doing something wrong here? Is this some kind of known bug?