About Me
I’m a software developer with several years of C++ expierence in the automotive industry and a passion for all things autonomous. As an undergraduate student at Oakland University and President of the Smart Vehicle Club, I’ve led our team to improve all aspects of our autonomous vehicle platform which competes in the IGVC Self Drive competition. From electrical engineering to machine vision, I’ve made personal contributions to every component of the vehicle. When I’m not working on our AV platform, I’m usually knee deep in teaching myself machine learning or attending hackathons.
The Guts: links to a file that is key to the functionality of the project.
The Repo: links to the GitHub repository.
Intelligent Ground Vehicle Competition
LiDAR
In my first year as a member of the Smart Vehicle Club, I took on the role of the team leader for Perception. I wrote a C++ ROS node which reads the LiDAR data points from a Cepton LiDAR and creates an occupancy grid surrounding the vehicle. We fuse this information with object detections from a custom trained YOLOv3 object detection model to both detect and localize objects around the vehicle.
Below is a visualization I created utilizing the Waymo Open Dataset and Open3D
Vision
When I joined the team I started by updating our vision system to use a modern CNN + Object Detector. At the time YOLOv3 had the best real time performance. We had no dataset so we used transfer learning from the YOLO model pretrained on the VOC dataset and retrained it on images that we hand labeled from Google Images. The end result was a detection network that functioned “Good enough”. There were however some class imbalance issues that caused the network to misclassify the directionality of one way signs.
RADAR
The platform had 360 degree RADAR coverage provided by six Continental ARS430 RADARs. The IGVC competition does not require tracking of any moving objects and we found the RADARs to be too noisy for ranging static objects. This was only possible though by developing a RADAR visualization tool. I wrote a visualizer in Python using PyGame. It allowed us to assign various RADAR parameters like RCS and relative velocities to RGB color channels which was useful in attempting to filter out false positive datapoints.
Electromechanical Design
After the 2019 competition year it was clear that our platform had a problem. Electrically it was a hacked together mess of Arduinos and circuits held together with hopes, dreams, and in some cases duct tape. At one point a USB hub literally caught fire. The most glaring issue though was that the steering was so slow the car could not navigate the timed course as fast as our competitors. So in my time as President of the club, in preparation for the 2020 competition year, we completely overhauled the electrical system, installed a new more powerful steering motor, and wrote microcontroller firmware to control these systems over an Ethernet connection from the host computer.
YouTube: First System Test
The Guts
The Repo
Personal Projects
Drowsy Driver Detection
At the Grizzhacks 2 competition our team won first place overall and best mobile hack. I wrote the algorithm for detecting the driver’s blink rate using a Haar Cascades in OpenCV and tracking the deviation of brightness of the detected eyes. Peaks in brightness detected by a spike in the standard deviation of overall greyscale values triggered a detected blink.
Reinforcement Learning
I find reinforcement learning to be very interesting. Under a robotics professor at Oakland University I performed a self guided study of reinforcement learning which included solving a classic Gridworld problem, CartPole, and LunarLander (discrete). The solved Lunar Lander was done using a DQN model implemented with Keras (Tensorflow backend).
I also created my own reinforcement learning environment for a parking lot simulation. This simulation is cross platform. It generates C++ Python bindings using SWIG so that you can interface with the simulation using the same API as the Open AI gym. The 2D courses can be designed using a vector graphics program as they are loaded using a standard .svg file. The agent that I trained on this simulator is the tf.agents DDPG agent, but it’s uhhh… still “learning”.