I’ve been doing some fine tuning of the HoG code as a result of the FIFO trial I did. The FIFO timing came from the IMU sampling rate – there’s a sample every 1ms and so there’s no need for using time.time() when the IMU hardware clock can do it.
I’ve now applied the same to the hardware interrupt driven code; motion processing now takes less time as it was the only call to time.time(), and as such that means there’s a smaller chance of missing samples too. I’ve also added code so that when there are I2C / data corruption errors, that counts as another 1ms gap since the code then waits for the next hardware interrupt.
I’ve also removed the zero 0 calibration again, as I’m fairly convinced it’s pointless – I _think_ the deletion of (Butterworth filter extracted) gravity from acceleration means that calibration is pointless. That also adds a very marginal performance increase to motion processing.
A few test flights showed no regression (nor noticeable improvement), so I’ve uploaded the code to GitHub. You also need to grab the latest version of my GPIO library as in now imports as GPIO rather than as a clone of RPi.GPIO.