Explore_lite port to ROS2
ROS2 package port for multi-robot autonomous exploration of m-explore. Targets ROS 2 Humble and newer.
https://user-images.githubusercontent.com/8033598/128805356-be90a880-16c6-4fc9-8f54-e3302873dc8c.mp4
No binaries yet.
Build as a standard colcon package. There are no special dependencies needed (use rosdep to resolve dependencies in ROS).
To run with a params file just run it with
ros2 run explore_lite explore --ros-args --params-file /m-explore-ros2/explore/config/params.yaml
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 rviz2 and add the exploration frontiers marker (topic is explore/frontiers) to see the algorithm working and the frontier chosen to explore.
By default the exploration node will start right away the frontier-based exploration algorithm. Alternatively, you can stop the exploration by publishing to a False to explore/resume topic. This will stop the exploration and the robot will stop moving. You can resume the exploration by publishing to True to explore/resume.
The robot will return to its initial pose after exploration if you want by defining the parameter return_to_init to True when launching the node.
If you have trouble with TB3 in simulation, try replacing the packaged turtlebot3 simulations with the upstream repo:
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.
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 are shown below.
This modality gives normally the best results. The original ROS1 code only supports slam_gmapping type of maps for the merge. The following shows the result with that.
https://user-images.githubusercontent.com/8033598/144522712-c31fb4bb-bb5a-4859-b3e1-8ad665f80696.mp4
We also support using slam_toolbox in a yet experimental branch. The following demo shows the map merging using the currently supported and most used ROS2-SLAM library.
https://user-images.githubusercontent.com/8033598/170846935-cfae9f3f-5edd-43ea-b993-7b3ba1db921b.mp4
It works better if the robots start very close ( git clone https://github.com/charlielito/slam_gmapping.git --branch feature/namespace_launch cd .. colcon build --symlink-install --packages-up-to slam_gmapping
**Note**: You could use [slam_toolbox](https://github.com/SteveMacenski/slam_toolbox) instead but you need to use this [experimental branch](https://github.com/robo-friends/m-explore-ros2/tree/feature/slam_toolbox_compat) which is still under development.
### 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 the flag `known_init_poses:=False`
Then you can start moving each robot with its corresponding rviz2 interface by sending nav2 goals. To see the map merged just launch rviz2:
rviz2 -d /src/m-explore-ros2/map_merge/launch/map_merge.rviz
**Note**: If you want to use slam_toolbox, launch `multirobot_map_merge` with the following flag instead: `slam_toolbox:=True`. Remember to use the experimental branch mentioned above.
WIKI
----
No wiki yet.
COPYRIGHT
---------
Packages are licensed under BSD license. See respective files for details.
No open issues yet, or sync has not completed.