About a month a ago, one university in our city organized event called “Machine Learning Challenge(MLC)”. Our teacher on the Machine Learning course, encouraged us(me and my friends) to take part in this Challenge. He also suggested us to implement Self-Driving Car.
At first, it sounded very interesting but hard to do. But he told us about David Singleton, who made it in one weekend. And he gave us the post, where he was writing about how he did it. You can read original post here.
David Singleton shared his code on GitHub, so anyone can download it and implement his own Self-Driving Car. That is what we actually did. The instruction is presented there.
Here, let me say how it works and what we did in details
First step, we bought a cheap car in local store, that was red Hummer(oh, yeah!). We needed control over it by PC, so we disassembled radio controller of the car and added some “Arduino Magic”. After this, arduino that is connected to PC and radio controller gave us control of Car over PC(up, down, right, left on keyboard).
Second step, here starts Machine Learning part. We had a code(from David Singleton’s Repository) to retrieve training data for our Neural Network(on what car drives by itself). It is consist of Java Application and Android Application. Android Application is installed on phone, that is attached to our Car. Then in RECORD MODE it sends data(as pixels from camera) to Java Application. Java Application also triggers Keyboard presses, so that we know at what picture which key was pressed.
Third step, using data we acquired in step two, we build neural network. David Singleton made it on Octave, because he was passing Machine Learning course by Andrew Ng(which I almost passed), and there was an assignment to implement neural networks code. He just used that code, and processed data through it. We also did the same thing, but we downloaded code from other sources(because he did not provide his code, due to Coursera Honor code).
Fourth and final step, after we process data through Octave, we have values for our Neural Network. We just put them in Java Application, and we can start AUTO MODE, which will drive our car. And here we are - Self-Driving Car.
By the end, we did not have a good self-driving car. It drives by itself, but not quite accurate. At least, we tried. The problem is in our Neural Network implementation(I think).
Of course, some details are missed, but if you want to study more about this topic here are some links: