SteveMacenski / slam_toolbox

Slam Toolbox for lifelong mapping and localization in potentially massive maps with ROS
GNU Lesser General Public License v2.1
1.67k stars 525 forks source link

Multi-robot SLAM #541

Open jsongCMU opened 2 years ago

jsongCMU commented 2 years ago

Basic Info

Info Please fill out this column
Ticket(s) this addresses (#76)
Primary OS tested on (Ubuntu 20.04)
Robotic platform tested on (Gazebo simulation, Khepera IV robots with LRF modules)

Multi-robot mapping in Gazebo mrslam_mapping Multi-robot loop closure in Gazebo mrslam_loopclosure Mapping Tepper Locker Area using 5 Kheepra IV Robots mrslam_fvd_compressed

Much of this work was originally done for RoboSAR (Carnegie Mellon University, Advanced Agent-Robotics Technology Lab; capstone project for Master in Robotics Systems Development 2023), a multi-robot search and rescue system. Part of the MrSLAM system has been ported for this PR; see the relevant pages here (organization, MrSLAM repo)

Description of contribution in a few bullet points

Description of documentation updates required from your changes


Future work that may be required in bullet points

SteveMacenski commented 1 year ago

I'm wondering right now if this might more appropriately targeted to the multi-laser branch or if I can make a new multi-robot branch for this work to live in. For ROS 1, its EOL with no new distributions coming out so we can't really make an API/ABI change and release binaries that this would require. But its still very useful, so I could make a noetic-multirobot branch for this to live in where we can make some more substantial changes for those users that want it.

Then add changes to the readme for just that branch with notes on top about the requirements (start in localized area) and other multirobot specific documentation.

What do you think?

SteveMacenski commented 1 year ago

I added a new branch ros1_multirobot you should change this PR to target

Add that first GIF to the readme! Its very illustrative and concise

jsongCMU commented 1 year ago

I'm wondering right now if this might more appropriately targeted to the multi-laser branch or if I can make a new multi-robot branch for this work to live in. For ROS 1, its EOL with no new distributions coming out so we can't really make an API/ABI change and release binaries that this would require. But its still very useful, so I could make a noetic-multirobot branch for this to live in where we can make some more substantial changes for those users that want it.

Then add changes to the readme for just that branch with notes on top about the requirements (start in localized area) and other multirobot specific documentation.

What do you think?

I added a new branch ros1_multirobot you should change this PR to target

Add that first GIF to the readme! Its very illustrative and concise

Sounds good. I wasn't sure how to make this fully backwards compatible, since a lot is changing, so a fresh new branch would be best. I'll change the target

jsongCMU commented 1 year ago

image Pose graph color varies for each robot (node and edge colors). Edges between pose graphs of different robots are solid red. Colors are assigned randomly; tested with 6 robots, and all colors look good.

Jayden-F commented 1 year ago

Hello, I hope someone can help me, I am trying to find a way to perform multi-robot slam in ROS2. Are there any plans to make this available in ROS2? or do you know of any packages in ROS2 that already implement multi-robot slam? Thank you

SteveMacenski commented 1 year ago

My plan would be to have this in ROS 2 once its in ROS 1 here, yes!

jsongCMU commented 1 year ago

Updated README with info on Multi-Robot SLAM + GIF

Alex-Beh commented 1 year ago

Hi all, I am interested on this feature also and willing to contribute also. May I know what is the current plan & progress for this PR?

jsongCMU commented 1 year ago

Synchronous and asynchornous SLAM are working. Localization and life long mapping are still TODO's. Currently overwhelmed with other things, so was going to resume PR around June