Wind Gusts
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.

Incremental control
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 figure below shows the top view of the experiment, where the wind tunnel is blowing in the negative XN direction, and is located at −1.425 < YN < 1.425.


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.

The INDI code is included in the Paparazzi open source autopilot, but should be easy to incorporate in other autopilots as well.

More information can be found in the paper, which can be downloaded from Elsevier (free for the first 50 days) or Researchgate.

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • @Julien Thanks for looking into the code! I think you are referring to the attitude control code, where I have the distinction between the simple and full version. Indeed I was using the full version. However, what the video is mainly about is the control of the position of the drone, either using INDI acceleration control or a PID controller. In both cases, the same INDI attitude control was used.

    Regarding the attitude control, I would say that the main benefit of the full version is that you can better deal with actuator saturation, which can easily occur when giving large yaw commands to a quadrotor. I use WLS control allocation to prioritize roll and pitch over yaw. For the flight in the wind tunnel, where the actuators did not saturate, I think the simple version would have given similar results.

    (PDF) Prioritized Control Allocation for Quadrotors Subject to Saturation
    PDF | This paper deals with the problem of actuator saturation for INDI (Incremental Nonlinear Dynamic Inversion) controlled flying vehicles. The...…
  • Impressive results! I looked at your implementation in paparazzi and I'm guessing this is the full version implemented? Are the results far off by using the simple version with the [p,q,r] rates instead of the four rotor rates?
  • @Ewoud: Ok. Your controller looks great! The PID definetly looks less efficent here. I was just wondering how it would perform in gusty wind with a random pattern. The controller actually has a big effect on energy consumption. A very aggressive controller will take a lot more energy. The record flight time use very low contoller values to maximize efficiency.

  • @Ivan No, in my research I usually work with Paparazzi. Nonetheless, the code is not that complex, so it wouldn't take that much effort to make it available for Arducopter.

    @Charles This was not really a point of concern for this research. My intuition says that for such a vehicle the difference in energy consumption will be rather small. A simple current measurement could give information on this question. Taking the efficiency into account for the control would make the algorithm a lot more difficult, because I think you would need to take the efficiency of future states into account as well. Because if the controller decides to save energy by not giving as much input as needed at one point in time, at a future instant he may need to do more.

  • Cool. Have you considered the power usage of the controller compared to a PID? When flying in open environment, lower controller constants might increase flight time and range.

  • Amazing results. Did you try it with Arducopter? 

This reply was deleted.