MR_SLAM
MR_SLAM copied to clipboard
[IEEE T-RO 2023] A modularized multi-robot SLAM system with elevation mapping and a costmap converter for easy navigation. Different odometry and loop closure algorithms can be easily integrated into...

MR_SLAM
A modularized multi-robot SLAM system with elevation mapping and a costmap converter for easy navigation. Different odometry and loop closure algorithms can be easily integrated into the system.
View Demo
·
Report Bug
·
Request Feature
Table of Contents
- About The Project
-
Getting Started
- Prerequisites
- Installation
- Quick Demo
- Full Usage
- Roadmap
- Contributing
- License
- Contact
About The Project
This is a C++ library with ROS interface to manage multi-robot maps. It contains a pluggable front-end FAST-LIO2, a pluggable loop closure method DiSCO / RING. and a global manager that handles submaps, loop closure and back-end optimization. The optimizer is mainly based on GTSAM and dist-mapper. The system provides a 3D pointcloud map and a 2.5D elevation map output. The output elevation map can be easily converted to a costmap for navigation.
Author: Peter XU (Xuecheng XU)
Affiliation: ZJU-Robotics Lab
Maintainer: Peter XU, [email protected]
(back to top)
Getting Started
Here, we provide an example to demonstrate the system. Some parameters can be changed to fit your needs.
Prerequisites
This software is built on the Robotic Operating System ([ROS]), which needs to be installed first. Additionally, the MR_SLAM depends on following software:
-
Eigen (linear algebra library, tested on 3.2.9 & 3.3.4; failed on 3.3.9)
-
CUDA (gpu process)
-
GTSAM (pose optimization)
-
Grid Map (grid map library for mobile robots)
sudo apt install ros-$ROS_DISTRO-grid-map*
-
OctoMap (octomap library for multi-resolution)
sudo apt install ros-$ROS_DISTRO-octomap*
-
Follow https://github.com/anybotics/kindr
-
DiSCO (pluggable loop detector)
Follow https://github.com/MaverickPeter/DiSCO-pytorch
-
livox_ros_driver (for FAST_LIO2)
Follow https://github.com/Livox-SDK/livox_ros_driver
-
Fast GICP (for ICP refine)
# Fast GICP is already include in the repo. You can use git submodule sync git submodule init --recursive git submodule update # or you can clone the repo and put them in the same place Follow https://github.com/SMRT-AIST/fast_gicp
Installation
- Clone the repo
git clone https://github.com/MaverickPeter/MR_SLAM.git
- Make Mapping
cd Mapping && catkin_make
- Make Localization
cd Localization && catkin_make
- Make LoopDetection
cd LoopDetection && catkin_make # If you encounter the PyInit__tf2 issue, use catkin_make with your python3 environment catkin_make --cmake-args \ -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/home/client/miniconda3/envs/py3/bin/python3.8 \ -DPYTHON_INCLUDE_DIR=/home/client/miniconda3/envs/py3/include/python3.8 \ -DPYTHON_LIBRARY=/home/client/miniconda3/envs/py3/lib/libpython3.8.so
(back to top)
Quick Demo
-
Get rosbag from Google Drive or Baidu Pan with extract code: gupx
-
Run roscore
-
Run bag
rosbag play 3_dog.bag --clock --pause
-
Run DiSCO
# !!!!! You need to change the Python interpreter to your environment The default is mine: #!/home/client/miniconda3/envs/disco/bin/python3 cd LoopDetection && source devel/setup.bash rosrun disco_ros main.py
-
Run global_manager
cd Mapping && source devel/setup.bash roslaunch global_manager global_manager.launch
-
Visualization
rviz -d Visualization/vis.rviz
(back to top)
Full Usage
-
Run roscore
-
Run fast-lio (in 3 terminals)
# Set parameters in Localization/src/FAST_LIO/launch/ and Localization/src/FAST_LIO/config/ cd Localization && source devel/setup.bash roslaunch fast_lio robot_1.launch roslaunch fast_lio robot_2.launch roslaunch fast_lio robot_3.launch
-
Run elevation_mapping (in 3 terminals)
# Set parameters in Mapping/src/elevation_mapping_periodical/elevation_mapping_demos/launch/ and Mapping/src/elevation_mapping_periodical/elevation_mapping_demos/config/ cd Mapping && source devel/setup.bash roslaunch elevation_mapping_demos robot_1.launch roslaunch elevation_mapping_demos robot_2.launch roslaunch elevation_mapping_demos robot_3.launch
-
Run DiSCO
# You need to change the Python interpreter to your environment The default is mine: #!/home/client/miniconda3/envs/disco/bin/python3 cd LoopDetection && source devel/setup.bash rosrun disco_ros main.py
-
Run global_manager
# Set parameters in Mapping/src/global_manager/launch/ cd Mapping && source devel/setup.bash roslaunch global_manager global_manager.launch
-
Visualization
rviz -d Visualization/vis.rviz
(back to top)
Roadmap
- [ ] Optimize code.
- [ ] Add more pluggable loop closure methods.
- [ ] Support more front-end odometry.
See the open issues for a full list of proposed features (and known issues).
(back to top)
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
(back to top)
License
Distributed under the MIT License. See LICENSE.txt
for more information.
(back to top)
Contact
Xuecheng Xu - [email protected]
Project Link: https://github.com/MaverickPeter/MR_SLAM
(back to top)