The released 1.0 Version of SMMR-Explore, the supporting open-sourced software package of the paper "SMMR-Explore: SubMap-based Multi-Robot Exploration System with Multi-robot and Multi-target Potential Field Explorer" submitted to ICRA 2021.
Our video is released at Youtube(english version) and Bilibili(Chinese Version). Note that videos of all experiments also get released on Youtube Channel.
Features:
- Only submaps get shared among robots, reducing the communication overhead.
- place Recognition (PR), Relative pose estimation (RelPose) and map merge methods only based on submaps.
- Fast Multi-robot Multi-target Potential Field (MMPF) exploration method, increasing exploration efficiency with less travel cost than Rapidly Random Tree (RRT).
- Multiple cars with nvidia jetson nano board and Lidar sensor.
- ubuntu 18.04 (bash)
- ROS melodic
Cartographer is a 2D/3D map-building method. It provides the submaps' and the trajectories' information when building the map.
We slightly modified the original Cartographer to make it applicable to multi-robot SLAM and exploration.
Please refer to Cartographer-for-SMMR to install the modified Cartographer to carto_catkin_ws
and
source /PATH/TO/CARTO_CATKIN_WS/devel_isolated/setup.bash
pip install torch torchvision
- gem.pth NN model for place recognition, should be placed in "src/m-explore/map_merge/include/weights/"
- model_test.ckpt NN model of 2D PointNetVLAD, should be placed in "src/smmr_explore_wrapper/scripts/"
- (for simulation) gazebo, especially gazebo-ros
Note: please contact author to get model files or download model at download link with password as 058o. The model files are also available at TsinghuaCloud.
(robot model for simulation)
sudo apt install ros-melodic-turtlebot3*
sudo apt install ros-melodic-bfl
pip install future
sudo apt install ros-melodic-teb-local-planner
download the repo and then run
catkin_make
source <repo_path>/devel/setup.bash
- Template
{env_size} = 'small' or 'large'
{number_robots} = 'single' or 'two' or 'three'
{method} = 'rrt' or 'mmpf'
{suffix} = 'robot' or 'robots' (be 'robot' when number_robots != 'single')
roslaunch turtlebot3sim {env_size}_env_{number_robots}_{suffix} .launch
roslaunch turtlebot3sim {number_robots}_{suffix} .launch
roslaunch {method} {number_robots}_{method}_node.launch
Specifically:
- Small Environment -- Single Robot
roslaunch turtlebot3sim small_env_single_robot.launch
roslaunch turtlebot3sim single_robot.launch
roslaunch rrt single_rrt_node.launch
- Small Environment -- Two Robots
roslaunch turtlebot3sim small_env_two_robots.launch
roslaunch turtlebot3sim two_robots.launch
roslaunch rrt two_rrt_node.launch
- Small Environment -- Three Robots
roslaunch turtlebot3sim small_env_three_robots.launch
roslaunch turtlebot3sim three_robots.launch
roslaunch rrt three_rrt_node.launch
- Large Environment -- Single Robot
roslaunch turtlebot3sim Large_env_single_robot.launch
roslaunch turtlebot3sim single_robot.launch
roslaunch rrt single_rrt_node.launch
- Large Environment -- Two Robots
roslaunch turtlebot3sim Large_env_two_robots.launch
roslaunch turtlebot3sim two_robots.launch
roslaunch rrt two_rrt_node.launch
- Large Environment -- Three Robots
roslaunch turtlebot3sim Large_env_three_robots.launch
roslaunch turtlebot3sim three_robots.launch
roslaunch rrt three_rrt_node.launch
- Small Environment -- Single Robot
roslaunch turtlebot3sim small_env_single_robot.launch
roslaunch turtlebot3sim single_robot.launch
roslaunch mmpf single_mmpf_node.launch
- Small Environment -- Two Robots
roslaunch turtlebot3sim small_env_two_robots.launch
roslaunch turtlebot3sim two_robots.launch
roslaunch mmpf two_mmpf_node.launch
- Small Environment -- Three Robots
roslaunch turtlebot3sim small_env_three_robots.launch
roslaunch turtlebot3sim three_robots.launch
roslaunch mmpf three_mmpf_node.launch
- Large Environment -- Single Robot
roslaunch turtlebot3sim Large_env_single_robot.launch
roslaunch turtlebot3sim single_robot.launch
roslaunch mmpf single_mmpf_node.launch
- Large Environment -- Two Robots
roslaunch turtlebot3sim Large_env_two_robots.launch
roslaunch turtlebot3sim two_robots.launch
roslaunch mmpf two_mmpf_node.launch
- Large Environment -- Three Robots
roslaunch turtlebot3sim Large_env_three_robots.launch
roslaunch turtlebot3sim three_robots.launch
roslaunch mmpf three_mmpf_node.launch
For all the cases, choose "Publish Point" button in the rviz and then click anywhere in the map to start the exploration.