01-11-2024 01:51 AM
Hi I had a few questions about using quaternions and orientation with the BHI360 and BMM350.
The data sheet mentions that the BMM Sensor should be oriented with the pin 1 marker rotated 180 degrees relative to the BHI360:
However the BHI360 shuttle board has the sensor orientated with a 0 degree offset:
Does this matter for 9 DOF orientation and rotation vector?
Are other rotations valid?
01-16-2024 07:08 AM
Hi JAS,
The coordinates of BHI360 and BMM350 have been mapped to the target coordinates shown on the board, and you do not need to modify the mapping on the host side.
This is the coordinate configuration in the firmware:
16,i2c0,20,20, 1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, 400.000000, 0 #BMM350Mag on M2
26,spi0,25,2, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 800.000000, 0 #BHI360Accel on SPI0
25,spi0,25,-, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 800.000000, 0 #BHI360Gyro on SPI0
01-16-2024 08:15 AM
Thank you. So just confirming, for quaternions, sensor orientation does not matter if you configure the orientation matrix correctly.
I have made a custom PCB, that does not match the orientation of the devboard/firmware.
Is the solution to change the orientation matrix in runtime (as per 13.3.2.7)
Is there anything else I need to worry about?
05-30-2024 08:02 AM
Hi JAS,
If you use a customer PCB, you can also modify the axis mapping on the host side.
struct bhy2_orient_matrix acc_matrix = {0, -1, 0, -1, 0, 0, 0, 0, -1};
struct bhy2_orient_matrix gyro_matrix = {0, -1, 0, -1, 0, 0, 0, 0, -1};
struct bhy2_orient_matrix mag_matrix = {0, 1, 0, -1, 0, 0, 0, 0, 1};
rslt = bhy2_set_orientation_matrix(BHY2_PHYS_SENSOR_ID_ACCELEROMETER, acc_matrix, &bhy2dev);
print_api_error(rslt, &bhy2dev);
rslt = bhy2_set_orientation_matrix(BHY2_PHYS_SENSOR_ID_GYROSCOPE, gyro_matrix, &bhy2dev);
print_api_error(rslt, &bhy2dev);
rslt = bhy2_set_orientation_matrix(BHY2_PHYS_SENSOR_ID_MAGNETOMETER, mag_matrix, &bhy2dev);
print_api_error(rslt, &bhy2dev);