We are not necessarily planning on using 9-DOF (or even magnetometer) in our current devices, but I would like clarification and assurance that our understanding of their setup is correct. I'd greatly appreciate you review this process and point out any mistakes ijn our understanding.
If we ever want 9-DOF with all the bells and whistles, we’ll need to
Does this make sense? Have we got the right idea? We're especially not sure about step 4 and 5, and whether there is a way the Bosch sensors can be instantly remapped that can replace the steps. Or do I always have to provide a means to perform a calibration step after installation so that we can convert the yaw, pitch and roll in ENU space to yaw, pitch and roll in system space?
Thanks for your inquiry. Sorry for the late response.
I am not sure about your application. But the process for BHI160B + BMM150 should be like below,
1. Design your own PCB so that BHI160B x/y/z are aligned with BMM150 x/y/z which means that they are orthogonal.
2. Install your PCB into your casing where you define your casing X/Y/Z body axes and make sure sensors' x/y/z are parallel to X/Y/Z axes.
3. Determine the axis remapping matrix for accel, gyro and mag with respect to casing X/Y/Z axes.
4. Input the remapping matrix to BHI160B every time after it is powered on.
5. BHI160B + BMM150 9DOF sensor fusion ENU is with respect to the casing body Y axis. As long as the axis remapping matrix are correct the sensor fusion results such as Euler angles, rotation vector, etc. from BHI160B + BMM!50 9DOF should be always correct for ENU.
6. In your MCU firmware you can always check the sensor calibration status. There are two bits for accel, gyro and mag respectively. 0b00 means that sensor is not calibrated. 0b01 and 0b10 mean that sensor is being calibrated. 0b03 means that sensor is fully calibrated and ready to go. Therefore, your MCU knows if the accel, or gyro, or mag needs to be calibrated or not. If yes, then your system can notify the user to perform figure-8 motion to calibrate the mag for example.
7. Repeat step 6.