This project implements an autonomous delivery robot architecture, originally designed and developed to run on a physical robot at the Intelligent Robotics and Intelligent Systems (IRIS) Lab of the University of Aveiro. It features an autonomy stack using ROS 2, Behavior Trees, and Nav2, alongside a YOLO-based vision tracker and a real-time Angular web dashboard.
To eliminate dependence on physical hardware during development, the entire stack was built and tested in a 3D Webots physics simulation.
- Behavior Tree Orchestration: Built with
BehaviorTree.CPP, to manage multi-step navigation and interaction sequences. - Dynamic Task Preemption: Implements a priority-based queue (Normal, High, Critical). Critical tasks immediately preempt the robot's active mission.
- Active Environmental Interaction: The robot actively evaluates door states using LIDAR data. When a door is detected as closed, it verifies that the doorway is free of obstructions before executing a physical maneuver to force the door open.
- Vision-Based Target Tracking: Integrates YOLOv8 with an Astra RGB-D camera to identify human recipients or markers. Pixel detections are projected into 3D global map coordinates, and a safe approach pose is dynamically generated using the Nav2 global costmap.
- Angular Dashboard: A web-based operator interface connected via
rosbridge_suite. It allows operators to dispatch tasks, view the live priority queue, monitor the robot's position on a 2D SLAM map, and stream the annotated YOLOv8 camera feed.
- ROS 2 (Jazzy): Core middleware and message passing.
- Nav2: Path planning, obstacle avoidance, and costmap generation.
- Behavior Trees (BehaviorTree.CPP): Task orchestration (navigating, waiting for doors, human tracking...).
- Webots: 3D physics simulation.
- YOLOv8: Real-time person and object tracking (
delivery_vision). - Hardware: Tiago Lite (PAL Robotics)
- Angular: Real-time web dashboard for monitoring and dispatching tasks.
- roslibjs / rosbridge_websocket: Bridges the Angular web app to the ROS 2 DDS network.
To run the simulation and web dashboard on any Linux machine, you need:
- Docker and Docker Compose.
- NVIDIA Container Toolkit for GPU-accelerated rendering and YOLO inference. Installation instructions here in the official NVIDIA docs. After installing, you must configure Docker to use the NVIDIA runtime:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart dockerThe project is split into two main services:
- ROS 2 / Webots Backend
- Angular Frontend
Docker Compose launches both simultaneously.
The setup.sh script automatically configures Docker GUI access by extracting your X11 authentication cookie into a Docker-specific Xauthority file, allowing RViz, Webots, and other graphical applications to run securely inside the container.
Run the following command:
chmod +x setup.sh
./setup.shStart all containers:
docker compose up --buildOnce the containers are running:
- RViz and Webots will automatically open on your desktop.
- Open the robot dispatch dashboard in your browser:
Dashboard: http://localhost:4200