A few months ago I got a scholarship and enrolled for Udacity iSDC program. This is an introductory course that covers the basic concepts needed to dive into the study of Self Driving Cars and Self Flying Cars.
At first, I was sceptical about taking the challenge. Going by what had frequently been reported on the media, I was of the impression that Self Driving Cars require well tarmacked and well-marked roads for them to safely navigate. Considering that the majority of the roads in my country (Kenya) are not well tarmacked and those that are tarmacked, it is common to find that the marking is not well done (unless you are in Nairobi or using Thika Superhighway). This fact made me doubt the essence of taking up a Nanodegree that I may never get to implement.
The first few lessons gave me a very different view on how things are done in the Self Driving Cars universe. Among the first videos that I watched was a documentary covering the 2005 DARPA Autonomous Cars Challenge. This video covered how a team led by Sebastian Thurin were able to design and deploy a Self Driving Car (Stanley) that later went on to win the $ 2,000,000 grant.
This video shows how different autonomous vehicles raced each other in a desert to compete in the challenge. After watching this video there was a moment of reflection where I retrospected and asked myself if Team Stanly could make an autonomous vehicle and race in a desert, then clearly there is room for such vehicles in Africa.
I dived in and shortly afterwards I was able to write a small program that given a photograph of a road, it could pick up where the lanes were on the road. This was then followed by another task where we were to write code that could be used to park a demo park (parallel parking is already difficult to humans, writing code that could achieve this was not an easy task). Without knowing it I was writing code using Kalman Filters to be used for navigation (localization is the word Sebastian used) and also code for reading traffic lights and planning routes.
One of the most trivial times during the course is when after spending weeks of writing code in Python (the Kalman Filter), I was required to translate this code from Python to C++. For a long time I had been made aware that Python is good for prototyping but if you want to achieve great performance (speed and memory efficiency) then C or C++ is the language to use. The components used in self-driving cars have very limited resources and in a memory, hungry language such as Python can really cause havoc in such a system. The idea of writing the entire code all over again made this task more mundane. Let me not get started with how C++ is very strict. A simple task such as making a list could easily be done with
+ list = 
+in Python but C++ wanted
+vector <double> list
+to declare the same list.
At the moment I am still enrolled in the program and look forward to finishing the remaining projects in November 2018. The iSDC program has given me an opportunity to appreciate open source work. Most of the libraries used to get the cars driving on their own are works which the owners were generous enough to make open source. The course also gave me a rare opportunity to see how an idea that is easily described as impossible can be broken down into small manageable tasks whose accomplishment leads to achieving great feats. Even though my lovely continent of Africa may still be a long way from having self-driving cars roaming around as a norm, I am glad to have had an opportunity to peek into this new phenomenon of autonomous vehicles.