PX4 v1.17.0 版本指南:新飞行模式、ROS 2 控制接口与升级要点全解析

原创2026-10-02 10:44:451,387 阅读
文章标签:无人机嵌入式机器人智能硬件

PX4 v1.17.0 版本指南:新飞行模式、ROS 2 控制接口与升级要点全解析

本指南以 PX4-Autopilot v1.17.0 官方 Release Notes(docs/en/releases/1.17.md)为主线,逐条解析该版本引入的重大变更、升级注意事项与横跨飞行控制、估计、传感器、仿真、中间件、MAVLink、RC、安全与基础设施的改进,并辅以仓库源码与配套文档佐证底层实现。读完你将能:按清单安全完成 v1.16 → v1.17 升级;上手新推出的 Altitude Cruise 巡航模式;通过 ROS 2 控制接口直接驱动固定翼与地面车;理解 Zenoh 中间件、气压计自动校准等新能力的参数与构建用法。

说明:PX4 v1.17 的文档曾发布在 alpha/beta 分支上,本仓库当前还维护了更新的 main 分支 Release Notes,建议同步查阅。

Major Changes:v1.17 的六项核心更新

1. 新多旋翼飞行模式:Altitude Cruise(定倾角巡航)

v1.17 引入了一个全新的多旋翼手动飞行模式 Altitude Cruise(完整行为定义见 Altitude Cruise Mode (Multicopter))。它与 Altitude 模式最大的区别在于摇杆回中后的行为:

  • Altitude 模式:松杆后飞机会回到水平姿态,逐渐减速直至停住;
  • Altitude Cruise:松杆后保持当前的倾角与航向,维持当前高度继续巡航。若在水平面上有速度,飞机会持续加速直到风的阻力与倾角产生的加速度平衡,随后以恒定速度巡航;即使机身完全水平,侧风也会使飞机顺风漂移。

该模式定位为长距离飞行场景——需要长时间保持同一倾角时,无需持续压杆。源码实现位于 FlightTaskAltitudeCruise.cpp:任务类继承自 FlightTaskManualAltitudeSmoothVel,并在 _updateXYSetpoint() 中调用 StickTiltXY::generateAccelerationSetpointsForAltitudeCruise() 生成水平加速度设定值。

摇杆响应逻辑(对应 StickTiltXY.cpp 的实现)要点:

  • 横滚/俯仰摇杆控制倾角的变化率。满杆时倾角设定值在 0.5 秒内从水平变化到最大倾角,对应源码中 _altitude_cruise_acceleration += increment * _maximum_acceleration * 2.f * dt 的积分逻辑,并以 _maximum_acceleration(由 MPC_MAN_TILT_MAX 换算的侧向加速度上限,约束在约 [0.02, 3] g)封顶;
  • 偏航摇杆改变倾角的方向(转弯换向),而非像 Acro 模式那样直接绕机体偏航轴旋转;
  • 油门摇杆控制升降速度(约 50% 处悬停保持高度);
  • 起飞:着陆状态下油门推到全行程的 62.5% 以上即触发起飞。

关键参数:

参数 说明
COM_RCL_EXCEPT 可通过对该参数置位对应 bit,为该模式禁用"手动控制丢失"失效保护(该模式是少数允许这样做的模式)
NAV_DLL_ACT 数据链路丢失失效保护动作。若禁用了手动控制失效保护,强烈建议配置此项防止飞丢
MPC_MAN_TILT_MAX 允许的最大倾角;满杆时从水平到此倾角耗时 0.5 秒

安全提示:只有能时刻保持稳定数据链时才建议为该模式禁用手动控制失效保护。此外,进入/在此模式下解锁还要求具备角速度、姿态、本地高度(相对 EKF2 原点)与摇杆输入等模式前置条件(见 mode_requirements)。

2. 固定翼起飞模式:导航丢失时保持爬升

