The last updates in the Burro autonomous robocar platform focus on two areas. One is collaborative driving of a single vehicle using multiple controllers in addition to a self-driving model, all at the same time. As an application example, one may have a neural network control the steering and intervene only when the network takes a wrong steering decision. Or, two operators may collaborate one controlling steering and another controlling 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 done 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 then the model takes complete control.
The second topic, and the one this post is mostly concerned with, is autonomous throttle computation. This is achieved using the predicted steering angle and prediction confidence. The rest of this post outlines the details of the algorithm.
Computation of model throttle is based on an idea that has been going around in the Donkey community some time ago. The idea is based on the fact that the model output in case of Donkey (and Burro as well) is categorical, In categorical output, the neural network has n outputs, each corresponding to an angle. The actual steering angle is assigned based on the output with the highest value. In reality, just before the computation of the angle the final angle raw values are converted to probabilities using a softmax function. If the predicted angle has a high associated probability, this means the model is confident in it’s decision. Thus it may be a reasonable decision to increase the throttle, given the confidence of the model.
In addition to confidence-based throttle assignment, Burro limits the throttle according to the predicted steering value, with the hardest steering being associated with lowest throttle values. In the end, 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. This is the idea behind throttle control in Burro.
The relevant python code that performs this computation is below:
throttle = (0.07 + np.amax(yaw_binned) *
(1 - abs(yaw)) *
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 robocar performs a few laps on a printed track. Both steering as well as throttle are controlled autonomously. The video also demonstrates a new angle smoothing method that is baked into the latest version of Burro, and allows more robust steering.
This post went over recent updates in the Burro platform and specifically autonomous throttle control using steering prediction confidence and steering angle. It is rewarding to finally see the little cars driving fully autonomously through the track, and looking forward to implementing more functionality into the default Burro model, such as obstacle avoidance.
If you enjoyed the content of this post, consider subscribing to be the first to know about exciting new experiments and tutorials!