The last updates in the Burro autonomous robocar platform focus on two areas: Collaborative driving and fully autonomous driving (steering and throttle). Collaborative driving allows control of a single vehicle using multiple controllers and a self-driving model, all at the same time. Using this feature, one may have a neural network control the steering and intervene only when the network steers undesirably. Alternatively two operators may collaborate in controlling steering and throttle.
The final steering angle is simply the sum of the individual steering angles output by controller/models. Throttle value is calculated as the minimum of all controller and model values. This is for safety reasons – the user has control of the throttle if it is less than the model-predicted value, and if the user has confidence in the model, they may push the throttle to the max, and allow the model to take full control.
Autonomous throttle computation is the second update in Burro, and the main topic of this post. Burro computes throttle values using the predicted steering angle and prediction confidence. The rest of this post outlines the details of the algorithm.
Throttle computation is based on an idea that has been going around in the Donkey community some time ago. Model output in case of both Donkey and Burro is categorical. In categorical output, the neural network has n outputs, each corresponding to an angle. The software assigns steering angles based on the output with the highest value. Specifically, just before the computation of the angle the final angle the software converts raw output values from the neural net to probabilities. This is done using a softmax function. A high probability means that the model is confident in it’s decision. Thus a reasonable decision given the confidence of the model is to increase the throttle.
In addition to confidence-based throttle control, Burro limits the throttle according to predicted steering value. Hardest steering corresponds to lowest throttle values. For the model to output a high throttle value, two conditions must hold true: The steering angle value should be low (large steering radius) and the model confidence high.
The relevant python code that performs this computation is below:
yaw_binned is an array containing predicted categorical values.
yaw is the steering value in the range
config.model.throttle_mult value is a multiplier for limiting the max model-predicted throttle value.
Fully Autonomous Driving
In the video below a small-scale autonomous car performs a few fully autonomous laps on a printed track. The convolutional net controls steering and throttle. The video also demonstrates a new angle smoothing method included in the latest version of Burro.
This post went over recent updates in the Burro platform and specifically autonomous throttle using steering prediction confidence and steering angle. It is rewarding to finally see the little cars driving fully autonomously through the track. In the next development steps the default Burro driving model will be further advances with features such as obstacle avoidance.
What do you think of the capabilities of neural networks in the field of autonomous vehicles? Share your experience in the comments below.