# dragspeed

Estimate the velocity/airspeed of rotorcraft by measuring the drag force. @image html images/airborne/modules/dragspeed/dragspeed.png During flight, gravity, thrust and drag act on the quadrotor. Gravity is not measured by accelerometers and the thrust only acts along the drone’s vertical axis. Therefore, only the drag is measured along the quadrotor’s horizontal axes. Using a simple linear drag model, this deceleration can be transformed back into an estimate of the drone’s airspeed. The advantages of this method are that the acceleration is not integrated over time (the only source of drift is the drift of the sensor itself) and that no knowledge of the quadrotor’s attitude or other states is required. This module makes the following assumptions: - The drag acting on the quadrotor grows linearly with velocity. - The size and weight of the drone are constant (changes in size and/or weight require re-calibration). - Pitch and roll angles are small (less than ~20 deg). - No wind (when used as ground speed). Usage instructions —————— 1. Calibrate zero (recommended before each flight) 1. For the best results, ensure that the INS velocity is as accurate as possible (e.g. use Optitrack and set the INS type to gps_passthrough) and set DRAGSPEED_SEND_ABI_MESSAGE to FALSE. 2. Bring the drone to a stationary hover. 3. In the GCS under settings/dragspeed, set “Calibrate Zero” to 1. 4. Keep the drone stationary until “Calibrate Zero” returns to 0. 5. (Optional) Copy the new Zero_X and Zero_Y values to the DRAGSPEED_ZERO_X and _Y defines in the airframe file. 2. Calibrate drag coefficient (new airframes or after change in weight or shape) 1. For the best results, ensure that the INS velocity is as accurate as possible (e.g. use Optitrack and set the INS type to gps_passthrough) and set DRAGSPEED_SEND_ABI_MESSAGE to FALSE. 2. Ensure the zero measurement is calibrated first. Drag coefficient calibration will not start unless Zero_X and _Y values are available. 3. In the GCS under settings/dragspeed, set “Calibrate Coeff” to 1. 4. Fly the drone around along the body x and y axes. The drag coefficient is updated at speeds larger than 0.5m/s. 5. Calibration is finished when “Calibrate Coeff” returns to 0. Check the results by comparing the estimated and INS velocities in the DRAGSPEED telemetry message. 6. Copy the new Coeff_X and Coeff_Y values to the DRAGSPEED_COEFF_X and _Y defines in the airframe file. 3. By default, the estimated velocity is sent through the VELOCITY_ESTIMATE ABI message to the INS. The estimated velocity can also be read from the dragspeed struct. Calibration from flight plan —————————- Calibration can be started from the flight plan by calling dragspeed_calibrate_zero() or dragspeed_calibrate_coeff(). Progress of the calibration can be monitored through dragspeed_is_calibrating(), which returns TRUE while either calibration routine is in progress. Example results ————— The following results were obtained from a flight test performed on an AR.Drone 2.0 inside the TU Delft Cyberzoo. The ground-truth velocities are obtained through the Optitrack system. @image html images/airborne/modules/dragspeed/example_result.png The following settings were used: - DRAGSPEED_COEFF_X = 0.62 - DRAGSPEED_COEFF_Y = 0.85 - DRAGSPEED_FILTER = 0.8

Defines

Name

Value

Description

DRAGSPEED_SEND_ABI_MESSAGE

TRUE|FALSE (default: TRUE)

Send VELOCITY_ESTIMATE ABI messages

DRAGSPEED_ACCEL_ID

Accelerometer ABI ID to subscribe to (default: ABI_BROADCAST)

DRAGSPEED_COEFF_X

Drag coefficient (mu/m) of the linear drag model along the body x axis, where m*a = v*mu

DRAGSPEED_COEFF_Y

Drag coefficient (mu/m) of the linear drag model along the body y axis, where m*a = v*mu

DRAGSPEED_ZERO_X

Accelerometer reading (x axis) when stationary [m/s^2]

DRAGSPEED_ZERO_Y

Accelerometer reading (y axis) when stationary [m/s^2]

DRAGSPEED_R

Velocity measurement noise variance [(m/s)^2]

DRAGSPEED_FILTER

First-order low-pass filter strength [0..1] (default: 0.8)