@Muhammad_Anees, my experience with the BNO086 IMU is so far limited to accessing orientation data for the X and Y axises. So far I have not considered the Z axis nor the magnetometer. I’m using the Sparkfun_BNO08x_Arduino_Library with the ‘enableGameRotationvector’, which seemed to have faster access receiving data from the IMU. I’m using i2C for communicating with the IMU from a (Sparkfun) ESP32 microcontroller. The IMU update interval runs on the approximate average of 3 milliseconds. Looking at the timing on my o’scope, the timing varies considerable around 2 msecs to 5 msecs. In a previous post was a comment to use the SPI (instead of I2C), due to SPI being a faster communications protocol and possible operates at a more consistent frequency; I’m planning to check that out. I’m currently building (yet another) quadcopter (QC) board/frame for a single axis test fixture. I’ve moved on from the brushed 8520 motors to brushless Velox V2306 2550KV motors and AM32 4 in 1 ESCs.
Related to your comments about the ‘spikes’ in the fusion angles, are accessing the IMU data using interrupts? When I first tested the BNO086 IMU without interrupts, there was definitely inconsistent data. There was a comment in the Sparkfun Arduino library code that running without the interrupt was not a good idea and that is how it turned out. I haven’t used Raspberry Pi for accessing ‘real-time’ data. What is frequency that your control loop for accessing data from the BNO055? Also is the access at a consistent time interval?