I was part of a team, of 5, that worked on building a self driving go-kart from the ground up for the Purdue ev-Grand Prix. I got to cover a lot of ground and learn many new skills and utilize new technologies. While I worked on all aspects of the Kart, from hardware to software, I mainly focused on the computer vision system and surrounding machine learning algorithms. Working on both the LiDAR system and regular view cameras for object detection. We also utilized imitation learning with an experienced driver in the kart to create large reinforcement learning datasets allowing for better racing line and track detection.
The bulk of the software development occurred in Python and C++ using ROS (Robot Operating System). Where each individual component was a ROS node publishing its data to be read by the system, for example all location data was written in C++ and the ROS node continually published that information, which was read by other nodes such as the path planning algorithm, utilizing the data to identify Kart position within roadway boundaries. Generally each team member worked individually creating areas of expertise, meeting throughout the week to review progress and assign task priority.
One of the major pieces I worked on was the computer vision aspect both on the LiDAR camera and real vision cameras. I trained a machine learning algorithm using YOLOv4 to detect cones (potential obstacle and roadway bounds identifiers) using a large variety of images. Then using OpenCV I was able to read the video stream, identify the cones which represented the roadway boundaries this information was then published via a ROS node where the path planner used this information to navigate the course by pathing between the closest left most cone and closest right most cone.
In addition to working with the real vision cameras I also worked extensively with the LiDAR camera. Our system utilized both a Velodyne VLP 16 Puck and a VLP 32C Ultra Puck, which collected hundreds of thousands of datapoints every second giving location and distance information, utilizing Python. This information as published with a ROS node in Python. Then this data was utilized to identify the boundaries of the roadway as well as the exact distance between the kart and the boundaries, making sure that the planned path fell within these boundaries and continuing on a projected course.
Coming in to this project I knew very little about the electrical and physical requirements that would be associated with completion, but I was able to learn from some more experienced team members and develop a series of new skills. First and foremost, I learned to solder which became an important piece as we built and rebuilt the kart along with rewiring each computer box to the batteries. I also was integral to planning the layout of the LiDAR camera mounting on 80/20 bars in order to allow for an infinitely adjustable setup, allowing us to test different mounting positions and angles.