DIY Self-Driving - The next iteration
Please Note: Unlike most of my projects which are fully complete before they are published, this project is as much a build diary as anything else. Whilst I am attempting to clearly document the processes, this is not a step-by-step guide, and later articles may well contradict earlier instructions.
If you decide you want to duplicate my build, please read through all the relevant articles before you start.
Things have been a little quiet on the self-driving front for the last month, but the project is still moving ahead.
Mechanical IssuesI guess it had to happen. Prolonged running of this old car has taken it's toll on the drivetrain and the gearbox has stripped. As you can imagine, this makes it rather hard to move anywhere. It's not the end of the world, because these units are pretty common. I am going to try and get a pair of them and convert the car to 2 wheel drive into the bargain. All the cutouts are already there, so in theory at least it's not that big a task.
Design ChangesHowever, the gearbox failure has led to another problem. If I am going to go to two motors, I need to revisit how everything is powered. I am also looking at adding a lot more electronics which will make my 6V electrical system rather doubtful, so I am planning on reworking the whole car to 12 volts.
This is going to cause me some challenges for the 6 volt motors driving, so I have a couple of choices. I could regulate the motor voltage using a switch-mode supply or similar and retain the same basic drive scheme or I could change the motor drive to a PWM scheme and use a higher frequency drive for the motors. Not sure which approach is better at this point, and I would welcome experienced suggestions.
The basic software does an OK job of finding the path to follow, but at present it has it's limitations. Firstly, it is not aware of the environment around it, which makes it less autonomous than I am aiming for.
An obvious solution to this is to implement a Machine-Learning (ML) based image recogniser which can identify traffic lights, signs, vehicles and the like, and then command the driving logic to react accordingly.
After AWS Summit I have been offered a number of really interesting devices to further the car's development. I am now the proud owner of a pair of Intel Movidius Neural Compute Stick (NCS):
This device is not much bigger than your typical USB drive, but it contains a visual processor designed for deep learning an analysis in edge systems. Using models developed on a host system, the processing can be done locally instead of having to either send over the network or carry around a huge GPU-Equipped machine. Also thanks to my friends at Intel I have a NUC i5 system to host it with. There's going to be a few challenges with power (the NUC needs 19 volts) but I am sure it's achievable. The NCS will also work with a Raspberry Pi, so I will be testing back-to-back to see which is the best solution for the car.
Further into sensing the world around us, I also now have a YDLIDAR X4 LIDAR unit.
To be fair I have have very little time with the X4 at all yet, but it does seem very impressive for it's $US99 price tag. It is intended for smart appliances and small mobile robots, which makes it a good start for my car. While it's not in the same league as the Velodyne unit, I feel like now I am running with the big guys on this project.
These devices are however quite power-hungry. The NUC/NCS combintation requires a little over 2.5A and the LIDAR unit alone draws 1.6A from it's micro-USB connector, so clearly it is back to the drawing board as far as power supplies go.
These new components mean that a comprehensive rewrite of the car's software is in order. The LIDAR produces an order of magnitude (or more) additional data than the current camera setup, and to be honest I am not quite sure how to deal with it yet. There is a lot of experimentation and article writing to come on this subject.
In summary, bear with me folks, we're about to go down a load of new roads with our little car, and I promise to take you all for the ride with me!