Sensor update rates in dataflash logs

Summary
I’m looking to record sensor data from the GPS and IMU at a high rate (10Hz and 100Hz respectively), by using the dataflash logs. I have been able to access this information, but the IMU (accelerometers and gyroscopes) rate is only ~49.4 Hz and the magnetometers only ~10Hz. I cannot work out how to increase their rates through the parameters.

Hardware
Cube Black
Hex Here2 GPS
“Standard” (ADS-B?) Carrier Board
See: http://www.proficnc.com/all-products/156-gps-module.html
SanDisk Ultra 16GB Micro SD card (multiple tried)

Connections
Here2 connected to GPS1
Cube Black connected to PC via USB

Firmware/Software
ArduRover 4.0.0
Mission Planner 1.3.74
Current parameter file: https://github.com/Udesii/ArduRover_params/blob/main/ardurover_params_21-03-14.param

Current method
Essentially, at the moment I am using the hardware as a simple way of logging the sensors. I am using this data to develop different sensor fusion techniques, investigating their application to robot localisation and navigation in the future. As such, I am not interested in most of the information and I have left most parameters as default. The key changes I have made to the parameters in Mission Planner are summarised below.

  • LOG_BACKEND_TYPE is set to only File (1). Should I be using the block-based logging? I can’t find exactly what this is.

  • LOG_BITMASK set to only include attitude_fast, attitude_med, GPS, IMU, and compass.

  • LOG_FILE_BUFSIZE, I increased this to 32 (from 16) in the hope that the data write is not being bottlenecked.

  • I have turned off the EK2_ENABLE and EK3_ENABLE (the EKFs), such that I am just receiving the ‘unaffected’ data. I have calibrated the accelerometers and compass using in ‘Setup’.

  • Changing the GPS_RATE_MS to 100ms gave me the desired 10Hz output.

  • I have all three IMUs enabled with INS_ENABLE_MASK set to 127. I set INS_fast_sample to 7, such that all the IMUs are being recorded at the maximum rate. Is this necessary for my application?

  • INS_LOG_BAT_LGIN set to 1ms, equating to 100Hz. I hoped this would be the key parameter, but it doesn’t seem to change the rate whatever I set it as.

  • I have left INS_LOG_BAT_MASK off (0), as I wasn’t able to tell what difference this made. What does logging batch data mean?

  • A side note on arming. I attempted to turn off the ARMING_CHECK (i.e. 0) as I don’t need them, however this prevented the dataflash logs being generated. Not sure why this is, I couldn’t find an answer. Hence, they are on (524289) and I just force arm.

I have been taking the dataflash logs and processing them in MATLAB. This allows me to calculate the rates that I am receiving the data. Currently I have GPS 10Hz (as I want), IMU (accel & gyro 1, 2 and 3) 49.4Hz (when I am expecting 100Hz), MAG (magnetometer 1, 2 and 3) 10Hz (when I am expecting 100Hz). Does anybody know why IMU and MAG are separate, when traditionally an IMU contains accelerometers, gyroscopes and magnetometers all in one? See the IMU1 and MAG1 example files here: https://github.com/Udesii/ArduRover_params

After scouring the internet and playing around with lots of the parameters, I have been unable to achieved my aim. Have I got any of these parameters set incorrectly or missed any that are required? Any help would be appreciated, I have hit a dead-end.