版本声明
本文内容基于 PX4 Autopilot 当前主线参数体系整理,适用于PX4 v1.13~v1.16
需要注意的是:
旧版(v1.11 / v1.12)中部分参数仍保留
_ACC后缀部分日志 topic 在新版本中已迁移到新的 uORB 命名体系
启用Control Allocation(控制分配)后,执行器输出 topic 与旧版不同
例如:
旧版:
MPC_Z_VEL_P_ACC actuator_outputs当前主流版本:
MPC_Z_VEL_P actuator_motors因此如果直接参考旧教程,经常会出现:
参数搜不到、日志字段对不上、Flight Review 曲线名称不一致
一、PX4 调参前必须先理解控制链
很多人调参时一上来就改 PID,但 PX4 的控制器不是单层结构,而是串级控制
完整链路:
位置控制 Position Controller ↓ 速度控制 Velocity Controller ↓ 姿态控制 Attitude Controller ↓ 角速度控制 Rate Controller ↓ Control Allocation / Mixer ↓ 电机输出这意味着:
任何外层异常,往往根源都在内层
例如:
如果角速度环跟踪不好:
姿态一定不准
定点一定漂
高度控制也会被间接影响
所以官方推荐的调参顺序始终是:
Rate → Attitude → Velocity → Position
这个顺序不能反
二、PX4 当前最核心的参数是哪几组
1、角速度环参数(最先调)
Roll:
MC_ROLLRATE_P MC_ROLLRATE_I MC_ROLLRATE_DPitch:
MC_PITCHRATE_P MC_PITCHRATE_I MC_PITCHRATE_DYaw:
MC_YAWRATE_P MC_YAWRATE_I MC_YAWRATE_D这是最底层控制器
直接作用于:
vehicle_angular_velocity控制目标:
让实际角速度跟踪期望角速度
P 项决定响应力度
P 偏小:
飞机发软
响应慢
手感拖
P 偏大:
高频抖动
电机声音尖锐
I 项负责稳态误差
I 偏小:
风中慢慢偏移
I 偏大:
回正后拖尾
D 项负责抑制变化趋势
D 偏小:
动作停不住
D 偏大:
电机温升明显
高频噪声增加
2、姿态环参数
姿态环参数较少:
MC_ROLL_P MC_PITCH_P MC_YAW_P作用:
把姿态误差转换成角速度目标
也就是:
attitude error → rate setpoint正常工程中:
默认值通常已经比较接近合理值
大多数问题先看 Rate
3、高度控制参数
这是很多旧教程最容易写错的地方
当前版本:
MPC_Z_P MPC_Z_VEL_P MPC_Z_VEL_I MPC_Z_VEL_D注意:
旧版_ACC后缀已经不作为主流命名
控制关系:
高度误差 → 垂直速度目标 → 推力控制MPC_Z_P
决定高度误差转速度目标的力度
大:
拉升积极
但容易弹跳
小:
响应慢
MPC_Z_VEL_P
控制垂直速度响应
大时容易出现:
悬停上下轻弹
MPC_Z_VEL_I
负责长期误差修正
小:
缓慢漂高漂低
MPC_Z_VEL_D
决定收尾刹车能力
不足时:
拉升后停不住
4、当前版本水平速度控制参数
当前主流:
MPC_XY_P MPC_XY_VEL_P MPC_XY_VEL_I MPC_XY_VEL_D控制关系:
位置误差 → 水平速度目标 → 姿态目标刹车长
通常:
MPC_XY_VEL_P 偏小定点慢漂
先别急着改位置参数
优先确认:
Rate 是否稳定
EKF 是否健康
三、调参的正确工程顺序
1、确认悬停油门
看参数:
MPC_THR_HOVER合理范围:
0.3 ~ 0.6如果悬停已经接近 0.7:
说明动力余量不足
这时调 PID 效果有限
2、调角速度环
核心日志:
vehicle_rates_setpoint vehicle_angular_velocity这是当前 PX4 最核心的调参依据
正常状态
实际曲线紧贴目标曲线
滞后明显
通常:
P 偏小
超调
通常:
P 偏大或 D 偏小
高频毛刺
先查振动,不要先改 PID
3、调姿态环
看:
vehicle_attitude_setpoint vehicle_attitude如果姿态响应慢,再看姿态环
4、最后调位置与高度
因为外环表现很容易被内环误导,所以应该确认内环稳定后再调外环
5、PX4 当前版本日志分析(Flight Review 实战)
推荐工具:
Flight Review
支持:
.ulg日志上传后最先看以下几组topic
四、当前版本最重要的日志 topic(按工程优先级)
1、Rate 控制分析(必须先看)
vehicle_rates_setpoint vehicle_angular_velocity为什么先看它
因为:
这是最底层控制闭环
这里不对,上层全部不可信
2、姿态控制分析
vehicle_attitude_setpoint vehicle_attitude看姿态是否存在系统性滞后
3、电机输出
当前推荐看:
actuator_motors如果某一路长期接近上限:
说明:
控制余量不足或电机接近饱和
4、控制器原始输出(比电机输出更早一级)
看:
actuator_controls_0表示:
roll / pitch / yaw / thrust这是姿态控制器直接输出
5、高度控制分析
看:
vehicle_local_position.z trajectory_setpoint.z如果目标平稳,实际上下波动
再看:
vertical velocity再判断是:
参数问题
动力问题
气压扰动
6、EKF 健康状态(很多人忽略)
看:
estimator_status重点关注:
vel_test_ratio pos_test_ratio hgt_test_ratio mag_test_ratio如果长期 >1:
说明估计不健康
这时调 PID 没意义
7、振动分析(决定 D 项能否成立)
看:
sensor_combined振动高时常见表现:
高度跳
D 项异常
电机输出毛刺
五、当前版本最常见误区
错误一:定点漂就改 MPC_XY
很多时候根因是:
Rate 环未闭合错误二:高度跳就加 D
可能真正原因是:
气压计受振动影响
错误三:照搬别人参数
不同机架:
惯量完全不同
尤其大型机:
P 一般更保守
六、工程中真正有效的调参方法
每次只改一项:
例如:
MC_ROLLRATE_P 增加 5%然后重新下载飞日志
对比:
vehicle_rates_setpoint vehicle_angular_velocity只有这样才能知道参数变化带来的真实影响
七、结论
PX4 调参真正核心不是“改参数”,而是:
理解控制链,再用日志验证控制器是否按预期工作
飞机飞稳不代表控制正确
真正成熟的判断标准是:
目标值与实际值是否在控制器各层都能闭合