ZJU-Robotics-Lab / GEM

GEM: Online Globally consistent dense elevation mapping for unstructured terrain.
219 stars 32 forks source link
mapping slam

GEM: Online Globally consistent dense elevation mapping for unstructured terrain

NEWS (Aug, 2022): SLAM system released!

NEW FEATURES !!!

This is a ROS package developed for elevation mapping with a mobile robot which is modified on ANYbotics Elevation Map method. This package further implements a GPU version of the point cloud process and a global mapping module.

The software is designed for (local-global) navigation tasks with robots that are equipped with pose estimation (e.g. IMU & odometry) and a distance sensor (e.g. structured light (Kinect, RealSense), laser range sensor, stereo camera). The provided local elevation map is limited around the robot and reflects the pose uncertainty that is aggregated through the motion of the robot (robot-centric mapping). The global map is represented as several submaps corresponding to a pose provided by odometry. This method is developed to explicitly handle drift of the robot pose estimation.

The online Globally consistent dense Elevation Mapping (GEM) packages have been tested under ROS Kinetic and Ubuntu 16.04. This is research code, expect that it changes often and any fitness for a particular purpose is disclaimed.

Author: Peter XU (Xuecheng XU), Yiyuan PAN
Affiliation: ZJU-Robotics Lab
Maintainer: Peter XU, xuechengxu@zju.edu.cn

This project was developed at Zhejiang University (Robotics Lab, College of Control Science and Engineering).

Elevation Map Example

Loop Performance (Loop version is now available)

Elevation Map before loop Elevation Map after loop

Costmap

Elevation Map before loop

Video

Citing

The online globally consistent elevation mapping methods used in this software are described in the following paper (available [here]). If you use this work in an academic context, please cite the following publication(s):

Dependencies

This software is built on the Robotic Operating System (ROS), which needs to be installed first. Additionally, the Globally consistent dense Elevation Mapping depends on following software:

Building

In order to install the GEM, clone the latest version from this repository into your catkin workspace and compile the package using ROS.

cd catkin_workspace/src
git clone https://github.com/ZJU-Robotics-Lab/GEM.git
git clone https://github.com/ZJU-Robotics-Lab/slam_msg.git
git clone https://github.com/ANYbotics/kindr_ros.git
cd ../
catkin_make

If you encounter error like "/usr/local/cuda-10.1/include/crt/common_functions.h:74:24: error: token ""CUDACC_VER is no longer supported. Use CUDACC_VER_MAJOR, CUDACC_VER_MINOR, and CUDACC_VER_BUILD instead."" is not valid in preprocessor expressions

define CUDACC_VER "CUDACC_VER is no longer supported. Use CUDACC_VER_MAJOR, CUDACC_VER_MINOR, and CUDACC_VER_BUILD instead."

You can refer to https://github.com/ZJU-Robotics-Lab/GEM/issues/1 , it's a eigen issue that we will try to fix it in furture versions.

Basic Usage

In order to get the GEM to run with your robot, you will need to adapt some parameters. It is the easiest if duplicate and adapt all the parameter files that you need to change from the elevation_mapping_demos package (e.g. the simple_demo example). These are specifically the parameter files in config and the launch file from the launch folder.

roslaunch filter.launch
roslaunch elevation_mapping_demos simple_demo.launch

Simple Demo

You can get our demo bag from this link: https://drive.google.com/file/d/1hv3ovZnAVSpL0T6GZkJQ14Ptm4w_1ALc/view?usp=sharing

BaiduPan link: https://pan.baidu.com/s/1Er-j5XSpxoTmZZWNSpNvww extract code: 5j2f

rosbag play test.bag --clock --pause
roslaunch filter.launch
roslaunch elevation_mapping_demos simple_demo.launch
# optional - if use costmap
roslaunch pointMap_layer create_globalmap.launch 

Kitti Demo

You can get a kitti demo bag from this link: https://drive.google.com/file/d/17CDKWSGQRlrQcyOy2-T1KbDKfkuRlSF0/view?usp=sharing

BaiduPan link: https://pan.baidu.com/s/10ebos9dYBEa9WVLuecZLug extract code: 1uh5

rosbag play kitti.bag --clock --pause
roslaunch filter_kitti.launch
roslaunch elevation_mapping_demos kitti_demo.launch

!!! An Important Thing

With different sensor configurations of coordination, you may change the filter line in cuda/gpu_process.cu https://github.com/ZJU-Robotics-Lab/GEM/blob/997d31b3b076076f26e72276fe83a43836d29331/elevation_mapping/elevation_mapping/cuda/gpu_process.cu#L393. The demo is recorded with PandarQT with x axis point to left and y axis point to back.

Nodes

Node: elevation_mapping

This is the main GEM node. It uses the distance sensor measurements and the pose and covariance of the robot to generate an elevation map with variance estimates.

Subscribed Topics

Published Topics

Parameters

Bugs & Feature Requests

Please report bugs and request features using the Issue Tracker.