PX4-Autopilot Main Release Notes
AlphaThis contains changes to the PX4 main branch that are not included in the next release (PX4 v1.18).
WARNING
PX4 v1.18 is in beta testing. Update these notes with features that are going to be in main (PX4 v2.0 or later) but not the PX4 v1.18 release.
Read Before Upgrading
Please continue reading for upgrade instructions.
Major Changes
- Motor failure recovery for hexarotors. On a detected single motor failure the control allocator removes the failed motor and, on a hexarotor, additionally stops (CA_FAILURE_MODE =
1) or reverses (2) the motor opposite it, recovering the yaw authority that is otherwise lost. Reversing keeps the opposite motor in the allocation and needs a reverse-capable ESC; the reverse thrust the allocator expects from a forward propeller is set with CA_REV_THR_FRAC (default0.4). Disabled by default. (PX4-Autopilot#28078)
Upgrade Guide
COM_ARM_TRAFFhas been replaced byCOM_TRAFF_AVOID. The old value 3 ("enforce for mission modes only") is migrated toCOM_TRAFF_AVOID=2, which blocks arming in all modes, not just mission modes. If you relied on being able to arm manually with traffic detected, setCOM_TRAFF_AVOID=1(warning only) instead.PCA9685_SCHD_HZhas been removed.PCA9685_PWM_FREQnow sets both the PWM frequency of the PCA9685 and the rate at which values are pushed to it; if you hadPCA9685_SCHD_HZset to a non-default value, setPCA9685_PWM_FREQto it after upgrading. Frequencies above 400 Hz (previously only usable in duty-cycle mode) are no longer supported.- Flight controller firmware no longer embeds CAN node firmware. The
px4_fmu-v5_uavcanv0periphbuild, which carried CUAV CAN GPS v1 firmware in its ROMFS so the flight controller could update the GPS over DroneCAN, and theCONFIG_BOARD_UAVCAN_PERIPHERALSboard option behind it have been removed. Use the standardpx4_fmu-v5_defaultfirmware and update the GPS from the SD card withcuav_can-gps-v1_default.uavcan.binfrom the release instead; see DroneCAN Firmware Update. (PX4-Autopilot#28870) - jMAVSim has been removed.
make px4_sitl jmavsimand the10017_jmavsim_irisairframe (SYS_AUTOSTART=10017) no longer exist, and the setup scripts no longer install Java orant. Use SIH with the Hawkeye visualizer instead (make px4_sitl_sih sihsim_quadx), or Gazebo. - Re-check motor failure handling on hexarotors. CA_FAILURE_MODE =
1now also stops the motor opposite the failed one on a hexarotor (previously only the failed motor was removed from the allocation). Other airframes are unaffected, andCA_FAILURE_MODE=0(the default) is unchanged. See Motor Failure Recovery. (PX4-Autopilot#28078) - Dual-antenna GNSS heading must be reconfigured.
GPS_YAW_OFFSET,SEP_YAW_OFFS,SEP_PITCH_OFFSandEKF2_GPS_YAW_OFFare removed, including on DroneCAN GNSS nodes, and are not migrated: GNSS yaw is not used until SENS_GNSSn_HDG is set on the autopilot for the receiver reporting the heading. Until then, a warning names what is missing:SENS_GNSSn_HDGor the antenna positions. The baseline comes from the antenna positions (SENS_GNSSn_OFFX/Y/Zof both receivers for a moving base, plusSENS_GNSSn_AUXX/Y/Zfor the second antenna of a dual-antenna receiver), and headings whose reported baseline is more than 20% off it are rejected. See GPS as Yaw/Heading Source. A DroneCAN node running older firmware still subtracts its ownGPS_YAW_OFFSET; set that to 0. Heading is taken only fromsensor_gnss_relative(u-blox, Unicore UM982, Septentrio, DroneCANRelPosHeading): the Trimble MB-Two, Femtomes, NMEAHDT, SBG and MicroStrain headings and the heading in DroneCANFix2are no longer used, and theheading,heading_offsetandheading_accuracyfields ofsensor_gpsare removed. (PX4-Autopilot#27102) - GNSS topics, messages and parameters are renamed. The per-receiver topic
sensor_gpsis nowsensor_gnss(SensorGnss).vehicle_gps_positionis nowvehicle_gnss(VehicleGnss), which nests the selected receiver's sample asreceiver(for examplevehicle_gnss.receiver.latitude) and adds the correctedtimestamp_sampleandantenna_offset. Renamed fields:latitude_deg→latitude,longitude_deg→longitude,altitude_msl_m→altitude_msl,altitude_ellipsoid_m→altitude_ellipsoid,s_variance_m_s→speed_accuracy,c_variance_rad→course_accuracy,noise_per_ms→noise,vel_m_s→ground_speed,vel_n_m_s/vel_e_m_s/vel_d_m_s→vel_north/vel_east/vel_downandcog_rad→course;antenna_offset_x/y/zmoved tovehicle_gnss.antenna_offset. ROS 2 applications must subscribe to/fmu/out/vehicle_gnss(px4_msgs/msg/VehicleGnss) instead of/fmu/out/vehicle_gps_position(px4_msgs/msg/SensorGps). Read the timestamps from the top level ofVehicleGnss: onlytimestampandtimestamp_sampleare converted to ROS time, whilereceiver.timestampandreceiver.timestamp_samplestay on the PX4 boot clock.timestampis now when the sensors module published the sample; usetimestamp_samplefor the measurement time.SENS_GPS_MASK,SENS_GPS_TAU,SENS_GPS_PRIMEandSENS_GPSn_ID/OFFX/OFFY/OFFZ/DELAYare nowSENS_GNSS_*andSENS_GNSSn_*(the driverGPS_*parameters are unchanged). Saved parameters are migrated automatically, but loading a QGC parameter file with the old names does not restore them. The log analysis scripts in the tree read both the old and the new names. The uORB-over-Cyphal registers are renamed fromuorb.sensor_gpstouorb.sensor_gnss(uavcan.sub.uorb.sensor_gnss.0.id,uavcan.pub.uorb.sensor_gnss.0.id);UCAN1_UORB_GPSandUCAN1_UORB_GPS_Pare unchanged. (PX4-Autopilot#24399) - The GNSS check parameters moved from EKF2 to the sensors module.
EKF2_GPS_CHECKis now GNSS_CHECK,EKF2_REQ_EPH,EKF2_REQ_EPV,EKF2_REQ_NSATS,EKF2_REQ_PDOP,EKF2_REQ_HDRIFT,EKF2_REQ_VDRIFT,EKF2_REQ_FIXandEKF2_REQ_SACCare nowGNSS_REQ_*, andEKF2_REQ_GPS_His now GNSS_REQ_TIME. Saved parameters are migrated automatically, but loading a QGC parameter file with the old names does not restore them. (PX4-Autopilot#28520, PX4-Autopilot#28798) DO_JUMPcan only loop back and its repeat count must fit. A mission is now rejected if aDO_JUMPtargets itself or a later mission item, even if its repeat count is 0, and if its repeat count is negative, above 65535 or not a number (it is no longer narrowed to a different count). Missions stored on the vehicle with such jumps must be edited and uploaded again.MAV_CMD_MISSION_STARTno longer arms the vehicle. The command switches to Mission mode at the requested item, and the mission starts once the vehicle is armed. This also applies toMAV_CMD_DO_LAND_START, which uses it internally. Ground stations and scripts that relied on the command to arm must sendMAV_CMD_COMPONENT_ARM_DISARMseparately (QGroundControl, MAVSDK and the PX4 ROS 2 Interface Library already do). See the MAVLink spec clarification.- The primary GNSS receiver defaults to Auto.SENS_GNSS_PRIME now defaults to
-1(Auto) instead of0, and saved values are not changed: with Auto the moving base of a moving base pair is the primary receiver, and without one, a receiver that passes the strict checks (GNSS_REQ_EPH and the otherGNSS_REQ_*parameters) is used, then one with an RTK fixed solution. To keep preferring the receiver on the main serial port, setSENS_GNSS_PRIMEto0. In flight the primary receiver is now also left when it has failed the strict checks for 10 s while the other receiver passed them. (PX4-Autopilot#28798) - Re-check the motor failure trigger thresholds.
MOTFAIL_OFFandMOTFAIL_TIMEare replaced by a separate band and trigger time per direction (MOTFAIL_OVER/MOTFAIL_OVR_TIME and MOTFAIL_UNDER/MOTFAIL_UND_TIME), and are not migrated: the new parameters start at their defaults. The check now compares a low-pass filtered current residual instead of the instantaneous value, so the thresholds are worth re-deriving: see Motor Failure Detection > Upgrading from PX4 v1.18. (PX4-Autopilot#27917)
Other changes
- Fast mission Return modes (RTL_TYPE = 2 and 4) now skip
DO_JUMPcommands (loops) while following the mission path. (PX4-Autopilot#26993: fix(navigator): goToNextPositionItem skip loops when required) - A fixed-wing vehicle landing at the end of a reverse mission Return (RTL_TYPE = 2 or 4) uses the home altitude again instead of flaring at flight altitude, a regression in the v1.18 pre-releases.
- A mission Return mode (RTL_TYPE = 1, 2, 3 or 4) now reads the current mission on the cycle that activates it, so a mission uploaded or changed right as Return starts is used for the return type, the geofence avoidance destination and the starting item. The fast variants also discard the item index they recorded from an earlier mission when a different one is current. (PX4-Autopilot#28748)
- A
DO_JUMPwhose counter cannot be written to storage, for example on a failing SD card, is now skipped with a message to the operator. Previously the jump was taken again on every pass, repeating the same mission segment until a failsafe stopped the mission. (PX4-Autopilot#28752)
Hardware Support
- AIFoundry Erbium: new experimental target for the AIFoundry Erbium RISC-V (ET-Minion) chip, which runs the SIH quadcopter on the
erbium_emuemulator until silicon is available. (PX4-Autopilot#29094) - DroneCAN ESCs no longer need to set
UAVCAN_PUB_ARMasArmingStatusis published automatically wheneverUAVCAN_ENABLEis3(ESC output enabled). (PX4-Autopilot#28364) - DroneCAN ESC channels assigned a non-motor function (e.g. Peripheral via Actuator Set) can be driven bidirectionally via
UAVCAN_EC_SIGNED(signed RawCommand, 0 = neutral). Motors continue to useCA_R_REV. (PX4-Autopilot#26903) - DroneCAN batteries that set the charging flag in
BatteryInfonow report a charging state (shown in MAVLinkBATTERY_STATUS.charge_state) as long as the pack has no low, critical or emergency warning. Charging does not count as a battery warning, so it does not affect the battery level failsafe or the arming checks. (PX4-Autopilot#28422, PX4-Autopilot#29012) - Serial Passthrough: new reference bridge application,
Tools/mavlink_serial_bridge.py, exposes a flight controller serial port or ESC signal pin as a virtual serial port on a Linux/macOS host, so ESC configuration and GPS tools can connect to it over MAVLink. (PX4-Autopilot#28782: feat(tools): add mavlink_serial_bridge.py reference bridge application) - Agam FloRange: new DroneCAN optical flow, distance sensor and IMU module (PAA3905, AFBR-S50LV85D, ICM-42688-P). (PX4-Autopilot#28901)
공통
- The unit and functional test suite builds, links and runs on macOS (
make tests), andpx4_poll()timeouts on macOS wait for their full duration instead of returning at once. The blended GPS timestamp is accumulated in double and rounded once instead of truncating each weighted term. (PX4-Autopilot#28516) - The AlphaFilter library takes its sample interval and time constant in microseconds, and the float seconds overloads are removed, so a value in the wrong unit no longer compiles. Out-of-tree code that constructs the filter with seconds needs updating. (PX4-Autopilot#28421)
- The dataman module now hands out 16-bit client IDs instead of 8-bit ones. Each switch between mission-based return types and each MAVLink instance started in flight used up IDs, and once 254 had been handed out, every new client failed its requests with "Max Dataman clients reached". (PX4-Autopilot#28944)
제어
- Gain compression is now available on multicopters (MC_GC_EN). When an oscillation is detected on the torque setpoint the rate loop gain is dynamically reduced instead of requiring a manual retune, and recovers to 1.0 once the oscillation stops. The lower bound is set with MC_GC_GAIN_MIN (default
0.3). Disabled by default.
안전 설정
- Geofence Aware Return mode. (PX4-Autopilot#27145: feat(navigator): Geofence Aware RTL, PX4-Autopilot#28001: docs(navigator): [geofence] added some more warnings about limitations).
- Flight termination can now be used instead of a Descent mode as a fallback failsafe mode, allowing safer landing for unpiloted vehicles that carry a parachute. See Battery level failsafe (COM_LOW_BAT_ACT) and Position Loss Failsafe Action (new COM_POS_FS_ACT). (PX4-Autopilot#28064: feat(commander): add terminate options for critical battery and lost position failsafes).
- Failure injection ( SYS_FAILURE_EN) has been significantly extended. (PX4-Autopilot#27572, PX4-Autopilot#27832, PX4-Autopilot#27950)
- Now applied on real hardware, not just simulators (injection hooks live in the shared sensor drivers).
- Command handling is centralized behind a dedicated failure-injection manager module.
- Multiple sensor instances can be failed simultaneously via a bitmask, and failures can be triggered from an RC switch.
- Changed default behaviour of injected WRONG failure for Batteries, to publish a wrong level, and not stop publishing
- Motor failure recovery for hexarotors: on a single motor failure the control allocator removes the failed motor and additionally stops (CA_FAILURE_MODE =
1) or reverses (2) the motor opposite it to recover the lost yaw authority. Mode2requires a reverse-capable ESC and models the reverse thrust of a forward propeller with the new CA_REV_THR_FRAC (default0.4). Reversible motor outputs on DroneCAN are now sent as signedRawCommandvalues (negative is reverse). (PX4-Autopilot#28078) - Added
RTL_TYPE=6for battery-aware home priority return (PX4-Autopilot#26968). Returns to home if the estimated flight time to home is within the remaining battery time; otherwise returns to the closest rally point. Falls back to the closest safe point (home or rally) if battery time remaining is unavailable. - Secure boot now supports applications that can boot securely from SD card or eMMC. (PX4-Autopilot#28228)
- Motor failure detection now compares a low-pass filtered current residual against a separate trip band and trigger time for the undercurrent and overcurrent directions, instead of one symmetric band on the instantaneous current, and the current model gains an offset term. See Upgrading from PX4 v1.18. (PX4-Autopilot#27711, PX4-Autopilot#27917)
Estimation
- EKF2 fuses dual-antenna GNSS heading from its own topic,
vehicle_gnss_heading, at the heading's rate and measurement time instead of with each position sample. GNSS yaw fusion is gated on the heading itself (its baseline checks, and the spoofing and jamming state of the receiver providing it under GNSS_CHECK, which stop it like position fusion), not on the position checks, and it keeps running when position and velocity fusion stop.GPS_RAW_INTandGPS2_RAWreport the body-frame heading of the receiver that provides it. (PX4-Autopilot#27102) - When the local position estimate is lost in flight because of GNSS, commander now reports the reason as an event: either the receiver checks that failed, or that the receiver stopped sending data. The ground station and the log show the cause ahead of the "GNSS data fusion stopped" message. (PX4-Autopilot#28873)
센서
- Enable u-blox Diagnostics with u-center while the vehicle's GPS runs as usual. (PX4-Autopilot#28280).
- Disabling the selected IMU at runtime (setting its CAL_ACCn_PRIO or CAL_GYROn_PRIO to
0) now hands over to the next IMU without a sensor failure report, including while the vehicle is armed. A re-enabled IMU reappears insensors_status_imuand the IMU consistency check only once it publishes new data. (PX4-Autopilot#28811)
시뮬레이션
- jMAVSim has been removed in favour of SIH with the Hawkeye visualizer. See the Upgrade Guide.
- Gazebo: the GNSS failure injection commands (
failure gps off,stuckandwrong) now apply to the NavSat data published by the gz bridge, consistent with the other simulator paths. (PX4-Autopilot#28398)
Debug & Logging
- Offline motor failure replay: a host tool that runs the real motor failure detector over a recorded
.ulg, for calibrating and verifying the motor failure detection thresholds against a vehicle's own flights. (PX4-Autopilot#27917)
Ethernet
- TBD
uXRCE-DDS / Zenoh / ROS 2
- (uXRCE-DDS): SITL multi vehicle automatic namespace prefix is now
uav_{px4_instance}and it is aligned with the behaviour ofUXRCE_DDS_NS_IDX. (PX4-Autopilot#28338)
MAVLink
- ESC/motor health is now reported in SYS_STATUS using the MAV_SYS_STATUS_SENSOR_PROPULSION bit instead of MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS. (PX4-Autopilot#29192).
- SYS_STATUS now sets the MAV_SYS_STATUS_EXTENSION_USED flag in
onboard_control_sensors_presentwhen extended sensor fields are used.
RC
- TBD
Multi-Rotor
- The neural network controller (
mc_nn_control) now maps its actions to motor commands over the real motor range, so action -1 idles a motor instead of stopping it and the top of the range no longer runs past full scale. The two RPM limits and the thrust coefficient (MC_NN_MIN_RPM,MC_NN_MAX_RPM,MC_NN_THRST_COEF) are now checked against each other, and the module has its first unit tests. (PX4-Autopilot#28433) - The neural network controller (
mc_nn_control) now rejects at load a model whose input or output shape does not match what the controller expects, checks the position, attitude and angular velocity observations each cycle for validity, age and finiteness, and reports a fault on a bad observation or a non-finite output instead of stopping one motor. (PX4-Autopilot#28504) - The multicopter position controller now moves its stored fallback setpoint along with the current setpoint when the estimator resets its position, velocity or heading, so when the setpoint is unusable at the moment of a reset the controller no longer flies a fallback setpoint that is offset by the amount of the reset. (PX4-Autopilot#28810)
수직이착륙기(VTOL)
- TBD
Fixed-wing
- TECS underspeed protection now starts at the minimum airspeed (FW_AIRSPD_MIN) and is fully active at 90% of it, or halfway to FW_AIRSPD_STALL if that is higher. Previously it only started 15% of trim airspeed below the minimum airspeed. The roll angle is limited towards 20° (or FW_R_LIM if lower) while undersped, and the altitude reference is reset to avoid a pitch-up on recovery. (PX4-Autopilot#26859)
Rover
- TBD
ROS 2
- TBD