Multiexplorer — Multi-Robot Frontier Exploration with TurtleBot3
My first ROS project: a Gazebo-based study comparing single-, double-, and triple-robot frontier exploration, SLAM, and map-merging with TurtleBot3.
1. Overview & Motivation
Multiexplorer is my first ROS project, built directly after a 2-week ROS boot-camp and two additional weeks of self-directed development at TÜBİTAK BİLGEM.
 The goal was simple yet instructive: compare the exploration efficiency of one, two, and three TurtleBot3 robots in a 2-D indoor environment while learning core ROS concepts:
-  Frontier-based exploration (
explore_lite) - 2-D SLAM with Gmapping
 -  Multi-robot map fusion via 
multirobot_map_merge - Launch-file structuring, namespacing, and TF management
 
Because it targets complete beginners, the implementation is intentionally basic and fully simulation-only—ideal for first experiments in multi-robot systems.
2. Features & Techniques
- Autonomous frontier exploration that pushes each robot to the nearest unexplored frontiers.
 -  Independent SLAM per robot generating 
/tb3_X/mapoccupancy grids. -  Real-time map stitching into a global 
/tb3/mapframe. - Gazebo + RViz visualisation with one-command launch files.
 -  Scalable launch design—swap 
house.worldfor any custom world; raise robot count by cloning a namespace block. - Optional fiducial SLAM demo with ArUco markers for marker-based localisation.
 
3. Experiment Matrix & Benchmarks
| Scenario | Robots | Avg. time to 95 % coverage* | Global map size | 
|---|---|---|---|
| Single | 1 | ~550 s | 384 × 384 cells | 
| Double | 2 | ~330 s (▲ 40 %) | 512 × 512 cells | 
| Triple | 3 | ~260 s (▲ 53 %) | 640 × 640 cells | 
*Measured in turtlebot3_house.world, 5 runs per scenario.
Even a naïve division of labour yields significant time savings, highlighting frontier exploration’s embarrassingly parallel nature.
4. Architecture & Launch Flow
multiexplorer\_yunusdanabas/
├─ launch/
│  ├─ single\_robot\_exp.launch     # SLAM + explore\_lite + nav
│  ├─ double\_robotexp.launch      # adds second namespace & map\_merge
│  ├─ multi\_robotexp.launch       # scales to three robots
│  └─ fiducial\_slam\_turtlebot3.launch
├─ worlds/        # Gazebo house & test worlds
├─ rviz/          # Display configs
├─ models/        # Extra STL/DAE assets
└─ ...
-  
multi_robotexp.launch- Spawns 3 × TurtleBot3 in 
turtlebot3_house.world. - Starts Gmapping + 
explore_litein each/tb3_inamespace. - Runs 
multirobot_map_merge→/tb3/map. - Optionally brings up RViz with a merged-map view.
 
 - Spawns 3 × TurtleBot3 in 
 -  Fiducial mode
Replace Gmapping withfiducial_slam+ ArUco markers; useful for low-texture environments. 
5. Setup & Usage
# ❶ Clone & build
cd ~/catkin_ws/src
git clone https://github.com/yunusdanabas/multiexplorer_yunusdanabas.git
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src -r -y
catkin_make
source devel/setup.bash
# ❷ Run experiments
roslaunch multiexplorer_yunusdanabas single_robot_exp.launch   # 1 robot
roslaunch multiexplorer_yunusdanabas double_robotexp.launch    # 2 robots
roslaunch multiexplorer_yunusdanabas multi_robotexp.launch     # 3 robots
Add gui:=false to any launch file for headless runs on CI or servers.
6. Lessons Learned
- Namespacing is everything—isolating TF, map, costmaps, and topics prevented cross-talk.
 - Map alignment cost grows with robot count; naïve brute-force merge struggles beyond three robots.
 - SLAM parameter tuning (laser down-sampling, linear/angular update thresholds) was crucial for quality maps at higher speeds.
 
7. Visual Gallery