Here are five Udacity Self-Driving Car students that went above and beyond the project requirements by using trigonometry, color spaces, dashcams, buffers, and teaching other students.
Andrew digs way back into high school trigonometry to investigate the relationship between the multiple cameras used in the Behavioral Cloning Project. The result is a pretty awesome run:
“As the car is making a stronger turn from the center angle, it can be safely assumed that the distance between the center camera and its goal (point A) is shrinking in relation to when point A was a significant distance away from the car — when steering angle D was 0. This can easily be seen in how far away the most distant center point on the road is when the car is driving straight versus when it is in a 25 degree turn. After getting tired of manually calculating SOH CAH TOA/law of cosines and sines over and over again, I wrote a couple python scripts to chart out what the change in the angle would be given a center angle and a distance between each camera along with a distance to the goal at 0 degrees and the distance to the goal at the given angle.”
Joshua is a Nigerian PhD student at a Japanese university, making him a perfect example of Udacity’s goal of democratizing education. He also does a terrific job experimenting with various color spaces for isolating lane lines:
“We know that white is represented by (255,255,255) in both RGB and HSL colour space, but we have to ascertain the values for the yellow lane colour. To do this, I pulled out colour picker from the Inkscape software, just to have a visual representation.”
Chris bought a dashcam and super-imposed his lane-finding algorithm on one of his regular routes — up the 5 in San Diego:
“I found it eerily calming to safely watch a drive I do way too often. It’s like the difference between watching a horse and being dragged behind one. The video starts just after what I believe to be the most dangerous on-ramp in the world. Having survived that, we can check out the camera, my driving, and my algorithm’s ability to find lane lines.”
Kirill goes way beyond the requirements in his initial lane-finding project, and builds a computer vision pipeline that can identify lanes in all sorts of conditions. In particular, he develops a nice stability heuristic:
“Lane lines stability. This is an important issue to be addressed. There are several stabilization techniques I used:
1. Buffers. My lane line objects memorize N recent states and update the buffer itself by inserting a line state from the current frame.
2. Smarter lane line state updates. If we still get noisy data after our filtering efforts, line fitting can easily go wrong. If we see that the estimated slope of the fitted line from the current frame differs too much from the buffer’s average, we need to treat this line more conservatively. For this very purpose, I created
DECISION_MAT, which is a simple decision matrix on how to combine current line position and buffer’s average position.”
Robin has an easy-to-follow writeup of my sequence of videos demonstrating an iterative approach to completing the Behavioral Cloning Project. Start with some basic data, normalize it, augment it, add side cameras, and keep going:
“This is the stage at which the car began to make it around the track successfully for me. The behavioral cloning project is a great lesson in the fun and value in experimentation when working with deep learning. Altering model architecture and parameters help us build an intuition of how convolutions, drop out layers and subsamples work together to make a useful model.”