DuckieBot with ROS & YOLO

Project attribution: Project done with Ahmed Ghanem.
Source: The project’s files are available here.
Short description: DuckieBot with ROS2 and YOLOv5
Technologies: Python, ROS2, YOLOv5
What I did: I assembled the DuckieBot, extended its ROS2 architecture to use a YOLOv5 model, I made a custom dataset and trained YOLOv5 on it.

We assembled a Duckiebot as part of the Embedded Visual Control course at TU Eindhoven.

We trained a YOLOv5 computer vision model on a custom dataset with traffic signs. Initially, we used this traffic signs dataset available on Robotflow. However, I deemed it insufficient for our case, so I extended it by annotating custom traffic signs on our own. You can see the final dataset here. My dataset includes more angles, more distortion, and images that closer resemble the environment that the Duckiebot would drive in. This makes it much more precise in its distinction between particular traffic signs, e.g. 20 km speed traffic sign vs 30 km speed traffic sign.

DuckieBot

The DuckieBot taking a left turn because it detects a left-turn sign.
Controlling the DuckieBot with the 20 km speed sign and the stop sign. The DuckieBot accelerates when detecting the 20 km speed sign and stops when detecting the stop sign.
The DuckieBot stops when detecting duckies, because it doesn't want to injure duckies :)

ROS

The graph of ROS2 nodes running on the DuckieBot.

YOLO model

Confusion matrix of the YOLO model. Notice that duckies are often confused with the background.
Precision-Recall curve of the YOLO model.