This project builds an autonomous-vehicle-grade localization stack centered on an Invariant EKF (IEKF) that fuses IMU, wheel odometry, GNSS/RTK, camera VO/VIO (stereo + optional monocular), and LiDAR scan-to-map. Deep learning components improve robustness via learned matching, learned uncertainty calibration, slip detection, semantic map corrections, and global relocalization recovery.
The IEKF runs continuously. Sensors provide updates. Deep learning modules improve the quality and trustworthiness of measurements (and can trigger relocalization).
(RTK Corrections / NTRIP / Base Station)
|
v
+--------------------------------------------------------------+
| IEKF Core |
| State: {R, p, v, bg, ba, (optional: wheel_scale, cam_scale)}|
| Cov: P |
| Outputs: /odometry/filtered, /tf (map->base_link), diag |
+--------------------------^-----------------------------------+
|
IMU propagation |
[IMU] ---> Strapdown integration + covariance propagation
|
+--> (DL/ML Health): detect saturation / vibration / dropouts
Measurement Update Inputs (with ML modules):
--------------------------------------------
[Wheel Encoders + Steering] ---> Vehicle model ---> (Update)
| \
| +--> (ML Slip Detector) -> down-weight wheel updates
v
(ML Slip Classifier: slip/no-slip + slip score)
[GNSS/RTK] ----------------------------------------------> (Update)
|
+--> (ML GNSS reliability) -> multipath suspicion -> inflate R or reject
[Stereo Camera] --> (CNN keypoints+matching: SuperPoint + LightGlue) --> Stereo VO --> (Update)
| |
| +--> (ML Uncertainty Calibrator) -> scale R_vo
|
+--> (Optional CNN stereo depth) -> denser 3D points -> stronger VO constraints
[LiDAR] --> scan-to-map (NDT/ICP) --> pose correction --> (Update)
|
+--> (ML/heuristic degeneracy + uncertainty calibration) -> scale R_lidar
Semantic Map Localization (DL + Geometry):
-----------------------------------------
[Camera] -> (DL lane/sign/pole detection) -> associate to HD semantic map -> absolute pose -> (Update)
Global Recovery (Relocalization):
--------------------------------
[LiDAR or Camera] -> (Place Recognition / Descriptor Retrieval) -> coarse global pose -> re-init scan-to-map + IEKF
T_map_base, T_odom_basebg, accel bias bamap, odom, base_link, sensor frames.T_base_imu, T_base_cam, T_base_lidar, GNSS lever arm.bg, ba.R_vo.R_lidar.Sensors: /imu_driver -> /imu/data /wheel_driver -> /wheel/encoders /steering_driver -> /vehicle/steering /gnss_driver -> /gnss/fix, /gnss/vel, /gnss/status /stereo_cam -> /stereo/left/image, /stereo/right/image /lidar_driver -> /points_raw Deep Learning Modules: /dl_matching : (left/right images) -> /vo/matches, /vo/quality /dl_slip_detector : (imu + wheel + steering) -> /wheel/slip_score /dl_uncertainty : (vo/lidar/gnss stats) -> /trust/scale_vo, /trust/scale_lidar, /trust/scale_gnss /dl_semantics : (camera) -> /sem/lanes, /sem/landmarks /relocalizer : (lidar/cam) -> /recovery/coarse_pose Classical Geometry: /stereo_vo : (matches + stereo) -> /vo/odom, /vo/diag /lidar_scan_match : (points + map) -> /lidar/pose, /lidar/fitness /semantic_localize : (semantics + map) -> /sem/pose, /sem/score Estimator: /iekf_localizer : fuses everything -> /odometry/filtered, /tf, /diagnostics, /health Offline: /mapping_pipeline -> map.pcd, semantic_landmarks.json, descriptor_db.bin
Key design rule: IEKF owns the state. DL nodes produce either (1) better measurements, or (2) better measurement trust (adaptive noise), or (3) recovery proposals (relocalization seed).