Go to file
Carlos Andrés Álvarez Restrepo f808bc404a
PORT: multirobot_map_merge (#8)
* Baby steps

* Compile without implementations

* Compile combined_grids

* Compile part of principal node map_merge.cpp

* Finish 90% of main node

* Move ros::names implementation to own file

* Replace ros1 while loops threads with ros2 timers

* Fix checking of map type for adding robots. bypass mutex for now

* Working version without init poses, still verbose logs

* Add namespace to explore_lite
Add tb3 launch files for multirobot tests
Finish multirobot map merge with poses known

* Add files for tb3 demo

* Fix launch file for demo with robot poses

* Fix comments on locking

* Change deprecated Ptr to SharedPtr in ros2 msgs variables

* Change ConstPtr to ConstSharedPtr for ROS2

* Fix minor warnings in explor_lite

* Attempt fix slam toolbox

* Add launch and remove old ones

* Add copyright

* Add readme with instruction on how to run the demo in sim

* Fix readme and port from_map_server launch file

* Fix QoS for suscriptions with TRansientlocal
2021-12-26 20:28:18 -05:00
explore PORT: multirobot_map_merge (#8) 2021-12-26 20:28:18 -05:00
map_merge PORT: multirobot_map_merge (#8) 2021-12-26 20:28:18 -05:00
.clang-format Initial commit, partially working, lacks explore.cpp 2021-08-03 19:33:15 -07:00
.gitignore Initial commit, partially working, lacks explore.cpp 2021-08-03 19:33:15 -07:00
LICENSE Initial commit, partially working, lacks explore.cpp 2021-08-03 19:33:15 -07:00
README.md PORT: multirobot_map_merge (#8) 2021-12-26 20:28:18 -05:00

README.md

m-explore ROS2 port

ROS2 package port for multi robot exploration of m-explore. Currently tested on Eloquent, Dashing, Foxy, and Galactic distros.

Autonomous exploration

TB3

https://user-images.githubusercontent.com/8033598/128805356-be90a880-16c6-4fc9-8f54-e3302873dc8c.mp4

On a JetBot with realsense cameras

https://user-images.githubusercontent.com/18732666/128493567-6841dde0-2250-4d81-9bcb-8b216e0fb34d.mp4

Installing

No binaries yet.

Building

Build as a standard colcon package. There are no special dependencies needed (use rosdep to resolve dependencies in ROS).

RUNNING

To run with a params file just run it with

ros2 run explore_lite explore --ros-args --params-file <path_to_ros_ws>/m-explore/explore/config/params.yaml

Running the demo with TB3

Install nav2 and tb3 simulation. You can follow the tutorial.

Then just run the nav2 stack with slam:

export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/${ROS_DISTRO}/share/turtlebot3_gazebo/models
ros2 launch nav2_bringup tb3_simulation_launch.py slam:=true

And run this package with

ros2 launch explore_lite explore.launch.py

You can open an rviz2 and add the exploration frontiers marker to see the algorithm working and choose a frontier to explore.

TB3 troubleshooting (with foxy)

If you have trouble with TB3 in simulation like we did, add this extra steps for configuring it.

source /opt/ros/${ROS_DISTRO}/setup.bash
export TURTLEBOT3_MODEL=waffle
sudo rm -rf /opt/ros/${ROS_DISTRO}/share/turtlebot3_simulations
sudo git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations /opt/ros/${ROS_DISTRO}/share/turtlebot3_simulations
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/${ROS_DISTRO}/share/turtlebot3_simulations/turtlebot3_gazebo/models

Then you'll be able to run it.

Multirobot map merge

This package works with known and unknown initial poses of the robots. It merges the maps of the robots and publishes the merged map. Some results in simulation:

Known initial poses (best results)

https://user-images.githubusercontent.com/8033598/144522712-c31fb4bb-bb5a-4859-b3e1-8ad665f80696.mp4

Unknown initial poses

It works better if the robots start very close (< 3 meters) to each other so their relative positions can be calculated properly.

https://user-images.githubusercontent.com/8033598/144522696-517d54fd-74d0-4c55-9aca-f1b9679afb3e.mp4

ROS2 requirements

SLAM

Because of the logic that merges the maps, currently as a straight forward port to ROS2 from the ROS1 version, the SLAM needs to be done using the ROS1 defacto slam option which is slam_gmapping, which hasn't ported officially to ROS2 yet. There is an unofficial port but it lacks to pass a namespace to its launch file. For that, this repo was tested with one of the authors of this package fork. You'll need to git clone to your workspace and build it with colcon.

cd <your/ros2_ws/src>
git clone https://github.com/charlielito/slam_gmapping.git --branch feature/namespace_launch
cd ..
colcon build --symlink-install --packages-up-to slam_gmapping

Nav2 config files

This repo has some config examples and launch files for running this package with 2 TB3 robots and a world with nav2. Nonetheless, they are only compatible with the galactic branch and since some breaking changes were introduced in this branch, if you want to try it with another ros2 distro you'll need to tweak those param files for that nav2's distro version (which shouldn't be hard).

Running the demo with TB3

First you'll need to launch the whole simulation stack, nav2 stacks and slam stacks per robot. For that just launch::

export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/${ROS_DISTRO}/share/turtlebot3_gazebo/models
ros2 launch multirobot_map_merge multi_tb3_simulation_launch.py slam_gmapping:=True

Now run the merging node:

ros2 launch multirobot_map_merge map_merge.launch.py

By default the demo runs with known initial poses. You can change that by launching again both launch commands with with the flag known_init_poses:=False

Then you can start moving each robot with its corresponding rviz2 interface sending nav2 goals. To see the map merged just launch rviz2:

rviz2 -d <your/ros2_ws>/src/m-explore-ros2/map_merge/launch/map_merge.rviz

WIKI

No wiki yet.

Packages are licensed under BSD license. See respective files for details.