Hi all! I’m trying to understand how airspeed sensor calibration works. The airspeed calibration docs explain what to do it, but not the “why” and"how" to explain what actually goes on under the hood.
What I understand: the pressure differential in the pitot tube between the static and impact pressure needs to be “mapped” to certain velocities, which is why it needs to be calibrated. When you turn on auto calibration and fly the plane in a circle, it compares the velocity reading from the sensor to the ground speed from the GPS. It adjusts the ARSPD_RATIO such that the airspeed output matches the average ground speed. This assumes that you fly at a constant speed, and in a perfect circle, otherwise the averages will be wrong because any wind will throw off the ground speed readings. This is essentially the automated version of the manual calibration section.
Is all the above correct?
Why isn’t the pressure-to-airspeed mapping constant? Why is the calibration even needed? Give a certain differential pressure, wouldn’t the airspeed always be the same? There could be differences in the barometric pressure at different altitudes and locations, but the differential should always be the same, no?
Is a minimum flying speed required for calibration?
One forum post says that a GPS fix is not required for calibration. How is that possible? Ardupilot would not have any ground speed to compare to.
Hypothetically, if there is 0 wind, then calibration can be done by flying in a straight line (or any path at all) for 2 minutes, as ground speed and airspeed will match, right?
What preflight checks and preparations need to be done before commencing the airspeed calibration? The docs say that for precision, I can set BARO_GND_TEMP. Is there anything else needed?
Preflight calibration with a covered pitot tube does the offset calibration of the airspeed sensor. I can do it without GPS and also do it indoors. If ARSPD_AUTOCAL is enabled, ARSPD_RATIO is calculated automatically during flight. I always fly with a GPS attached so I don’t know whether GPS is necessary or not for ARSPD_RATIO.
It’s not the air speed what the the sensor detects. Its a differential pressure sensor. it senses a pressure difference. There is a relation between the air speed and the sensed differential pressure.
I have written down the basic functionality earlier.
The full process of relating a pressure difference to an airspeed will be more complicated by the fact of changing air density by air pressure (weather and altitude) and air temperature. air density.
Next to these details the pressure difference seen by the sensor/probe will be affected by the presence of the plane itself. indicated airspeed.
Theoretically not, but the plane should be able to fly (at a minimum airspeed) and real world sensors have minimum resolution which makes a minimum airspeed mandatory.
You are right, unfortunately we have to cope with a real world.
As mentioned by others the main purpose of the preflight calibration is the removal of any zero offset by the sensor.
The BARO_GND_TEMP also can help. As shown in the formulas in the links above the air temperature is one of the parameters which affects the air density which als will affect the pressure difference seen by the “air speed sensor”.
So preflight calibration reads current temperature and pressure only? If so, I’m assuming that if I want more accuracy, then after preflight calibration to set pressure, I can manually set the BARO_GND_TEMP param.
I found the answer in the Mission Planner source code here. Preflight calibration only calibrates the barometer (helpful for airspeed, climb rate, altitude, and probably other stuff). If running Copter, it also calibrates the gyro. That’s it.
Temperature calibration is a separate command, and can be set manually using the BARO_GND_TEMP parameter. It would likely help make the airspeed sensing more accurate.
EDIT: The MAV_CMD_PREFLIGHT_CALIBRATION command has parameter 6, airspeed calibration. It’s not triggered here. I’m not sure what it does though. Is this the same as setting ARSPD_AUTOCAL=1?