Drones have the potential to perform many useful tasks, such as search and rescue, package delivery and aerial imaging. But in order to perform these tasks in an outdoor environment, the vehicles need to be able to control their position under the influence of wind gusts. This is especially true when flying close to obstacles, as a position error due to a wind gust might result in a collision.
At the MAVLab of Delft University of Technology, we have taken the concept of Incremental Nonlinear Dynamic Inversion (INDI), and applied it to the linear accelerations of MAVs. The idea is that both disturbances as well as control forces are measured by the accelerometer. This means that a desired acceleration can be achieved by incrementing the previous control input based on the difference between desired and measured acceleration.
INDI can be compared to the integrator part of a PID controller, but where an integrator is blindly adding input, INDI takes the actuator effectiveness, actuator dynamics and filtering into account. This way, it can exactly determine the size of the input increment that should be applied, and it knows when the output should be expected. This allows the controller to react very fast to even the strongest of disturbances, such as a 10 m/s wind gust in the video above. (Note that the top speed of the Bebop is 13 m/s, according to Parrot!)
Wind tunnel experiment
In the experiment shown in the video, the drone is flying in and out of the wind tunnel flow, which is blowing at 10 m/s. We show a comparison of position control with INDI and PID, both with the same inner loop control. The position of the vehicle is sent to the drone at 4 Hz using an Optitrack infrared tracking system. When flying in and out of the wind tunnel, PID control leads to large overshoot, where it takes a long time for the integrator to compensate the change in wind. For INDI control, observe that the maximum deviation is much smaller, and that the vehicle returns to the correct position in a much shorter time.
The use of INDI does not require any fancy sensors, except for the accelerometer that is standard on most drones. If the position loop is bypassed, it is even possible for a pilot to command accelerations; letting go of the stick will make the drone resist any acceleration, such that it keeps its velocity.