Wind estimation without an airspeed sensor

I recently figured out a way to use GPS 3-dimensional velocity data and the direction-cosine-matrix information in real time as a plane flies along, to estimate the 3 dimensional wind vector, and the 3 dimensional air speed vector, without a pitot tube or any other sort of airspeed sensor. It has been tested, and it works quite well.
The core of the theory for estimating wind speed is described here.
The basic idea is to first estimate the airspeed vector by relying on the fact that the determinant of the direction cosine matrix is equal to one. Therefore, when a plane rotates, the magnitude of the change in the GPS velocity is equal to the magnitude of the airspeed, times the magnitude of the change of the appropriate column of the direction cosine matrix. Then, once you know the airspeed vector, you can compute wind vector. Built into the algorithm is an immunity to any yaw error in the matrix.
The algorithm only works when the plane is rotating around the yaw or pitch axis, but not much rotation is needed, and once the wind vector is measured, it can be locked in during straight flights, and used to compute the airspeed even if the plane no longer yaws or pitches. However, when the plane is yawing and pitching, the algorithm produces a steady stream of up-to-date wind estimates, so it will work in situations (like the field where I fly) in which the wind varies in time and space.
As a bonus, the algorithm includes the vertical component of the wind, which of course is the slope or thermal lift, so we plan to develop a lift-seeking algorithm for sailplanes.
I want to thank Peter Hollands, who contributed a great deal to the development of the algorithm. He implemented the wind-compensation portion of the computations, made a lot of test flights, and wrote scripts to convert the raw telemetry to spreadsheets for analysis, and to kmz files for display in Google Earth.

Here is a jpg file, a spreadsheet, and a Goolge Earth kmz file, from one of Peter's flights.
Note in the kmz file that Peter has a plane icon to indicate which way the plane is heading, as determined by the direction-cosine matrix. Note that there is a very clear indication of the crab angle of the plane, so the firmware knows which way the plane is pointing, which way it is moving and which way the wind is blowing.
Peter's tests were successful, he was able to fly comfortably in heavy winds, including landing the plane in RTL mode.
Wind compensation is presently an option in the MatrixPilot code under the Source tab in the project repository, and will be available in the next release of the download code.
Once again, thanks to Peter Hollands and the rest of the UAV DevBoard team.
Best regards,
Bill Premerlani


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

Join diydrones

Email me when people reply –


  • What condition can you propose to validate wheter you can or cannot update the wind components? Besides checking if |F2-F1| is bigger then 0, or any threshold.

    You talk about checking if the airspeed fuselage vectors rotate by approximatly the same. Can you explain in detail?

    Best regards,

    Francisco Correia

  • Very interesting idea. First of all, thank you for your contribution. By the way, I have some questions.


    In your paper, 'residual yaw error' is introduced. What is that mean exactly? I guess that the error is induced from the difference between course(COG) angle and heading(yaw) angle. Is it correct?


    In your paper, the vector F is used to represent fuselage vector. And you said that comes from 'the column of the direction cosine matrix'. Is it same as below equation?

    F = DCM_B2I x [1 0 0]'

    where DCM_B2I is direction cosine matrix from body-axis to inertial-axis, and [1 0 0]' is the unit vector aligned with x-axis of body-axis. So I guess F equal to [cos(pitch) x cos(yaw), cos(pitch) x sin(yaw), -sin(pitch)]'. Is it correct?

    Best regards,

    Seunghan Lim

  • Hi - this is pretty cool.  In your wind estimation file, you mention that implementation will be described in a different report.  Is that report posted somewhere?

  • Hi

    Very interesting article and description of the theory.

    In the PDF file, you mention "Implementation will be described in a separate report", has it been released?



  • Developer
    Great work Bill, I really enjoy your posts...

  • T3
    Paparazzi uses this same method to estimate wind speed and I can confirm the fact that it's pretty accurate; so infact you can make it with thermopiles as well. Of course given that you know the actual yaw of the plane gives you a more accurate estimate but still.
  • Just read the linked pdf file. If I have understood things correctly, the results should apply not just to a fixed wing aircraft but also to a helicopter in forward or backwards flight. And equation 6 should hold even in sidewards flight. This would be quite useful as pitot tubes generally don't give good results on helicopters due to the downwash of the rotor blades.
  • Amazing development. A lift seeking sailplane would be very interesting.

    I would like to fly a 4 servo flaperon wing for best performance. This means 8 servo inputs (inc control) and 7 servo outputs. Do you know anybody who has expanded the UAVDevBoard to do more servos?

    Regards, Matt
  • Bill,

    If you were to add mag-heading and rudder position sensor, do you think it could estimate wind direction as well ??

    Just thinking,
  • A fantastic result, well done!

    Now that the airspeed is being computed as an intermediate result in the windspeed calculations, are there any plans afoot to add this to the Ardupilot telemetry output?

    It must be terribly annoying to achieve such greatness, only to have people like me ask for even more.

This reply was deleted.