Autonomous Drifting
Optimal control of a highly nonlinear system.
This was a class project I did with Corey Walsh, Samir Wadhwania, and Martina Stadler for 6.832: Underactuated Robotics taught by Russ TedrakeDrifting
If you were to drive your car forwards really fast and then turn the wheel sharply, the back wheels would have so much momentum that they would stop gripping the road and start slipping sideways. This can be very dangerous, if uncontrolled, but expert drivers can make cars do incredible things.
As the world transitions to autonomy, we need to have controllers that can handle accidental drifting to prevent crashes, and eventually to have controllers that drift on purpose. At high speeds, drifting can be far more efficient at going around turns.
Project Overview
We wanted to control high speed drift maneuvers on a 1/10th scale car. The project involved modeling, planning and control. Plus the added difficulty of using hardware forced us to tackle a number of engineering challenges. Our system used motion capture data, transmitted wirelessly, to track the pose of the car and reducing the end to end latency was a nightmare.
Below is a demonstration of a neural network model I made that learns the car dynamics soley from motion capture data. We also explored hand made models like the magic formula.
Once we developed a model of the car, we used solvers in drake to generate optimal trajectories from a given starting to end location. Then we used LQR to stabilize the car around those trajectories:
Here is the car stabilizing donuts:
Our controller is not perfect as you can see in the video above. It has a constant offset plotted here:
However, it is significantly better than an open loop controller:
Plus it can stabilize from a variety of starting conditions: