Airspeed calibration over range of airspeeds to improve accuracy

Hello all,

I’m a longtime user of ArduPlane, using it for aircraft flight testing. I would like to bring-up an issue that has made accurate airspeed measurement a challenge for my work, and propose a solution to gauge interest and viability.

The Issue: When using airspeed sensors with a pitot-static tube, the static-pressure measurement is difficult to accurately measure due to the airflow interactions with the aircraft. Additionally, large angles of attack cause bias to the static-pressure. All this when picked up in the pitot-static tube causes substantial error in the dynamic pressure measurement.

The current ArduPlane airspeed calibration zeros this bias at a single airspeed using groundspeed and an EKF to obtain an estimate for correct airspeed, giving a single factor to multiply the dynamic pressure by to adjust the reading of airspeed. This solution won’t provide accurate airspeed measurement when flying at a very different airspeed, since the angle of attack has changed, along with the surrounding flow field that affects the static-pressure port.

Example:
Aircraft being flown between 10 and 16 m/s, has a pitot-static tube 7 centimetres in length roughly halfway down the span of the wing. Two sensors used, SPD33 and MS4525.

From post-flight analysis, the AS_RATIO as a function of dynamic pressure measured for the MS4525 should have been:

And for the SDP33:

Proposed Solution: If the airspeed is calibrated at two different airspeeds, with as much of a gap as possible, then it would be possible to at least partially remove static-pressure errors caused by the different angle of attack. Sailplanes for example perform airspeed calibrations at many different speeds.

Instead of just AS_RATIO, two variables would be needed: AS_RATIO_b and AS_RATIO_m. In equation form the old form of airspeed calculation is:
$$ V_{EAS} = \sqrt{AS_{RATIO} \Delta P} $$

What I’m proposing is:
$V_{EAS} = \sqrt{ ( AS_{RATIO_m} \Delta P + AS_{RATIO_b}) \Delta P}$

Implementation: To make this happen, a new airspeed calibration process would need to be created to fly multiple airspeeds, and generate the two parameters. Changes would also need to happen to AP_Airspeed libraries.

I’m eager to hear from the community about their thoughts on this approach and whether they’ve encountered similar challenges with airspeed calibration in their applications. Your insights could help refine this concept and improve airspeed measurement accuracy across different systems.

3 Likes

Your math needs a bit of work to tell the same story as your words do, but I think I get what you’re saying. And it’s true that AFAIK manned aerospace projects do calibrate their Pitot probes for multiple airspeed and attitude regimes and then schedule the compensation factors for them.

But in our case, to play devil’s advocate, why isn’t it a better solution to just get a longer probe and extend it past the aerodynamic interactions of the airframe?

2 Likes

I’m pleased you found my explanation understandable. The equations are really just there to show a sample modification to the AP_Airspeed/AP_Airspeed.CPP, line 654, which could be used in conjunction with two airspeed calibrations.

Extending the probe past the aerodynamic interactions would be a viable solution in most cases. However, given that most airspeed sensors supported by ArduPilot come with the dinky no-name pitot-static tube, which you yourself found to be inaccurate, this seems like the next best thing. Additionally, we found it difficult to procure pitot-static tubes which were long enough and still of a light enough weight for our application. The last issue, is specifically with the SDP33 sensor supported by AP, which must use a short pitot-static tube with the current driver. This is a flow rate sensor, not the usual pressure sensor, giving it better precision at low speeds, but the flow rate means that the driver must compensate for pressure loss resulting from the flow through the sensor. This compensation is specific to the pitot-static tube, which happens to be the dinky pitot-static tube that comes with it. To use a different pitot-static tube with the SDP33 requires a lot of work including wind-tunnel testing and modifying AP_Airspeed_SDP3X.cpp.

The two-variable adjustment approach aims to offer a more versatile and potentially more accurate solution that can be applied across a range of aircraft configurations and operational conditions. This could be an optional adjustment as well, where either the one or two variable adjustments are able to be done in the autopilot, depending on the application.

I was trying to make sure you didn’t have a problem that could be easily solved with hardware.

In general, I hear that even with that dinky probe most people don’t have issues, even on larger airframes. But also most people don’t care about their airspeed measurement accuracy; as long as the aircraft doesn’t fall out of the sky.

The case of the SDP33 is actually a very good one. Even though there are parameters to tune it (IIRC), I hear it’s quite tricky. So being able to compensate on another level would be nice.

The process you describe actually reminds me of the thermal calibration done on the gyro offsets. Perhaps there’s some inspiration to be drawn there.

P.S. How did you like my Pitot probe white paper?

1 Like

The white paper is great! I wish I’d discovered it sooner into my work. That BasicAirData is an interesting project, would be interested in getting my hands on one of those probes.

The hardware that was used was most definitely sub-optimal for the described flights (from 2021), we increased the length of our probes last season to try to compensate for that. I haven’t gotten the ASRATIO vs Dynamic pressure plots for those yet, so they might show it to be less of an issue than the ones in my initial post.

