navtech-radar-slam
Radar SLAM: yeti radar odometry + ScanContext-based Loop Closing
What is Navtech-Radar-SLAM?
- In this repository, a (minimal) SLAM problem is defeind as SLAM = Odometry + Loop closing, and the optimized states are only robot poses along a trajectory.
- Based on the above view, this repository aims to integrate current available radar odometry, radar place recognition, and pose-graph optimization.
- Radar odometry: Yeti open source that implemented cen2018 and cen2019 methods with considering motion distortation for RANSAC.
- The odometry modules consumes file-based input (not ROS subscription) in this example. See
odometry/yeti_radar_odometry/src/odometry.cpp
for the details. - However, to seamlessly connect the motion estimation result with the later place recognition module, we added ROS publishing lines to the original odometry.cpp code. Also, see
odometry/yeti_radar_odometry/src/odometry.cpp
for the details.
- The odometry modules consumes file-based input (not ROS subscription) in this example. See
- Radar place recognition: Scan Context open source
- In MulRan dataset paper, the radar scan context is also proposed, but in this repository we use a Cartesian 2D feature point cloud (extracted via cen2019 method) as an input for the original Scan Context (IROS2018) method and it works.
- The Scan Context-based loop detection is included in the file
pgo/SC-A-LOAM/laserPosegraphOptimization.cpp
.
- Pose-graph optimization
- iSAM2 in GTSAM is used. See
pgo/SC-A-LOAM/laserPosegraphOptimization.cpp
for the details (ps. the implementation is eqaul to SC-A-LOAM and it meanslaserPosegraphOptimization.cpp
node is generic!)
- iSAM2 in GTSAM is used. See
- Radar odometry: Yeti open source that implemented cen2018 and cen2019 methods with considering motion distortation for RANSAC.
How to use?
Dependencies
- Yeti: OpenCV and SC-PGO: GTSAM
Steps
First, clone and build.
$ mkdir -p ~/catkin_radarslam/src && cd ~/catkin_radarslam/src
$ git clone https://github.com/gisbi-kim/navtech-radar-slam.git && cd ..
$ catkin_make
Second,
- Download a sequence from the MulRan dataset (you need to download polar_oxford_form.zip)
- Change this line in the yeti launch to your downloaded and unzipped radar data directory path.
Then, enjoy!
$ source devel/setup.bash
$ roslaunch src/navtech-radar-slam/launch/navtech_radar_slam_mulran.launch
Examples
- The examples are from MulRan dataset, which is suitable to evaluate the radar odometry or SLAM algorithm in complex urban sites.
- The MulRan dataset provides the oxford-radar-robotcar-radar data format (i.e., meta data such as ray-wise timestamps are imbedded in an radar image, see details here)
1. KAIST 03 of MulRan dataset
- Video (youtube link)
- Capture:
2. Riverside 03 of MulRan dataset
- Video (youtube link)
- Capture:
Related papers
If you cite this repository, please consider below papers.
- Yeti open source for radar odometry:
@ARTICLE{burnett_ral21, author = {Keenan Burnett, Angela P. Schoellig, Timothy D. Barfoot}, journal={IEEE Robotics and Automation Letters}, title={Do We Need to Compensate for Motion Distortion and Doppler Effects in Spinning Radar Navigation?}, year={2021}, volume={6}, number={2}, pages={771-778}, doi={10.1109/LRA.2021.3052439}} }
- Scan Context open source for place recognition:
@INPROCEEDINGS { gkim-2018-iros, author = {Kim, Giseop and Kim, Ayoung}, title = { Scan Context: Egocentric Spatial Descriptor for Place Recognition within {3D} Point Cloud Map }, booktitle = { Proceedings of the IEEE/RSJ International Conference on Intelligent Robots and Systems }, year = { 2018 }, month = { Oct. }, address = { Madrid } }
- MulRan dataset:
@INPROCEEDINGS{ gskim-2020-mulran, TITLE={MulRan: Multimodal Range Dataset for Urban Place Recognition}, AUTHOR={Giseop Kim and Yeong Sang Park and Younghun Cho and Jinyong Jeong and Ayoung Kim}, BOOKTITLE = { Proceedings of the IEEE International Conference on Robotics and Automation (ICRA) }, YEAR = { 2020 }, MONTH = { May }, ADDRESS = { Paris } }
TODO
- About utilities
- support ROS-based input (topic subscription)
- support a resulting map save functions.
- About performances
- support reverse loop closing.
- enhance RS (radius-search) loop closings.