BNO055 Operation Mode & Euler Head Bias

Dear All,
I am working on a marine application of model surface vessel in which the 9-axis BNO055 is useful for attitude determination and eventual linear acc evaluation (to be later on completed with GPS Kalman Filtering). I have some doubts not clear in forums:

  1. Is the default mode the NDOF?

  2. In the default mode are the Euler Angles referred to north?

(in my case did not, neither after some time.. leading to the 1st doubt)

  1. Does anybody observe drift in the Euler Angle heading (supposing it rotated to refer to nord across magnetometers at initial time?)?

In my case Euler heading drifts a lot in time: hence again leading to the doubt 1.. Shouldn't the fusion process unbias measurments across Mag in combination with GYRO? In my tests the Euler heading result much much more similar to a trapeze integration than a fusion.

In figure below:

Mag Heading in blue,

Euler heading (manually initialized to Mag heading) in orange,

external GPS course over ground in black (confirming MAG)

brutal trapeze integration of gyro rate (very similar to Euler) in red

Some sailing and turning

I tested two different IMU on two different vessels, leading to the same qualitative conclusions.

The calibration of GYRO and ACC is executed in lab and stored in order to be reloaded, while MAG are calibrated all start up.

Finally: I heard the about the euler mismatch with quaternions of the BNO055 library, but just when tilting the IMU. Does it affect also heading fusion?
Regards

My setup: Arduino Mega 2560
Libraries:
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

The BNO055 does not work very well, partly due to the poor job of calibrating the magnetometer and the accelerometer. Here are some operational tests that show the problems: BNO055 Possible use in +/- 1.0 deg pointing system - adafruit industries

If you are serious about navigation with Arduino, there are much better sensors and software. I recommend RTImulib, with one implementation described here: https://forum.pololu.com/t/state-of-the-art-ahrs-for-25/8091

Or use the Madgwick or Mahoney code described here:9 DoF Motion Sensor Bakeoff · kriswiner/MPU6050 Wiki · GitHub but using the MPU9250 IMU, which has a magnetometer.

Be sure to calibrate your magnetometer properly, in the vehicle where it will be used, as described here: Tutorial: How to calibrate a compass (and accelerometer) with Arduino | Underwater Arduino Data Loggers