Skip to content

Calibration and Per-Drone Parameters

Written by Max GardenswartzUpdated 2026-10-21Autonomy Park

At a glance

The PX4 parameters that are unique to each Homebrew and never copied between drones. Read it so you know what parameters should differ between drones.

Read Parameters in the PX4 v1.16 Reference Only

To understand any parameter on this page, use the PX4 v1.16 parameter reference. Do not use the main (latest) reference: parameters differ between PX4 versions.

The Taranis QX7 Is Max Gardenswartz's Personal Radio

The Taranis QX7 belongs to Max Gardenswartz personally, not to the lab, and he will not leave it with the lab when he graduates in 2028. He set it up for test flights because it was familiar and convenient. Research funds can only buy equipment that is on the Blue list, so the lab needs a better long-term plan: see Radio and RC Setup.

Reference: PX4 v1.16 (release/1.16). Values in the "Sample" column come from one sample drone. "Default" is the v1.16 source default.

These parameters are not part of the first-time setup checklist in PX4 Configuration. They are unique to each physical drone (sensor and battery calibrations, device IDs) or written by the firmware itself (see the last section). After a full parameter wipe or a firmware upgrade, redo the calibrations below on every drone. Do not copy another drone's values. Parameter names may change between firmware versions, so re-check the names against the new release.

Unique to Each Drone: Redo on Every Quadcopter

Gyroscope (CAL_GYRO*)

Each quadcopter needs its own gyroscope calibration. The firmware also relearns and saves gyro offsets by itself over time, so these values drift slightly from boot to boot.

Parameter Name Sample Default Reason
CAL_GYRO0_XOFF / YOFF / ZOFF −0.001093 / −0.004653 / 0.025502 0 Each quadcopter needs its own gyroscope calibration.
CAL_GYRO1_XOFF / YOFF / ZOFF 0.017696 / −0.007145 / 0.004775 0 Same.
CAL_GYRO2_XOFF / YOFF / ZOFF 0.034279 / 0.000794 / 0.000492 0 Same.

Accelerometer (CAL_ACC*)

Parameter Name Sample Default Reason
CAL_ACC0_XOFF / YOFF / ZOFF, XSCALE / YSCALE / ZSCALE 0.134527 / 0.047541 / 0.039388, scales 1 / 1 / 1 0 offsets, 1 scales Each quadcopter needs its own accelerometer calibration.
CAL_ACC1_* (same six) 0.273077 / −0.156760 / −0.185613, scales 1.002418 / 1.000138 / 0.988593 0 offsets, 1 scales Same.
CAL_ACC2_* (same six) −0.024469 / 0.267408 / 0.261582, scales 1.003901 / 0.999136 / 0.987734 0 offsets, 1 scales Same.

Compass (CAL_MAG*)

Calibration slots are matched to sensors by device ID (CAL_MAG*_ID), so the same compass can sit in a different slot on a different drone.

Parameter Name Sample Default Reason
CAL_MAG0_XOFF / YOFF / ZOFF, XSCALE / YSCALE / ZSCALE 0.103816 / −0.113710 / 0.023709, scales 1.024196 / 0.997193 / 0.974344 0 offsets, 1 scales Each quadcopter needs its own compass calibration.
CAL_MAG1_* (offsets, scales and XODIAG / YODIAG / ZODIAG) 0.123004 / −0.029632 / 0.013106, scales 0.972365 / 1.071113 / 0.946423, odiag −0.022899 / 0.006623 / 0.001966 0 offsets, 1 scales, 0 odiag Same.

Barometer (CAL_BARO*_OFF)

Parameter Name Sample Default Reason
CAL_BARO1_OFF 87.328125 0 Written by the firmware for this specific sensor. Not copied between drones.

Level Flight (SENS_BOARD_X_OFF, SENS_BOARD_Y_OFF)

These are the parameters QGC's Level Horizon (Level Flight) calibration writes. In the PX4 source, level_calibration.cpp updates exactly these two: roll offset to SENS_BOARD_X_OFF and pitch offset to SENS_BOARD_Y_OFF, in degrees. SENS_BOARD_Z_OFF (yaw) is not touched by that calibration and stays 0.

Parameter Name Sample Default Reason
SENS_BOARD_X_OFF −2.0350902° 0 Each quadcopter needs its own Level Flight calibration.
SENS_BOARD_Y_OFF −0.3200225° 0 Same.

RC Calibration (RC1 to RC10)

Max manually calibrated the RC to trim away stick drift for his personal Taranis QX7. Defaults are 1000 (min), 1500 (trim), 2000 (max).

