A Review of Udacity’s Self-Driving Car Nanodegree — Third Term and Beyond!
It’s over! :( TLDR: I think it’s definitely worth it, but temper your expectations. First, I talk about the three projects. Then, I talk about jobs. 😱😱😱😱😱😱
The first project’s goal is to create a path planning pipeline that would smartly, safely, and comfortably navigate a virtual car around a virtual highway with other traffic.The path-planning isn’t as straight forward as the other projects; we were presented many ideas about predictions, trajectory generation, and behavior-planning but left in the dark on how to actually use them for this specific project. Luckily, the SDCND Slack team was so vibrant and lively with a lot of people sharing their ideas, approaches, and findings. As a result, different students came up with different ways to solve the problem achieving the same goal and not necessarily using the ideas from the lessons. I think this is awesome, it reminds of that cute barometer story.
Though, I was disappointed with what happened in the Bosch Challenge. Out of 66 submission, only 6 finished, and for some reasons some submissions did not compile properly. Some received feedback that their code did not compile, or did not finish the track, and some including myself did not receive feedback at all.
It’s okay for me, since I did not put that much effort in it.The only difference from my submitted project, instead of using the instantaneous measured gap of my vehicle with the nearest vehicles in each lane, for additional safety, I used a computed “effective gap” that adds additional distance based on the vehicle’s current velocity and assumed latency* (That and some parameter tweaks and changes in cost computation). I feel bad for the other students though.
So there are two electives, semantic segmentation, and functional safety. Functional safety is interesting but I chose semantic segmentation, because it is a coding project, the functional safety project is to write a document.
I learned about the concept of functional safety, and functional safety frameworks to ensure that vehicles is safe, both at the system and component levels. For semantic segmentation, we were to use a Fully-Convolutional Network (FCN) script to label the pixels of roads in images.
To complete this project I read some additional materials online. To be honest, even after reading so much, I still only understand FCNs at a superficial level. If you are inclined, here are the resources which I found most helpful:
Refresher of TensorFlow
Semantic Segmentation Concepts
- Semantic Segmentation in 2017
- Transpose Convolution in Tensor Flow
- Video from a Stanford class about Semantic Segmentation
- An Actual Paper about Semantic Segmentation
For this project, we were given template code and we just had to fill-out the necessary parts. I feel like I’m not in a good position to comment about the code structure as I haven’t done that much Tensorflow, but some people who has been coding for a really long time did mention that the template for this specific project could be written in a better way.
Systems Integration Project
What I loved most about this project is that it is a team project. At first I was a bit apprehensive about it, thinking nobody will want to be my teammate. I was really thrilled when Lukasz invited me to join his team, Kung-Fu-Panda Automotive. I was really excited to work with people from different countries and different walks of life. Me from the Philippines, Lukasz from Switzerland, Kostas from Greece, Maurice from Germany, and Alexey* from London (Alexey left as he had personal things to attend to at that time and eventually led his own team). I was really lucky that I ended up with a really passionate group with members I had great time working with. We didn’t have problems that other groups had like members not replying, arguments, conflicts, stuff like that.
I will quote my teammate Kostas as we have a similar sentiment regarding this final project (he wrote this article) and I think he couldn’t have phrased it better:
“Unfortunately, as a part of the first cohort, this project is not as interesting as it could be. Every team of five (5) persons has to tackle two basic problems (a) program a controller for the car (b) identify traffic lights and make the car stop at predefined positions. Just that. No sensor fusion, no other cars, no path planning. It feels limited for a team of five. Hopefully that might change in future iterations of the nanodegree.
The hardest part in this project was actually the lack of specification and the continuous guessing, because we could test our code in the simulator but the specifications of the car are not determined fully. For example, we are asked to provide throttle in percent but we do not know what throttle 1.0 (100%) corresponds too. Normally when you press throttle all the way down in a car, you command the engine to provide all available torque to the driving wheels, but that value depends on current speed, shift, rpm and maybe more values. We have no clues on how the car behaves and every team tries to address that problem instead of having clear specs.” — Kostas Oreopolous
So, do you have an SDC job now?
Okay, first of all, please stop, I’m having a panic attack! 😱😱😱😱😱😱
Getting a job in this field is not so easy especially coming from the Philippines. But of course, it’s possible, as this woman from India just did. Be wary of survivorship bias though. While I did get some invitations for jobs, none of which are willing to sponsor my visa. Also, I haven’t spent nor am I planning to spend energy looking for an SDC job soon. I’ll explain why later.
If you enroll in SDCND in hopes to land that 100k USD salary (especially if you’re not from USA or Europe) then prepare to be severely disappointed. However, if you are enrolling because you have a genuine interest in this field, then you’re going to have an exhilarating time.
But how to get a job in SDC anyway? In my mind, I generally classify SDC jobs to three main types: (a) Perception and Machine Learning Stuff, (b) Hardcore Software Engineering Stuff, (c) Research and Development Stuff. Of course, that is to not to say that there are no other types of SDC jobs such as mechanical engineer or electronics engineer jobs. It’s just that the types of jobs I mentioned earlier are what I commonly see in SDC job descriptions. I don’t think getting a job in any of the three main types require you to enroll at Udacity ;).
(a) Perception and Machine-learning Stuff
A self-driving car requires the car to understand its surroundings in order to make decisions. This is something human drivers take for granted but self-driving companies are still perfecting to ensure safety of passengers.
In my mind, I call this the “George Sung Path”, he also took the SDCND and eventually became a self-driving car machine-learning engineer at BMW.
If you want to go in this path you can learn Tensor Flow (check these links Learning Path, Fast.AI); and then eventually apply what you’ve learned on your own open-source project and/or participate in Kaggle Competitions.
“ Much of the interview was also spent on discussing my past projects in deep learning and computer vision — my motivations, the process I went through, how I could improve upon the projects. One particular question that came up repeatedly was “how did you go beyond the coursework requirements?”, or similarly “which of your projects were not part of your coursework?”. An important trait is to be genuinely curious about the topic, such that you go above & beyond the project requirements and/or create your own interesting project(s)” — George Sung
(b) Hardcore Software Engineering Stuff
According to Paysa, over 90% of the self-driving-car job applicants need to know C++. Also, C++ is a compiled, high-performance language, so most code that actually runs on the vehicle tends to be C++.
Be really really good and learn the nuances of C++, and be prepared for the coding interview. In my mind, this is the “Googley as Heck Path”. You must have a really solid foundation in data structures and algorithms. For this path, I think the following resources will be the most helpful:
- Cracking the Coding Interview
- Coding Interview University
- Software Interview Unleashed
- Algorithms and Data Structure Coursera Specialization
(c) Research and Development Stuff
This is the more traditional path and the one that I’m interested in pursuing the most (but will fall-back to path (b) if things don’t work out as I hope). This requires a Master’s degree, preferably in robotics and non-negotiably from a reputable university. If you want to be able to have a solid grasp of different ideas from very brilliant people on how to solve engineering problems and then hopefully be able to add to the state-of-the-art-and-ever-evolving body of knowledge, then this I think would be the best way to go. Also, I want to pursue this because I’m most interested in control and motion planning in an uncertain environment. I hope to be able to work with like-minded people in a great robotics research lab in the near future.
This article might be a bit of a hodgepodge but I just wanted to share my thoughts about SDCND and SDC Jobs. It’s truly a great learning experience. However, if you are just thinking of spending 2,400 USD in hopes of getting that 100k USD salary, then you should probably spend your money on something else (see my recommendations above).
I will end this article with a quotation from my teammate Kostas again:
“I almost forgot. The best part of the program are fellow students. They all share the same passion to learning, regardless of age or learning backgrounds. The Slack channel is the best part of the course. You exchange ideas with other people, you help and you are being helped. That is what makes the experience 100 times more interesting from being done in isolation.”