06-23-2023 09:13 AM
I have BHI260AP+BMM150 but could not get the orienation mapping matrix correct. At present, both heading and pitch (from euler format) are 180 degrees off.
I have attached the target coordinate and sensor placement as below.
The matrix I use for BHI260 is (0,-1, 0,-1, 0, 0, 0, 0,-1)
for BMM150 it is (1, 0, 0, 0, 1, 0, 0, 0, 1)
Am I wrong in those?
06-23-2023 05:48 PM
Hi zkz,
Your matrix for BHI260 and BMM150 are correct.
What is about the firmware and software code you used?
06-25-2023 01:19 PM
Thanks BSTRobin.
I build the firmware myself using the SDK from https://www.bosch-sensortec.com/products/smart-sensors/bhi260ap/#software
I took the reference cfg: Bosch_APP30_SHUTTLE_BHI260_aux_BMM150.cfg, and changed the physical sensor section as below:
#Physical Drivers
#DriverID,Bus,Addr,GPIO,Cal0,Cal1,Cal2,Cal3,Cal4,Cal5,Cal6,Cal7,Cal8,Off0,Off1,Off2,maxRate,Range
32,spi0,25,2, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0, 800.000000, 0 #BHI260Accel
33,spi0,25,-, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0, 800.000000, 0 #BHI260Gyro
24,spi0,25,-, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 50.000000, 0 #BMM150Mag_aux
Then I rebuild the firmware by: ./build.sh Bosch_APP30_SHUTTLE_BHI260_aux_BMM150
I use bhy2_parse_orientation() to parse sensor data into heading, pitch and roll, and found the 180 degrees offsets.
I dig into this a bit further. When I read the orientation matrices in my host code via bhy2_get_orientation_matrix() call, the matrices are different from what I put in cfg.
For accel and gyro, I got: 0 1 0 -1 0 0 0 0 1
For magnet, I got: 1 0 0 0 -1 0 0 0 -1
I don't know where these matrix values are from. Are there some default values? Why the values in cfg does not take effect?
06-26-2023 02:22 AM
Thanks BSTRobin for confirming the matrices.
I built the firmware myself by using the SDK from https://www.bosch-sensortec.com/products/smart-sensors/bhi260ap/#software
I changed the cfg file: Bosch_APP30_SHUTTLE_BHI260_aux_BMM150.cfg, updating the matrices as below:
#Physical Drivers
#DriverID,Bus,Addr,GPIO,Cal0,Cal1,Cal2,Cal3,Cal4,Cal5,Cal6,Cal7,Cal8,Off0,Off1,Off2,maxRate,Range
32,spi0,25,2, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0, 800.000000, 0 #BHI260Accel
33,spi0,25,-, 0,-1, 0,-1, 0, 0, 0, 0,-1, 0, 0, 0, 800.000000, 0 #BHI260Gyro
24,spi0,25,-, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 50.000000, 0 #BMM150Mag_aux
Then I rebuilt the firmware via: ./build.sh Bosch_APP30_SHUTTLE_BHI260_aux_BMM150
In the host code, I use bhy2_parse_orientation() to get the heading, pitch and roll.
Actually, I found the issue seems to be the matrices in cfg file do not take effect.
I printed out the matrices via bhy2_get_orientation_matrix() and they are different from those in cfg file.
If I call bhy2_set_orientation_matrix() in the host code to set all three sensors, the result looks ok.
So the question is why orientation matrices in cfg do not have effect?
07-06-2023 04:28 PM
Hi zkz,
You can use the existed fw on GitHub first to test for any issues you may encounter.