Fixed Wing Takeoff mode 在 v1.17 中改进为:导航丢失(navigation loss)时仍保持机翼水平继续爬升,并可用起飞航点的经纬度定义盘旋(loiter)位置(对应 PR PX4-Autopilot#25226)。

3. ROS 2 控制接口:固定翼横向/纵向设定值

固定翼(及固定翼模式下的 VTOL)现在可通过 PX4 ROS 2 Control Interface 中的新类型 FwLateralLongitudinalSetpointType 直接下发横向(turning/banking)与纵向(加速、爬升/下降)设定值,绕过内部姿态控制器层级,见 px4_ros2_control_interface.md。该接口库的源码位于 src/lib/ros2(如 px4_ros2/control/permission.hpp 等),并通过 msg/translation_node 完成 uORB ↔ ROS 2 消息翻译。

4. ROS 2 控制接口:Rover 设定值类型

地面车(Rover)同样新增 RoverSetpointTypes,将位置、速度、油门、姿态、角速率、转向等设定值以"保证合法"的组合形式暴露给 ROS 2 用户(见 Rover Setpoints)。配套的 Apps & API 指南推荐两条接入路径:

方法 说明
PX4 ROS 2 Interface(推荐) 注册自定义 drive mode,发布 RoverSetpointTypes,控制标志自动设置、输入保证有效
ROS 2 Offboard Control 使用 PX4 内部 Offboard 模式,按 dds_topics.yaml 发布消息;不保证设定值必然合法,需自行维护 OffboardControlMode 标志

5. Zenoh 中间件向 rmw_zenoh 兼容成熟

v1.16 引入的树内 Zenoh 中间件 在 v1.17 完成多项关键演进(仍标记 Experimental):

  • rmw_zenoh 兼容:实现 rmw_zenoh 特性、将 ROS 2 RMW 挂接代码迁至 rmw_attachment.h、序列化切换为 CDRv1 以匹配 ROS 2、传输租约设为 60 s、加入实验性 liveliness 使 ROS 2 图可用;
  • 配置与 CLI:从 dds_topics.yaml 自动生成默认 Zenoh 配置、新增 Domain ID 参数(gid 移入 Zenoh)、改进 Zenoh CLI(实例选择、pub/sub 删除)、沿用 uXRCE 的配置布局;
  • 构建方式:
    • FMU-v6xRT 默认固件内置 Zenoh:make px4_fmu-v6xrt_default;
    • FMU-v6x 与 SITL 提供可选 zenoh 构建变体:make px4_fmu-v6x_zenoh、make px4_sitl_zenoh;
    • auterion/fmu-v6s、auterion/fmu-v6x 提供同样的 zenoh.px4board;
    • nxp/mr-canhubk3、nxp/mr-tropic、nxp/tropic-community 默认编译 Zenoh;
    • SITL/POSIX 默认地址为 127.0.0.1,启用后 SITL 自动启动 Zenoh。

6. 板载 TensorFlow Lite Micro:MC 神经网络控制试验路径

v1.17 集成 TensorFlow Lite Micro(tflm),可将外部训练(如用强化学习在 Aerial Gym 等环境训练)的 tflite 模型加载进多旋翼,替换控制器用于研究与台架测试(对应 PR PX4-Autopilot#24366)。注意:这是试验性试验路径,不替代生产控制器栈。

Upgrade Guide:v1.16 → v1.17 升级检查清单

升级前请逐条核对以下 11 项,避免飞前踩坑:

  1. 重新检查 RC 摇杆死区。RC 通道 1–8 上硬编码的 1% 死区已被移除(PR PX4-Autopilot#25502)。若发射机摇杆有中位抖动,升级后需通过 RC<N>_DZ 显式配置每通道死区,否则 v1.16 中被忽略的微小杆量噪声会被响应。
  2. 用新的 PWM_*_CENTER 参数重新配舵机中位。旧的 PWM_*_TRIM 已被替换为支持非对称行程的 PWM_*_CENTER,且旧值不会自动迁移(PR PX4-Autopilot#25897)。升级后需在 QGC 的舵机配置中为每个曾用 PWM_*_TRIM 的通道重新设置中位。
  3. 升级依赖 MAVLink v1 的地面站/伴侣计算机。MAV_PROTO_VER 现在默认值为 2(PR PX4-Autopilot#25583)。v1 仍可用但需显式选择:要么升级 GCS/数传/伴侣到 v2,要么在受影响通道设置 MAV_PROTO_VER=1。
  4. 迁移手动控制 expo 与死区参数。MPC_XY_MAN_EXPO、MPC_Z_MAN_EXPO、MPC_YAW_MAN_EXPO 已移除并回退到固定默认值;MPC_HOLD_DZ 更名为 MAN_DEADZONE 并全局生效(适用于所有允许死区的模式)。若曾调过 expo 或保持死区,请显式设置 MAN_DEADZONE;expo 自定义已不可用。
  5. 确认气压计自动校准行为符合你的场景。新参数 SENS_BAR_AUTOCAL 在 GNSS 作为高度参考时以 GNSS 高度校准气压计偏移,且默认开启(源码见 params.yaml,type: boolean, default: 1,实现位于 VehicleAirData.hpp)。室外典型飞行这正是期望行为;若在室内或 GNSS 严重退化环境希望锁定 baro 偏移,请禁用该参数。
  6. 若依赖 EKF2_RNG_A_IGATE 需重新调参。该参数已随 EKF2 参数命名一致性重构被移除,range-aid 调参需依赖其余 EKF2_RNG_A_* 参数;默认 EKF2_MIN_RNG 也从 0.1 m 降至 0.01 m(PR PX4-Autopilot#25137、PX4-Autopilot#25574)。
  7. 核实磁力计配置。磁力计校准仅在至少一个磁力计可用且启用(优先级非 0)时允许。若此前通过优先级 0 禁用了所有磁力计,校准前必须先启用至少一个(PR PX4-Autopilot#25714)。
  8. 检查机架选择。SYS_AUTOSTART=0 现在与"无有效机架"同等对待(PR PX4-Autopilot#25645)。依赖 SYS_AUTOSTART=0 的自定义流程请改为显式选择机架。
  9. 更新脚本与外部工具对重命名接口的引用:commander lockdown on → commander termination;动作 FORCE_FAILSAFE → TERMINATION;manual_lockdown → kill。启动脚本、测试框架与外部工具需同步改名。
  10. 迁移 battery_status.serial_number 的消费者。serial_number 字段已从 battery_status 迁至新的 battery_info uORB 消息,日志记录器、GCS 与伴侣软件需改订阅 battery_info(对应新消息定义 msg/BatteryInfo.msg)。
  11. 从自定义构建流程中移除 parameters_injected.xml。该文件已从构建系统删除(PR PX4-Autopilot#25549),自定义板层或下游 fork 若引用需移除。

Other Changes 分类详解

硬件支持

新飞控:

既有硬件的全新构建目标:cuav/fmu-v6x(对应 CUAV Pixhawk V6X)与 auterion/fmu-v6x。对应板级目录见 boards/cuav/fmu-v6x 与 boards/auterion/fmu-v6x。

新 CAN 外设与车辆平台:MR-CANHUBK344 NXP B3RB Rover 平台(PR PX4-Autopilot#23897)、NXP MR-Tropic 目标(imxrt 相关修复,PR PX4-Autopilot#26052)、ARK X20 与 F9P GPS 接收机(PR PX4-Autopilot#25149)、ARK DIST 距离传感器。

既有板卡改进:

  • FMU-v6xRT:新增 V6XRT001/V6XRT002 传感器组、LIS2MDL 与 BMM350 磁力计支持、DTCM 并入堆(PR PX4-Autopilot#25733);
  • FMU-v6s:PCA9685 PWM 扩展驱动、INA226/INA228/INA238 电源监控支持、HSE 作为 RTC 时钟、初始化脚本调整为先启动内部传感器;
  • ARK FPV:新增 rover 板变体、payload 投递模块与 encrypted_logs Flash 节省(FW/VTOL 裁剪,PR PX4-Autopilot#25319、PX4-Autopilot#25322);
  • ARK SCH16T 驱动适配新 Murata 模组(PR PX4-Autopilot#24029);
  • mRO PixracerPro:启用更多 UART(PR PX4-Autopilot#22516);
  • 3DR Control Zero H7 OEM Rev G:修复 MTD 驱动与缺失模块导致的 USB 枚举失败(PR PX4-Autopilot#25015);
  • ESP32:PWM 寄存器变更即时生效(PR PX4-Autopilot#25653);
  • Tropic-Community 底板(Teensy 4.1):PX4 配置刷新、DTCM 移入堆且向量置于 ITCM。

通用(Common)

  • 通过 SYS_BL_UPDATE 的 QGC Bootloader 更新 在损坏数个版本后重新启用(PR PX4-Autopilot#25032);
  • 失效保护处理现在允许飞行员从降级失效保护状态接管(PR PX4-Autopilot#26269);
  • 无 RC 时不再进入 Offboard → Position(Hold)模式切换(PR PX4-Autopilot#26391);
  • 电机失效检测使用更稳健的超时检查(PR PX4-Autopilot#25757);
  • 新 battery_info uORB 消息(含与 UAVCAN、MAVLink 及电池驱动兼容的序列号),battery_status.serial_number 移除;
  • UAVCAN 电池剩余时间计算改进(PR PX4-Autopilot#25500),采样间隔提升至 500 ms(PR PX4-Autopilot#25454);
  • 电池实例上限为 3(可记录电池同步提升至 3);
  • 剩余飞行时间失效保护默认禁用;
  • 移除 COM_RC_ARM_HYST,解锁/上锁手势需保持默认 1 秒(PR PX4-Autopilot#25999)。

控制(Control)

  • 舵机 PWM 新增中位与非对称行程(PWM_*_CENTER,PR PX4-Autopilot#25897);
  • PWM 中位支持扩展至轮式与云台执行器(PR PX4-Autopilot#26211);
  • 可通过 Kconfig 配置板级 PWM 频率(PR PX4-Autopilot#24787);
  • DShot 遥测重构到平台串行抽象并支持 RX/TX 引脚交换;
  • UAVCAN ESC 初始化不再在停止时发布随机值(PR PX4-Autopilot#25485);
  • 长刷写期间 UAVCAN 引导加载程序看门狗喂狗(PR PX4-Autopilot#25523);
  • v6x 上航天器(spacecraft)启用控制分配器(PR PX4-Autopilot#25276)。

估计(Estimation)

  • 气压计自动校准:GNSS 作为高度参考时以 GNSS 高度校准偏移,默认启用(PR PX4-Autopilot#24859);
  • Septentrio GNSS 韧性报告(干扰、欺骗、认证状态)暴露给 PX4(PR PX4-Autopilot#25012);
  • EKF2 GPS 检查加入 fix 类型校验位(PR PX4-Autopilot#25215);
  • EKF2 GNSS 辅助:EstimatorStatusFlags 新增专用 gnss_fault 标志;gnss_hgt_fault 时禁用 lat/lon/vel 融合;重启用滞回;航位推算模式抑制 GNSS 高度复位;
  • EKF2 range 融合:跳过不健康样本并尊重超时(PR PX4-Autopilot#25634)、bad_acc_vertical 期间拒绝坏测量(PR PX4-Autopilot#25636);
  • EKF2 磁力计:起飞后偏航复位不再跳过;磁航向与磁偏角更新不再扰动 xy 陀螺零偏;
  • EKF2 重力:倾斜对准加速;重力融合启动改用加速度低通而非峰值保持;
  • EKF2 空速/风:区分空速来源,使风航位推算逻辑可用合成空速;
  • MAV_CMD_EXTERNAL_ATTITUDE_ESTIMATE 外部航向更新现被 EKF2 消费;
  • UAVCAN GNSS 接收机也发布 RTCM 遥测流(PR PX4-Autopilot#25315);
  • EKF2 GNSS 复位改进(PR PX4-Autopilot#25297)。

传感器(Sensors)

仿真(Simulation)

Gazebo:

  • CMake 链接对 gz-transport、gz-sim、gz-sensors、gz-plugin 变为版本无关,移除对 Harmonic 的硬绑定;Harmonic 仍为 CI 测试的受支持版本,构建更新版本(如 Jetty/v15)由开发者自行安装验证(PR PX4-Autopilot#25521);
  • Rover 仿真 更新以匹配新的 rover 控制架构(PR PX4-Autopilot#25644);
  • Gazebo 桥接传感器可选择性禁用(PR PX4-Autopilot#25484);
  • 云台偏航修复与 Gazebo 桥 DDS 姿态发布(PR PX4-Autopilot#25754);
  • 新增 PX4_GZ_MODEL_POSE 自定义生成位姿(PR PX4-Autopilot#24956);
  • 更新 Gazebo 24.04 文档(PR PX4-Autopilot#25586)。

Simulation-in-Hardware(SIH):

调试与日志(Debug & Logging)

ROS 2 / uXRCE-DDS

ROS 2 / Zenoh

见上文"Major Changes"第 5 点。补充要点:

  • 稳健性改进:栈分配前校验负载大小、增大 CDR 安全裕度、配置解析错误与非存在类型处理、主题名与数据类型映射修复、pubsub 工厂数据类型命名修复、状态 keyexpr printf 修复、zenoh-pico 整数转换告警消除、可选 publish-on-matching 优化内存;
  • 文档与 OOM 修复回移植(PR PX4-Autopilot#26053);
  • 更新 zenoh-pico 子模块。

MAVLink

  • MAVFTP 加固:拒绝 FTP 操作中的路径遍历序列,并在 FTP write/burst 中校验会话;
  • MAVLink v1 通过 MAV_PROTO_VER 显式选择(PR PX4-Autopilot#25583);
  • 实现扩展版 MISSION_CURRENT 消息(填充 mission_state 等字段,对应 mavlink/mavlink#1869,PR PX4-Autopilot#25034);
  • MAV_CMD_REQUEST_MESSAGE 支持 MESSAGE_INTERVAL(PR PX4-Autopilot#25460);
  • 低带宽流配置文件加入更多重要流并更新速率(PR PX4-Autopilot#25524);
  • 低带宽链路上参数传输限流(PR PX4-Autopilot#25126);
  • 从 SYSTEM_TIME 设置系统时钟(PR PX4-Autopilot#24807);
  • 新增通过 MAVLink 流式传输 Hardfault 的选项;
  • 新增 MAVLink 模糊测试。

RC

  • 移除 RC 通道 1–8 硬编码 1% 死区(PR PX4-Autopilot#25502);
  • ManualControlSelector 重构:稳健超时检查、统一有效性条件、简化优先级排序,并支持 RC 或 MAVLink 优先加回退;
  • COM_RC_IN_MODE 扩展 source-ID 升序/降序优先级模式,文档重写;
  • 载荷电源开关泛化:支持可选三档开关,允许在 ARK FPV 之外的板卡使用,并附单元测试。

多旋翼(Multi-Rotor)

  • 新增 Altitude Cruise 模式(见上文);若通过 COM_RCL_EXCEPT 禁用该模式的手动控制失效保护,务必用 NAV_DLL_ACT 配置数据链路失效保护以防飞丢;
  • 摇杆库重构:全局可用、getter 式、expo 在 getter 调用时计算;FixedWingModeManager 改用 Sticks 库;
  • Orbit 模式:可配置最大速度替代 10 m/s 硬编码(PR PX4-Autopilot#25192),引入 HeadingSmoothing 避免接近阶段阶跃,文档澄清(PR PX4-Autopilot#25208);
  • MC PositionControl:收到 trajectory_setpoint 立即退出 goto 设定值;
  • SIH 与 ActuatorEffectivenessRotorsTest 新增 Hexarotor X;
  • MC_RATE* 参数元数据统一(PR PX4-Autopilot#25133);
  • 移除 MPC_{XY/Z/YAW}_MAN_EXPO 改用默认值(PR PX4-Autopilot#25435);
  • MPC_HOLD_DZ 更名为 MAN_DEADZONE 以便在允许死区的模式全局可用(PR PX4-Autopilot#25435)。

VTOL

  • 修复 Mission Fast RTL 中后转换后 VTOL 卡住的问题;
  • VTOL 起飞仅在固定翼阶段要求 relaxed position;起飞完成后强制进入 Loiter;
  • VTOL 空速测量处理集中化;
  • PX4 ROS 2 Control Interface 可从外部模式命令 VTOL 转换。

固定翼(Fixed-wing)

  • 起飞模式在导航丢失时保持水平机翼爬升、可用起飞航点经纬度定义盘旋位置(PR PX4-Autopilot#25226);
  • 重构固定翼高层控制,为外部集成暴露干净的横向/纵向控制接口;
  • FW 姿态控制器轮式控制器重构;
  • FW Autotune:识别机动自动递增 1 Hz 幅值,直至 R/P/Y 角速率达 0.8/0.5/0.5 rad/s,再按此缩放识别信号;
  • TECS 加固:空速与高度输入 NaN 防护。

Rover

  • 移除废弃 rover 模块;
  • 新增 Apps & API 支持,含 Rover Setpoints;
  • Rover 仿真 更新以匹配重构后的 rover 架构(PR PX4-Autopilot#25644);
  • 持续推进按车辆类型(Ackermann/差速/麦克纳姆)的结构拆分:执行器控制分离、位置控制更新、模式管理集中、模块按文件夹拆分;
  • 新增摇杆输入缩放参数(PR PX4-Autopilot#25427);
  • 改进 hold 位置逻辑(PR PX4-Autopilot#25466);
  • RX_MAX_THR_YAW_R 替换为 RO_YAW_RATE_CORR;
  • 手动偏航角速率输入采用指数缩放;
  • 发布全面的 Rover API 文档(PR PX4-Autopilot#25499);
  • MR-CANHUBK344 NXP B3RB rover 平台(PR PX4-Autopilot#23897);
  • Aion Robotics R1 Rover 机架(50001)标记为停产。

安全 / Commander

  • 失效注入重构为独立类;failure motor off -i <n> 现在要求设置 CA_FAILURE_MODE(见 failure_injection,PR PX4-Autopilot#25756);
  • 更清晰的命名:FORCE_FAILSAFE → TERMINATION;commander lockdown on → commander termination;manual_lockdown → kill;ACTION_TERMINATE → ACTION_TERMINATION;
  • 新增 RC 终止开关(PWM 输入默认),用于 ATS 飞行终止(PR PX4-Autopilot#25209);
  • Commander 不再覆盖用户有意的终止(附单元测试);
  • 剩余飞行时间失效保护默认禁用;
  • 未完成任务期间着陆不再重置 Home 位置(PR PX4-Autopilot#24902);
  • 修复偏航任务着陆(off-track mission landing,PR PX4-Autopilot#25725)。

基础设施(Infrastructure)

  • parameters_injected.xml 从构建系统移除(PR PX4-Autopilot#25549);
  • 通过 SYS_BL_UPDATE 的 QGC Bootloader 更新 恢复(PR PX4-Autopilot#25032);
  • NuttX 子模块更新:dcache 修复与信号量持有者链表修复;
  • CI 新增 ITCM 检查器;v6xRT 与 Tropic-Community 更新 ITCM 映射;
  • KakuteH7 encrypted-logs 变体及部分 ARK 目标实现 Flash 节省;
  • Commander 与 VehicleStatus 的航天器工具(PR PX4-Autopilot#24716)。

结语:从 v1.17 看 PX4 的演进方向

v1.17 的三个主线清晰可辨:操控体验优化(Altitude Cruise、死区/expo 参数重构、PWM 中位语义)、外部集成能力强化(固定翼与 Rover 的 ROS 2 控制接口、Zenoh/rmw_zenoh 成熟、DDS 主题扩展)以及估计与安全底座加固(气压计自动校准、EKF2 故障标志与滞回、MAVFTP 与终止接口的安全语义)。升级用户应重点完成本指南 Upgrade Guide 中的 11 项核对,尤其是 RC 死区、PWM_*_CENTER 重配与 MAV_PROTO_VER=2 默认值这三项直接影响飞行安全与地面站兼容性的变更。

登录后查看全文
PX4-Autopilot