And thats entirely it really, most people don’t care about airspeed measurement. Its only when trying to use it as a platform for performance flight testing and system identification that it becomes critical. With that being said, I do recall some interest in performing system identification with ArduPlane. If thats in the cards then it would be worth delving into airspeed improvements.

I wasn’t aware that there were additional parameters for tuning the SPD33, I’ll take a look into that. A colleague of mine has been working on modifying the driver to allow a longer pitot-static tube, but its slow going. I’ve read a little about gyroscope calibrations in the book Small Unmanned Aircraft - Theory and Practice, but where else would you suggest digging into the specifics? Maybe ArduPlane code?

I really appreciate the thoughts on the matter, thanks for the replies.

P.S. I filled out the questionnaire to get the white-paper

I wasn’t aware that there were additional parameters for tuning the SPD33, I’ll take a look into that.

You’re probably right. I assumed that Ardupilot would have those parameters, just like PX4 does, but that’s not the case. The driver code says it’s calibrated by Sensirion itself for the Drotek probe.

I’ve read a little about gyroscope calibrations in the book Small Unmanned Aircraft - Theory and Practice, but where else would you suggest digging into the specifics? Maybe ArduPlane code?

I’d start here: libraries/AP_InertialSensor/AP_InertialSensor_tempcal.cpp

P.S. I filled out the questionnaire to get the white-paper

Thanks, I noticed!

2 Likes

@willk995 Welcome to the Ardupilot forum.

I am pleased that you are also interested in the complexity of valid airspeed measurement and obviously have a great deal of knowledge. I am particularly pleased to hear about your experience with the SDP33, which I have enjoyed using for many years for my slow flying aircrafts.

My first question about your calibration concept: Where do the Dynmice pressure values for the SDP33 with thermal measuring principle actually come from?

Thank you for the information.
Unfortunately Drotek no longer supplies the Sensirion sensor with the thinner Prandl tube and did an End of life announcement (EOLA).
I have also found that I need higher calibration values with larger diameters of the dynamic sample.
I find that the SDP33 cannot be replaced by the pressure sensors whenever precise measurements in the low speed range below about 12 m/s are required.

1 Like

Thanks @Rolf,

Yeah the SPD33 is great for low noise measurements at low speeds. The dynamic pressure values are all related to the transfer of heat from a heating element, measured by two thermocouples from what I can see.

I did some hand calculations to try to figure it out, based on the Sensirion Application notes here; Sensirion_Differential_Pressure_AppNotes_Selection_Guide_V3.1_1.pdf

Probably not entirely accurate, but the gist of it is that the sensor is measuring the transfer of heat, which is dependent on the mass flow rate. Mass flow rate can be related to the pressure difference by a quadratic formula, not quite sure why. The pressure drop through the hose and pitot-static tube is discussed in another Sensirion document here: Sensirion_Differential_Pressure_AppNotes_SDP3x_Pressure_Drop_In_Hose.pdf

It gets complicated when there are bends and sharp edges, like inside the pitot-static tube. Also apparently the tubing should be kept as short as possible to prevent additional pressure losses.

We had some success recently finding the thinner Prandtl tubes on Amazon, although I can’t seem to find them now. It would be quite nice to have some more options for probes to use with the SDP33.

One more reference, Jackson Empey from McGill University did their thesis on wind sensing and compared the MS4525 with the SDP33, in the process he discusses the SPD33 calibration with more equations.
Thesis | Wind sensing and rejection for agile fixed-wing unmanned aerial vehicles | ID: kd17d0511 | eScholarship@McGill

EDIT: My colleague found the link to the Drotek probes: Differential Pitot Tube for Air Speedometer APM 2.5/2.6 : Amazon.ca: Automotive

Thanks William for the many explanations and links. In particular about the sensitivity of the SDP33 to hose diameter, hose length and diameter of the dynamic pressure opening. Interesting that the SDP33 from Drotek was calibrated by Sirion. It is therefore all the more annoying that Drotek no longer supplies the Pitot tube together with the sensor.

The work of Jackson Empey confirms my experience of the uselessness of conventional pressure difference sensors below 10 m/s. The airspeed source used for sensor calibration that he describes is ingenious. I have ordered an SDP816-125PA to test whether the pressure difference can be measured sufficiently reproducibly for my own experiments on the workbench.

In 2018 I had a flight in in unique, almost windless conditions: You can clearly see how accurately the SDP33 can measure the airspeed when it is calibrated correctly.

When flying in circles, you can still see that the wind was blowing at around 0.5 m/s.

Rolf

@Rolf, I don’t want to derail Will’s initial topic, but have you noticed dropouts in the airspeed readings from the SDP33? We’ve always had these dropouts, which may not be visible in mission planner plots: SDP33 Airspeed Sensor Dropouts

@Bill-B I have replied in the linked thread.