slam_toolbox icon indicating copy to clipboard operation
slam_toolbox copied to clipboard

Multi-robot SLAM

Open jsongCMU opened this issue 2 years ago • 9 comments


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

  • Extends SLAM to map and localize multiple robots, each with one laser scanner
  • Also does multi-robot loop closure
  • Fixes bug where first constraint between robots is not computed properly; this is fixed in ros2 branch already
  • All robots add to and build on the same pose graph

Description of documentation updates required from your changes

  • Robots must start close to each other, facing the same thing; relative poses are determined using laser scan matching!!!
  • First robot to come online defines world origin
  • odom_frame and base_frame are now odom_frames and base_frames
  • scan_topic is now laser_topics
  • number of elements in odom_frames, base_frames, and laser_topics must all be equal, one for each robot
  • Laser is named after laser frame instead of "Custom Described Lidar"

Future work that may be required in bullet points

  • Tested for online sync and async modes; need testing for other modes as well
  • Unsure how to handle multiple laser scan topics in loadSerializedPoseGraph
  • May want to have different loop closure parameters for single robot loop closing on itself, and between loop closing across multiple agents
  • Add param to disable multi-robot loop closure, in case application does not want this
  • Currently only supports robots with one laser scanner each; extend to multiple lasers
  • Laser scan matching is used to determine initial relative poses. Useful to have different parameters for initial laser scan matching (which may require searching over a much larger space; fine since done during startup) than laser scan matching being done normally during operation

jsongCMU avatar Oct 16 '22 20:10 jsongCMU

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 avatar Dec 06 '22 23:12 SteveMacenski

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

SteveMacenski avatar Dec 06 '22 23:12 SteveMacenski

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 avatar Dec 19 '22 02:12 jsongCMU

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.

jsongCMU avatar Jan 02 '23 15:01 jsongCMU

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

Jayden-F avatar Jan 27 '23 00:01 Jayden-F

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

SteveMacenski avatar Jan 27 '23 21:01 SteveMacenski

Updated README with info on Multi-Robot SLAM + GIF

jsongCMU avatar Feb 05 '23 21:02 jsongCMU

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?

Alex-Beh avatar Mar 16 '23 06:03 Alex-Beh

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

jsongCMU avatar Mar 16 '23 14:03 jsongCMU