@Rowan-Dempster , Thanks for the update!
On my end, I did not get a chance to enable MISP pipeline (normalization in particular) to run offline. Let me double check something with you - would you want to load a log with raw10 and resize + generate the normalized image (of a different size) or just keep the same size as input?
Since you have the basic rolling shutter QVIO working, it would be interesting to see how that compares to the AR0144 QVIO from the same data set. Any details you would like to share? (only if you want to) 😄
Regarding playback results from QVIO output not being exactly repeatable -- " no deterministic mechanism to ensure that voxl-qvio-server initializes using the same camera frame" -- what do you mean by that? if you start QVIO and start feeding the frames + imu data from voxl-replay, the data should arrive into QVIO repeatably and QVIO should initialize on the same frame - after the initialization conditions have been satisfied.
If I remember correctly the way QVIO app works is that it may hold the frame until all the IMU data for that frame has arrived and then pushes the frame into the QVIO algorithm. If you push the frame before pushing all the IMU data, then the algorithm will still process the frame but it wont have the IMU data for the whole duration of the frame capture.
The frame capture duration for global shutter cameras is simple :
start = start of exposure
end = end of exposure = start of exposure + exposure time
(i believe it is common to assign a timestamp which is equal to the center of exposure, which is between the start and end timestamps).
center of exposure = start of exposure + (exposure time)/2
In order to find the center of exposure for rolling shutter camera, you need to use the following formula, as used in our EIS implementation in MISP:
int64_t center_of_exposure_ns = start_of_exposure_ns + (exposure_time_ns + readout_time_ns)/2;
In any case, this would be something to double check.. also i don't know how far your trajectories are from run to run.
Another tip: since you don't have ground truth in your data, it helps to start and end your data collection in exactly the same spot and orientation, so you can use the end position drift as a good metric (ground truth).
Alex