This project is a part of the course work of Aerial Robotics and Multi robot systems at University of Turku.
This project demonstrates a ROS 2 Humble-based simulation for coordinated multi-robot search operation using TurtleBot3 and a Tello drone in Gazebo. It integrates a Tello drone and a TurtleBot3 robot within a unified Gazebo simulation environment to demonstrate cross-platform coordination.The TurtleBot3 performs SLAM and navigation, while the drone assists in search operations. We utilize the TIERS drone_racing_ros2 repository for the Tello simulation plugin originally developed for ROS 2 Galactic and combine it with standard TurtleBot3 assets in ROS 2 Humble. Through careful adaptation, this setup runs successfully on ROS 2 Humble, offering a polished and functional demonstration of multi-robot cooperation in simulation.
-
Core goal:
- Spawn both Tello and TurtleBot3 in one world, and implement a drone mission to detect a fire hydrant and share its world coordinates using ROS 2 topics and TF pose-sharing for the TurtleBot to follow and arrive at the goal using Nav2 and finally publish a message as Goal Succeded once the Turtle bot reaches the fire hydrant.
-
Key capabilities:
- Tello: ROS-controlled flight, live camera streaming, vision-based object detection, and global position broadcasting.
- TurtleBot3: Gazebo spawn, subscription to drone’s destination location topic, reach the destination using the prebuilt map and Nav2 navigation.
-
Deliverables:
- ROS 2 launch file. It launches both the Tello drone and the Turtlebot, including the world in the gazebo environment.
- Python node controlling the drone to reach the goal, and then the TurtleBot reaching the goal using nav2.
- Documentation and demo recording of end-to-end operation.
Ensure you are using ROS 2 Humble on Ubuntu 22.04. https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html
Then follow the steps below.
Open a terminal and install the fllowing. (Dont forget the star '*' after gazebo-)
sudo apt install ros-humble-gazebo-*
sudo apt update
sudo apt install ignition-fortress \
ros-humble-ros-gz-sim \
ros-humble-ros-gz-bridge \
ros-humble-gazebo-ros2-control \
ros-humble-gazebo-ros2-control-demos
sudo apt install libasio-devsudo apt install ros-humble-cartographer
sudo apt install ros-humble-cartographer-rossudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringupmkdir -p ~/open_project_ws/
cd ~/open_project_ws
git clone https://github.com/VASISHTAKODUMAGULLA/open_project.gitcolcon build --symlink-installsource /opt/ros/humble/setup.bash
source install/setup.bashexport ROS_DOMAIN_ID=69
source /opt/ros/humble/setup.bash
source install/setup.bash
source /usr/share/gazebo/setup.sh
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.pyOpen a new terminal:
export ROS_DOMAIN_ID=69
source /opt/ros/humble/setup.bash
source install/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=TrueOpen a new terminal:
export ROS_DOMAIN_ID=69
source /opt/ros/humble/setup.bash
source install/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 run turtlebot3_teleop teleop_keyboardControls:
w
a s d
x
w/x: Move forward/backwarda/d: Turn left/rightspaceors: Stop
Open a new terminal:
export ROS_DOMAIN_ID=69
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 run nav2_map_server map_saver_cli -f ~/mapAlso you can use the map.pgm file and map.yaml files if you are just testing my own exact simulation. For simplicity, drop them in your Home folder and you are good to go!
Open a new terminal in the root work space directory:
export ROS_DOMAIN_ID=69
source /opt/ros/humble/setup.bash
source install/setup.bash
source /usr/share/gazebo/setup.sh
export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_gazebo open_project.launch.py❗Ignore any spwaning errors that you see in the launch terminal if you see the gazebo is launched with both tello and turtlebot and check if the next steps are working, since this is expected in some environments.
In a new terminal:
export ROS_DOMAIN_ID=69
source /opt/ros/humble/setup.bash
source install/setup.bash
export TURTLEBOT3_MODEL=waffle
ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=$HOME/map.yaml- Click 2D Pose Estimate
- Click on the map where the turtlebot starts and drag the arrow to indicate its direction
- Repeat until the LDS scan overlays correctly on the map
In a new terminal:
export ROS_DOMAIN_ID=69
source /opt/ros/humble/setup.bash
source install/setup.bash
cd ~/open_project_ws/open_project/src/scripts
python3 tello_searching_work.pysimplescreenrecorder-2025-06-12_19.58.12.mp4
- ROS 2 Humble multi-robot simulation.
- SLAM using Cartographer
- Navigation using Nav2 library has been achieved where finally the goal is reached by the turtlebot based on the broadcasted TELLOs global pose.
- Inter-robot TF pose sharing
- Tello drone for search and rescue
- Map saving and reuse for navigation by the turtlebot.
- Always ensure
ROS_DOMAIN_IDis consistent across all terminals. - Adjust the
TURTLEBOT3_MODELenvironment variable as needed (burger,waffle, orwaffle_pi). - Use the saved map YAML path correctly while launching Nav2.
- You can extend the inter-robot pose communication using ROS 2 services or topics (
geometry_msgs/PoseStamped).
- Multi-drone extension: spawn additional Tello instances with unique namespaces for an extensive search in vast operation areas.
- Communicating back: Turtlebot3 after reaching the position need to communicate back to the robot establishing complete cycle of multirobot communication.