INFO

Read about the implementation here. Or view on GitHub.

Racing SLAM is a monocular-inertial Simultaneous Localization and Mapping algorithm used in robotics to build a map of the environment while also tracking the robot’s position within that environment. The project applies the concept to high speed racing situations.

Demo

The green points on the image show the motion of objects in the scene which is used to produce an initial estimate of the car’s motion. The estimated trajectory is shown on the right along with the reconstructed 3D points clouds (visualized top-down). Note that the light gray path is the ground truth, displayed for reference only, and not visible to algorithm.

Benchmarks

I used two benchmarks:

  1. EuRoC - a popular visual-inertial public dataset featuring various scenes taken from MAV (micro aerial vehicle).
  2. Custom iRacing Dataset - my own laps in the iRacing simulator at various tracks. I translated iRacing’s native telemetry export into ground truth trajectories, and used the included IMU sensor data with randomized bias and noise, according to the BMI088 datasheet.

Results

Comparisons between Racing SLAM and ORB-SLAM3 on EuRoC sequences. Results show ATE RMSE in meters. Visual-inertial (VI) configurations report ATE after a SE(3) transform, while monocular-only configurations use a SIM(3) transform.

On EuRoC, Racing-SLAM performs similar to ORB-SLAM3, but struggles on V203.

EuRoC SeqRacing-SLAM (VI)ORB-SLAM3 (VI)
MH010.0330.062
MH020.0240.037
MH030.0310.046
MH040.0910.075
MH050.0620.057
V1010.0390.049
V1020.0260.015
V1030.0440.037
V2010.0330.042
V2020.0320.021
V2030.2560.027

On racing sequences, ORB-SLAM3 had high failure rates and nearly all runs were catastrophic. RMSE numbers here are larger than EuRoC since the trajectories span 5-10 kilometers.

iRacing SeqRacing-SLAM (VI)ORB-SLAM3 (VI)ORB-SLAM3 (mono)
Lime Rock2.02DNF27.58
Road Atlanta2.761709.1144.92
Ledenon11.452839.25133.47

I plan to include additional benchmarks soon.

Features

These are the core components of the system:

  • Lucas-Kanade optical flow for frame-to-frame feature tracking
  • ORB descriptors for map matching and loop recognition
  • Local bundle adjustment
  • DBOW2 place recognition
  • Loop closure with pose graph optimization and global bundle adjustment
  • IMU support with preintegration and VINS-style initialization
  • Continuous IMU scale and gravity refinement

Inspiration

I had recently read Probabilistic Robotics by Sebastian Thrun. I’ve known about Thrun for quite some time; I remember watching his videos and reading his papers back in middle school when I built an autonomous toy car. It’s fair to say he’s at least partially inspired my interest in robotics.

Logs

Read about my progress: