Skip to content

Add Euroc driver for SLAM dataset evaluation

Mateo de Mayo requested to merge mateosss/monado:mateosss/euroc into master

About the driver

This driver reads datasets in the EuRoC format, which are a mix of image sequences, IMU samples, and optionally calibration data and ground-truth data. It is intended for the evaluation of SLAM systems.

Some peculiarities of this MR:

  1. It adds a new datatype xrt_imu_sample in a414ea2f instead of reusing xrt_tracking_sample as it:
    1. Uses doubles.
    2. Does not assume units.
    3. Has the timestamp (using a sample without a timestamp seems unlikely).
  2. It adds an xrt_imu_sink interface in cbb606a6 This interface together with xrt_imu_sample seem to nicely fit in the xrt_tracked_{psmv, psvr} interfaces, so I added @todo comments to use them.
  3. While the euroc_player implements xrt_fs, it doesn't perfectly fit on it. One of the reasons is the many playback knobs that can be tuned. So xrt_fs_stream_start works more like an initialization, while the user is who starts the stream from the debug UI. Similarly, only one xrt_fs_mode is exposed.
  4. This is using two image sinks instead of one sink with stereo. This is mainly due to the SLAM systems I've tried not receiving one big stereo frame, but having two separate queues for left and right frames instead.
  5. The driver is mostly written in C style but using some C++ std features.
  6. I had to do some macro conditions in the p_tracking.c and p_prober.c files. I couldn't find a better place to start the driver.

How it might be improved

  1. I'm not using the ground truth or calibration data the dataset could be providing.
  2. It is relatively easy to capture datasets in this format, I have that working here and might open a MR for it in the future.

How to test it

  1. Download one of the standard EuRoC datasets like this one.
  2. Run Monado with the EUROC_PATH flag set to the location of the dataset directory (example: EUROC_PATH=/home/user/Downloads/V1_01_easy)

Merge request reports