Please provide your source code here first for double check again.
Also may need you to give us the data log (input to the lib) for at least 20 minutes then we can check the data quality at the same time.
... View more
No, if device on table with no motion, the heading and pitch value should keeps under noise level. 8 degrees are too big and no expected here.
From the data log you put in ticket, i didn't see the deviation and sensor is fully calibrated.
So want to check again the result. Maybe you can take a picture of test environment and log with errors.
... View more
Please let me try to answer your question one by one:
1. BSX lite has fixed ODR. which you already mentioned accl / gyro use 100Hz and magnetic data use 25Hz. and output data rate is fixed as 100Hz.
2. This means BSX lite will not able to work with any other different ODR for input and output. You should always keep same input data rate and output data rate. Otherwise, you will get error code
3. BMI160_ACCEL_BW_OSR_AVG4 is the filter setting. not ODR related. so you can keep ODR as 100Hz but use low noise filter. since the ODR is still 100Hz, the BSX running have no any impact. but increased ODR means increased signal latency. So you heading value output from BSX might be slow than you motion. if you are not in real time application, then it is fine.
4. aux_burst_read_length is used to ask BMI160 to read magnetic sensor data from BMM150 on its secondary interface. On BMX160, the internal structure is BMM150 connect to BMI150 secondary interface. Here I highly recommend you to follow our API to set length as 2 not using 1 instead to make sure you don't loose any data
5. Magnetic sensor ODR is defined by the preset mode. Regular mode can achieve up to 100Hz ODR with big noise. BMM150_PRESETMODE_HIGHACCURACY can only achieve 20Hz which is lower than the BSX lite lib input data rate requirement. So we can't use it. But you can try with enhance regular preset which can achieve up to 60Hz.
6. BSX lib have offset compensation module running inside. the FOC will not impact the performance of BSX lite, but just speed up the calibration of BSX
7. Yes, BSX lite only support BSX_WORKINGMODE_NDOF_GEORV_FMC_OFF mode
8. The remapping is used to align the sensor axis to your system axis. So sensor coordinate system can be unified to system coordinate. Then the BSX output can be directly used for system orientation. how to do remapping or whether it is necessary to do remapping is rely on the HW design how you align sensor axis to your system coordinate.
9. bsx_set_accdatarate is recommend to be called and use the number 9.6.9
10. Since BSX lite only have one working mode, bsx_get_hwdependency is not mandatory to be called. you can also ignore it
11. BSX lib will checking the time stamp for each input data and make sure the jitter is below 15%. So if you time stamp is accurate enough, you can use any time source to do so. The sensor time is quite accurate source, so a lot of people directly use them.
12. for Magnetic data, just make sure you send to lib with 25Hz. You can repeat Mag data to align with accel and gyro as 100Hz, or just keep as input for 25Hz. there is no difference or impact on lib output
13. the magnetic sensor input unit for BSX is uT. bmm150_aux_mag_data API output is also uT, just in float type or int16 type. so no need to multiple by number 16.
14. hard iron was process as offset of magnetic data, so it is done inside BSX. but soft iron is not able to processed by the BSX. you need calculate the SIC matrix and input as a parameters to BSX.
15. Acceleration sensor calibration need to go through all 6 direction to get it calibrated. you can refer to this video:
16. the acceleration calibration status lost is a bug of BSX lite version. In normal BSX full version, after acceleration sensor get calibrated, the level should be kept.
17. Please do align sensor coordinate with your system coordianate first (here means remapping) first. then check the result again.
18. if heading is accurate and drift, then you need to consider the test environment have no big magnetic distortion and also you perform the soft iron matrix correctly.
19. bsx_get_geoheadingaccuracy_rad is used for different working mode, for the current working mode of BSX lite, this function have no meaning.
20. if raw magnetic sensor data is changing quite a lot means your test environment have a lot of distortion source. so the heading value drift is expected and BSX lib is not able to compensate for it.
21. according to your code, overall is fine, but i have one suggestion: for getting the heading deviation, why not directly compare the heading output from orientation data with ground truth or reference sensor? the calculate with raw mag and compensated mag for heading deviation is not too much meaningful here.
22. For bsx_get_orientdata_euler_rad, you just need to take h (heading), p (pitch), r (roll) and status. rest are not really useful. you can ignore it.
... View more
Suppose you have two BME280, and calibrated with same reference sensor.
So those two have same output just after calibration. Thus, all the offset including solder drift are compensated already. Part to part deviation has be compensated here also.
So the sensor read out difference is only includes noise and TCO. If the we also say the environment temperature is all the same for all case we considered.
Then only noise need to be added. if using highest accuracy mode, the noise will be 0.2 *2 = 0.4 Pa around (typical). the maxium noise need to be released via NDA. you can contact local FAE to get NDA then with the maxium noise figure ( 3 sigma based).
This is assume the pressure environment are same for those two sensors.
If consider one sensor environment changed for pressure, then you need to add relative accuracy also for difference of two sensor read out.
Here, the drift is ignored since 24 hours will not noticable drift on sensor side.
... View more
I think you might be already see this video for BNO055 calibration.
Even we support the fast magnetic calibraion, the planar rotation is not able to achieve the calibration level 3 from level 0.
How did you make the calibration? if the major magnetic distortion is not coming from the lake, you can try to calibrate the sensor nearby the final position to make the fusion lib know about the magnetic environment.
In the other word, when you do the system design, you should keep the magnetic sensor away from the magnetic material as well as the big current lines.
... View more