Skip to content

The Radar Normal Distributions Transform (RaNDT) SLAM developed by Maximilian Hilger and Nils Mandischer at RWTH Aachen University for use in the German Rescue Robotics Center (DRZ).

License

Notifications You must be signed in to change notification settings

IGMR-RWTH/RaNDT-SLAM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RaNDT SLAM

This package provides the Rader Normal Distribution Transform (RaNDT) SLAM.

A benchmark data set is available at Zenodo.

Citation

This work is part of a paper accepted at the International Conference on Intelligent Robots and Systems (IROS). The pre-print is available at arxiv. Please cite the arxiv paper until the IEEE publication is online.

License

This work is lincensed under the BSD-3 license, copyright 2023 Institute of Mechanism Theory, Machine Dynamics and Robotics - RWTH Aachen University.

Dependencies

The package has following dependencies:

  • Ceres Solver
  • Sophus
  • Eigen

Only for Evaluation on Oxford dataset:

Additionally, the following ros packages should be installed:

  • ros-noetic-perception
  • ros-noetic-imu-tools
  • ros-noetic-imu-pipeline (these are needed to transform IMU messages into correct frame)

Installation

  1. Install all dependencies.

  2. Clone RaNDT SLAM

cd ~/<your_catkin_ws>/src
git clone https://github.com/IGMR-RWTH/RaNDT-SLAM
  1. Build package
cd ~/<your_catkin_ws>/
catkin build

Docker

Optionally, you can use the provided Dockerfile.

Build docker:

cd RaNDT-SLAM
docker build -t ndt_slam_docker .

Start docker:

docker run -it -v ~/<your workspace>:/root/catkin_ws --network host --env ROS_MASTER_URI=http://localhost:11311 ndt_slam_docker

In docker:

cd catkin_ws
catkin build

Structure

The package contains two nodes:

  • ndt_slam
  • ndt_visualization

The former is the actual SLAM system, while the latter can be optionally used to visualize the NDT representation of the radar scans and the map.

The ndt_slam part has several subcomponents:

  • ndt_slam is the main interface to ROS. It handles data input and output. Additionally, it stores most of the data and several mutexes
  • local_fuser depicts the front end of the slam system. It gets the input from the interface and is responsible to manage scan matching, submap initialization, loop closure detection, and global optimization. Here, we inserted also ScanContext (https://github.com/irapkaist/scancontext), which is used for loop closure detection.
  • radar_preprocessing contains methods to filter and cluster the incoming radar scan data. It is invoked by the local fuser
  • ndt_representation holds the different map and cell types and provides interfaces to them. ndt_cell holds a single cell with its mean and covariants. The ndt_map holds several cells to form a map. The ndt_hierarchical_map stores both a NDT map and a grid counting occupancy values. This is necessary to generate global OGMs for the usage in ROS. All of the occupancy-counting grids are combined in the ndt_master_map to generate the OGM.
  • ndt_registration provides an interface to Ceres to allow NDT matching and motion estimation
  • global_fuser is responsible for pose graph optimization. Again, we use Ceres here.

Setup and Usage

Tuning

We prepared three parameter configurations for different environments:

  • indoor (parameters_indoor.yaml)
  • outoor (parameters_outdoor.yaml)
  • mixed (parameters_mixed.yaml)

We suggest using them.

If you want to deploy a different sensor, you have to set the parameters accordingly. The frames and topics are given in ndt_radar_slam_base_parameters.yaml. There, you can additionally choose not to use the IMU, or turn off visualization. The meaning of the parameters is explained in the config files.

Usage

Four parameters are considered in roslaunch:

  • visualization: if true, start both SLAM visualizer node. Else, just the SLAM node
  • base_frame: frame to which the IMU message should be transformed. Has to be the same as specified in the config file
  • raw_imu_topic: topic of the incoming IMU messages
  • environment: select one of indoor, outdoor, and mixed to load the corresponding paramters

Launch the node using

roslaunch ndt_radar_slam ndt_slam.launch environment:=outdoor

The launch file does not start playing back data automatically, so you need to start rosbag play by yourself.

Usage with Oxford Radar RobotCar Dataset

Please read the additional oxford-dataset for instructions how to use RaNDT SLAM together with the Oxford Dataset.

About

The Radar Normal Distributions Transform (RaNDT) SLAM developed by Maximilian Hilger and Nils Mandischer at RWTH Aachen University for use in the German Rescue Robotics Center (DRZ).

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published