Skip to content

PX4-Autopilot Main Release Notes ​

Alpha

This 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 (default 0.4). Disabled by default. (PX4-Autopilot#28078)

Upgrade Guide ​

  • COM_ARM_TRAFF has been replaced by COM_TRAFF_AVOID. The old value 3 ("enforce for mission modes only") is migrated to COM_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, set COM_TRAFF_AVOID=1 (warning only) instead.
  • PCA9685_SCHD_HZ has been removed. PCA9685_PWM_FREQ now sets both the PWM frequency of the PCA9685 and the rate at which values are pushed to it; if you had PCA9685_SCHD_HZ set to a non-default value, set PCA9685_PWM_FREQ to 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_uavcanv0periph build, which carried CUAV CAN GPS v1 firmware in its ROMFS so the flight controller could update the GPS over DroneCAN, and the CONFIG_BOARD_UAVCAN_PERIPHERALS board option behind it have been removed. Use the standard px4_fmu-v5_default firmware and update the GPS from the SD card with cuav_can-gps-v1_default.uavcan.bin from the release instead; see DroneCAN Firmware Update. (PX4-Autopilot#28870)
  • jMAVSim has been removed. make px4_sitl jmavsim and the 10017_jmavsim_iris airframe (SYS_AUTOSTART=10017) no longer exist, and the setup scripts no longer install Java or ant. 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 = 1 now 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, and CA_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_OFFS and EKF2_GPS_YAW_OFF are 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. The baseline comes from the antenna positions (SENS_GNSSn_OFFX/Y/Z of both receivers for a moving base, plus SENS_GNSSn_AUXX/Y/Z for 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 own GPS_YAW_OFFSET; set that to 0. Heading is taken only from sensor_gnss_relative (u-blox, Unicore UM982, Septentrio, DroneCAN RelPosHeading): the Trimble MB-Two, Femtomes, NMEA HDT, SBG and MicroStrain headings and the heading in DroneCAN Fix2 are no longer used, and the heading, heading_offset and heading_accuracy fields of sensor_gps are removed. (PX4-Autopilot#27102)
  • GNSS topics, messages and parameters are renamed. The per-receiver topic sensor_gps is now sensor_gnss (SensorGnss). vehicle_gps_position is now vehicle_gnss (VehicleGnss), which nests the selected receiver's sample as receiver (for example vehicle_gnss.receiver.latitude) and adds the corrected timestamp_sample and antenna_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_down and cog_rad → course; antenna_offset_x/y/z moved to vehicle_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 of VehicleGnss: only timestamp and timestamp_sample are converted to ROS time, while receiver.timestamp and receiver.timestamp_sample stay on the PX4 boot clock. timestamp is now when the sensors module published the sample; use timestamp_sample for the measurement time. SENS_GPS_MASK, SENS_GPS_TAU, SENS_GPS_PRIME and SENS_GPSn_ID/OFFX/OFFY/OFFZ/DELAY are now SENS_GNSS_* and SENS_GNSSn_* (the driver GPS_* and EKF2_* 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 from uorb.sensor_gps to uorb.sensor_gnss (uavcan.sub.uorb.sensor_gnss.0.id, uavcan.pub.uorb.sensor_gnss.0.id); UCAN1_UORB_GPS and UCAN1_UORB_GPS_P are unchanged. (PX4-Autopilot#24399)

Other changes ​

Hardware Support ​

  • DroneCAN ESCs no longer need to set UAVCAN_PUB_ARM as ArmingStatus is published automatically whenever UAVCAN_ENABLE is 3 (ESC output enabled). (PX4-Autopilot#28364)

Common ​

  • The unit and functional test suite builds, links and runs on macOS (make tests), and px4_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)

Control ​

  • 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.

Safety ​

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 EKF2_GPS_CHECK, which stop it like position fusion), not on the position checks, and it keeps running when position and velocity fusion stop. GPS_RAW_INT and GPS2_RAW report the body-frame heading of the receiver that provides it. (PX4-Autopilot#27102)

Sensors ​

Simulation ​

  • 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, stuck and wrong) now apply to the NavSat data published by the gz bridge, consistent with the other simulator paths. (PX4-Autopilot#28398)

Debug & Logging ​

  • TBD

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 of UXRCE_DDS_NS_IDX. (PX4-Autopilot#28338)
  • TBD

RC ​

  • TBD

Multi-Rotor ​

  • TBD

VTOL ​

  • TBD

Fixed-wing ​

  • TBD

Rover ​

  • TBD

ROS 2 ​

  • TBD