Parameter Name Sample (MIN / TRIM / MAX) Default Reason
RC1_MIN / RC1_TRIM / RC1_MAX 982 / 1492 / 2006 1000 / 1500 / 2000 Manually calibrated RC to trim away stick drift.
RC2_* 982 / 1494 / 2006 1000 / 1500 / 2000 Same.
RC3_* 982 / 982 / 2006 1000 / 1500 / 2000 Same. (Throttle trim sits at minimum.)
RC4_* 982 / 1497 / 2006 1000 / 1500 / 2000 Same.
RC5_* 1150 / 1578 / 2006 1000 / 1500 / 2000 Same.
RC6_* 982 / 1494 / 2006 1000 / 1500 / 2000 Same.
RC7_* 982 / 1494 / 2006 1000 / 1500 / 2000 Same.
RC8_* 982 / 1494 / 2006 1000 / 1500 / 2000 Same.
RC9_* 982 / 1494 / 2006 1000 / 1500 / 2000 Same.
RC10_* 982 / 1494 / 2006 1000 / 1500 / 2000 Same.

Battery Sensing (BAT1_V_DIV, BAT1_A_PER_V)

Each quadcopter needs its own battery voltage-divider and current-per-volt calibration. In v1.16 the metadata default for both is −1, which means "use the board default"; the Cube Orange board defaults are 10.1 and 17. The other battery parameters are in Homebrew Parameters.

Parameter Name Sample Default Reason
BAT1_V_DIV 12.05901 −1 (uses the Cube Orange board default, 10.1) Found by a unique calibration for each quadcopter.
BAT1_A_PER_V 6.940631 −1 (uses the Cube Orange board default, 17) Found by a unique calibration for each quadcopter.

Sensor Device IDs and Priorities (CAL_*_ID, CAL_*_PRIO, CAL_MAG0_ROT)

Each calibration slot above is tied to a sensor through its device ID. The ID encodes the bus type, bus, address and device type, so the same sensor can land in a different slot on a different drone. Sample IDs are from one drone; treat them as per-drone values and do not copy them. Which of these the firmware writes automatically when it detects or calibrates a sensor has not been verified in the source.

Parameter Name Sample Default Reason
CAL_ACC0_ID / CAL_ACC1_ID / CAL_ACC2_ID 3670050 / 2621474 / 2424842 0 Device IDs of the three accelerometers. Per drone.
CAL_ACC0_PRIO / CAL_ACC1_PRIO / CAL_ACC2_PRIO 50 / 50 / 50 −1 (uninitialized) 50 is "Medium (Default)" in the parameter enum.
CAL_GYRO0_ID / CAL_GYRO1_ID / CAL_GYRO2_ID 3670050 / 2621474 / 2424842 0 Device IDs of the three gyroscopes. Per drone.
CAL_GYRO0_PRIO / CAL_GYRO1_PRIO / CAL_GYRO2_PRIO 50 / 50 / 50 −1 (uninitialized) Same.
CAL_MAG0_ID / CAL_MAG1_ID 8944643 / 589858 0 Device IDs of the two compasses. Per drone.
CAL_MAG0_PRIO / CAL_MAG1_PRIO 75 / 0 −1 (uninitialized) 75 is "High" and 0 is "Disabled" in the parameter enum.
CAL_MAG0_ROT 0 −1 (Internal) 0 is "No rotation" in the parameter enum. CAL_MAG1_ROT was at the default (−1).
CAL_BARO0_ID / CAL_BARO1_ID 3997730 / 3997706 0 Device IDs of the two barometers. Per drone.
CAL_BARO0_PRIO / CAL_BARO1_PRIO 50 / 50 −1 (uninitialized) Same as the accelerometers.

Written by the Firmware: Do Not Set

These are written by PX4 itself while it runs. Do not set them by hand and do not copy them from another drone. They are listed so that a full parameter comparison does not flag them as mistakes. In the v1.16 source, the QGC "reset all" task and the boot-time reset both keep LND_FLIGHT_T_HI, LND_FLIGHT_T_LO and COM_FLIGHT_UUID; EKF2_MAG_DECL is not excluded and returns to its default.

Parameter Name Sample Default What writes it
LND_FLIGHT_T_HI / LND_FLIGHT_T_LO 1 / 795910513 0 / 0 Total flight time of this autopilot in microseconds, (HI << 32) \| LO. Written by the land detector (LandDetector.cpp). Unique to each quadcopter.
COM_FLIGHT_UUID 25 0 Number of the next flight, incremented automatically on every disarm. Written by the commander (Commander.cpp). Unique to each quadcopter.
EKF2_MAG_DECL −6.299414° 0 Magnetic declination. The estimator stores the declination it learns when it differs from the stored value by more than 0.1° (EKF2.cpp), so it changes with where in the world the drone is flown.