TOM, ANDREW, AND JAY's Duckie Bot

TJA Presentation

Tom Zhao and 2 OthersAndrew Ahn
Mu-Chieh (Jay) Huang

The Duckie-Bot is a small-sized robot which was inspired by the self-driving technology. It is made up of two motors and two wheels, a Raspberry Pi computer with Pi Camera, and a battery as a power source. The Duckiebot can drive around in the Duckietown where the sides of the lanes are marked by white and dashed-yellow lines and the crossings are marked by a red line. The final version is to enable the car to drive straight, detect signals, and make turns properly without human interference. In NuVu Studio, we first focused on how to let the Duckiebot detect and follow the lines. This single task requires a basic understanding of computer vision and a pipeline process in which the lines on the image could be indicated. The pipeline process includes blur, grayscale, crop, Canny edge detection, hough line transformation, draw lines, and find the intersection. The accuracy of this task depends on not only the completion of the pipeline function but also tuning and refinement of this process, potentially including the unwarping of the camera image, a better indication of the edges in the image before edge detection.

Throughout the studio, we learned the basics of computer visions, particularly how to use OpenCV to process image. We first achieved the goal of using the stick to control the robot, and then we enabled the camera video stream rendered on the computer. Then we successfully implemented the pipeline on the camera image and found out how to unwarp the image from the fisheye camera. We also go over the convolutional neural networks and how it could be trained in order to make object detection which could be used in detecting signal lights.

We faced a lot of bugs and challenges. During this process, we have to manage the version of each library and their compatibility on the Duckiebot; the line detection sometimes could not work properly or consistently so we have to reselect the region of interest or add another filter in the pipeline. Overall, we learned how to make line detection work.