The Lake Rescue Challenge simulates a rescue mission in which an unmanned aerial vehicle (UAV) assists search and rescue teams in locating stranded people on a lake. Participants must pilot the drone to find people scattered across the mission area and communicate their exact location. Using ROS 2 Humble, competitors must meet strict criteria for accuracy, speed and data reporting.
The maximum achievable score is 100 points. Points are awarded according to the following criteria:
The coordinates of the target points in 3D space will be published on the /avader/locations_to_visit
topic with geometry_msgs/msg/PoseArray
as the message type.
Participants must guide the UAV to each of these locations with a tolerance of 0.4 metres.
- Scoring: 40 points divided by the total number of points to be visited. For example, if there are 10 points, each visited point will earn 4 points.
During the flight of the UAV, objects will be visible in the camera feed available on the /camera
topic. The participant's task is to count the total number of visible objects in the entire search area and publish the count to the /avader/people_count
topic using std_msgs/msg/Int32
.
- Scoring: 20 points for correctly reporting the total object count.
Participants must publish the location of each detected person in the local NED coordinate frame to the /avader/location_objects
topic. The local NED
origin is defined as the start position of the UAV, and object locations should be provided with an accuracy of 0.8 metres. The position of each object should have a height Z = 0
.
- Scoring: 30 points divided by the total number of objects; for example, if there are 6 objects, each correctly reported location will award 5 points.
Faster completion times are rewarded, with a maximum flight time of 180 seconds to complete the mission. Flight time points are awarded as follows
where:
- team_time: Time taken by the team to complete the task
- min_time: Minimum allowed time (10 seconds)
- max_time: Maximum allowed time (180 seconds)
-
Challenge Start: On the topic
/avader/challenge_start
, a True variable of DataType Bool will be published when the challenge starts, indicating that the participant can control the UAV. -
Drone Control: Participants control the UAV by publishing global positions to the
/avader/trajectory_setpoint
topic using thepx4_msgs/msg/TrajectorySetpoint
message type. -
Drone Position: Position of UAV can be listened on the topic
/fmu/out/vehicle_local_position
. -
Camera: The camera feed is available on the
/camera
topic, and camera parameters are accessible on the/camera_info
topic.<pose>0.12 0 -0.242 0 1.57 0</pose>
specify the camera's positional offset from the drone in the local NED frame. -
Objects counting: Localization of each individials should be published on
/avader/people_locations
topic using thegeometry_msgs/Pose
in the local NED. Location of every person should be published only once, in other case points will not be scored.
Important
DO NOT edit avader package. You should only edit solver package.
This repository contains a Docker environment with ROS 2 Humble, Gazebo Harmonic, and PX4, providing an out-of-the-box setup for UAV simulations.
Important
The recommended operating system is Ubuntu for full GUI support. Running on Windows requires a different configuration approach.
For Linux/Ubuntu systems, use the .devcontainer
folder, which contains 4 .yaml
files that differ by version.
- [compose.yaml] - configuration for GPU and building the image from the
Dockerfile
- Initial Setup - [compose.nogpu.yaml] - configuration for CPU and building the image from the
Dockerfile
- Initial Setup - [compose.image.yaml] - configuration for GPU and running the image from the file - Docker Image from File
- [compose.image.nogpu.yaml] - configuration for CPU and running the image from the file - Docker Image from File
For Windows systems, use the .devcontainer_windows
folder, which contains 4 .yaml
files that differ by version.
The .devcontainer
folder should be deleted, and the .devcontainer_windows
folder should be renamed to .devcontainer
.
- [compose.yaml] - configuration for GPU and building the image from the
Dockerfile
- Initial Setup - [compose.nogpu.yaml] - configuration for CPU and building the image from the
Dockerfile
- Initial Setup - [compose.image.yaml] - configuration for GPU and running the image from the file - Docker Image from File
- [compose.image.nogpu.yaml] - configuration for CPU and running the image from the file - Docker Image from File
- Download the file from Google Drive: Docker Image - Rescue Challenge.
- Run the following command in the terminal, which may take up to 20 minutes:
docker image load < rescue_challenge.tar
- In the
devcontainer.json
file, select the appropriatecompose.image*.yaml
file for thedockerComposeFile
argument. - In the lower left corner, click the blue icon with two arrows pointing toward each other.
- Select "Open Folder in Container..." from the dropdown menu and wait for Docker to build the container. (This may take up to 10 minutes with slower internet connections.)
- Run the following commands:
cd ~/ros2_ws/
sudo ./setup.sh
- Open VS Code in the project directory.
- In the lower left corner, click the blue icon with two arrows pointing toward each other.
- Select "Open Folder in Container..." from the dropdown menu and wait for Docker to build the container. (This may take up to 10 minutes with slower internet connections.)
Tip
For Windows users with WSL 2, use theDockerfile.windows
andcompose.windows.yaml
files.
After the container builds, run the following commands:
cd ~/ros2_ws/
sudo ./setup.sh
./build.sh
source install/setup.bash
Before first start of the simulation you have tu execute below command. It's needed only before first start.
cd ~/PX4-Autopilot/ && make px4_sitl
ros2 launch avader x500.launch.py
Terminal correctly starts and launches PX4 but Gazebo GUI is not showing:
ps aux | grep gz
If there is more than one develop+ task then you have to kill it manually:
kill -9 <PID>
<PID>
- you have to replace with the number next to the develop+, it is second parameter from left eg. 9378.
This docker requires nvidia graphics card so if you do not have, you have to edit .devcontainer/compose.yaml file. You have to remove following line:
runtime: nvidia