3. 核心姿态参数解析:ATT_* 系列参数(加速度计、陀螺仪、磁力计对齐与校准)
好,我们进入第三章。这一章聊的是飞控里最基础、也最容易出问题的一块——ATT_* 系列参数。
说白了,这些参数就是告诉飞控:你的传感器是怎么装在飞机上的,它们之间有没有对齐,数据该信谁的。我见过太多炸机案例,最后查下来,根源就是 ATT_* 没配好。嗯,咱们今天就把这块彻底讲透。
核心观点:ATT_* 参数不是调参锦上添花的东西,而是飞控能正常工作的前提。传感器对齐错了,后面所有姿态控制都是空中楼阁。
3.1 为什么需要 ATT_* 参数?—— 传感器坐标系对齐
你想想看,飞控板上的 IMU(惯性测量单元)是焊死在电路板上的。它的加速度计和陀螺仪,默认的坐标系是跟着芯片封装走的。但你的飞机——不管是 X 型四旋翼还是 H 型六旋翼——它的机体坐标系是另一套定义。
这两套坐标系如果不做映射,飞控读到的“向前加速”可能实际上是“向右加速”。那姿态估计就全乱了。
ATT_* 参数干的就是这件事:把传感器坐标系旋转到机体坐标系。
我的习惯:拿到一块新飞控板,第一件事不是调 PID,而是先检查 ATT_* 参数。我会把板子平放,看加速度计 Z 轴读数是不是 9.8 m/s²,X/Y 轴是不是接近 0。这一步能筛掉 80% 的硬件安装问题。
3.2 核心参数逐项解析
ATT_* 家族参数不少,但真正核心的就几个。我按使用频率排个序,咱们一个一个过。
| 参数名 | 默认值 | 作用 | 典型修改场景 |
|---|---|---|---|
| ATT_W_ACC | 0.2 | 加速度计在姿态融合中的权重 | 震动大时降低,悬停不稳时提高 |
| ATT_W_MAG | 0.1 | 磁力计在偏航融合中的权重 | 室内无磁干扰时提高,有干扰时降低 |
| ATT_W_GYRO_BIAS | 0.1 | 陀螺仪零偏估计的学习速率 | 传感器老化时适当提高 |
| ATT_ACC_COMP | 1(启用) | 是否启用运动加速度补偿 | 固定翼或高速飞行时建议关闭 |
| ATT_MAG_DECL | 自动 | 磁偏角(真北与磁北的夹角) | 高纬度地区或自动获取不准时手动设置 |
3.2.1 ATT_W_ACC —— 加速度计信任度
这个参数控制着飞控有多相信加速度计测出来的“重力方向”。
数值越大,加速度计对姿态修正的力度越强。但问题来了——加速度计在剧烈机动或震动环境下,测出来的方向是包含运动加速度的,不是纯重力。你如果权重设太大,飞控会把转弯时的向心加速度误判为“飞机歪了”,然后疯狂修正,结果就是震荡。
我个人的经验是:多旋翼悬停场景,0.2 是个不错的起点。如果你发现飞机悬停时慢慢往一边漂,可以试着提到 0.3。但超过 0.4 就要小心了,震动大的机架很容易出问题。
我曾经踩过的坑:有一台大轴距六旋翼,震动滤波没做好,我把 ATT_W_ACC 从 0.2 提到了 0.5 想改善悬停精度。结果一离地就开始高频抖动,差点把云台甩下来。后来查日志发现,加速度计数据里混入了大量桨叶震动频率,权重一高,姿态估计反而更差了。
3.2.2 ATT_W_MAG —— 磁力计信任度
偏航(Yaw)是姿态估计里最头疼的。加速度计和陀螺仪都测不了偏航,只能靠磁力计或者 GPS 航向。磁力计的问题是——太容易被干扰了。
ATT_W_MAG 默认 0.1,这个值其实很低。为什么?因为 PX4 的设计哲学是:宁可偏航漂移,也不要被磁力计带偏。
你想想看,如果飞控附近有大电流导线、电机、或者地面有钢筋,磁力计读数可能偏了 30 度。如果权重设高了,飞控会以为飞机在转,然后反打舵面,结果就是飞机原地画圈。
我建议:在开阔无磁干扰的环境下试飞,可以提到 0.15~0.2。但如果你在城区或者工业区飞,保持 0.1 甚至降到 0.05 更安全。
3.2.3 ATT_W_GYRO_BIAS —— 陀螺仪零偏学习速率
陀螺仪有个毛病——它会温漂。开机时零偏是一个值,飞了十分钟温度上来,零偏就变了。PX4 的 EKF(扩展卡尔曼滤波器)会在飞行中在线估计这个零偏,然后补偿掉。
ATT_W_GYRO_BIAS 控制的就是这个估计速度。数值越大,飞控越快地修正陀螺仪零偏。但太快了也不行——如果飞机在做匀速转弯,飞控可能把正常的角速度误判为零偏,然后错误地补偿掉。
默认 0.1 是经过大量测试的折中值。除非你发现陀螺仪有明显的温漂问题(比如冷启动和热机后偏航漂移量差异很大),否则我不建议动它。
3.3 传感器对齐:从硬件到软件
聊完权重参数,咱们说说更硬核的——传感器物理对齐。
PX4 里用 SENS_BOARD_ROT 参数来定义飞控板相对于机体的安装角度。这个参数是一个枚举值,从 0 度到 315 度,每 45 度一个档。但如果你有特殊安装角度(比如 30 度),就得用 SENS_BOARD_X_OFFSET、SENS_BOARD_Y_OFFSET、SENS_BOARD_Z_OFFSET 来做微调。
这里有个容易搞混的点:ATT_* 处理的是传感器融合的权重,SENS_BOARD_* 处理的是物理安装的旋转。两者分工不同,但最终都会影响姿态输出。
我的调试流程:
- 先确认 SENS_BOARD_ROT 设置正确(比如飞控箭头朝前就是 0 度)
- 用水平仪物理调平飞控安装座
- 上电看加速度计读数,微调 SENS_BOARD_X/Y/Z_OFFSET 直到三轴读数符合预期
- 最后才调 ATT_W_ACC 和 ATT_W_MAG
这个顺序反了的话,你可能会用错误的权重去补偿错误的安装角度——越调越乱。
3.4 磁力计校准与 ATT_MAG_DECL
磁力计校准是另一个容易翻车的地方。PX4 的校准流程会生成 CAL_MAG* 参数,这些参数记录了硬铁和软铁干扰的补偿值。但很多人忽略了 ATT_MAG_DECL。
磁偏角是什么?简单说,你手里的指南针指的“北”是磁北,而地图上的北是真北。两者之间的夹角就是磁偏角。这个角度随地理位置变化,在北京可能是 6 度,在乌鲁木齐可能是 2 度。
PX4 默认会通过 GPS 位置自动查表获取磁偏角。但如果你在室内飞(没 GPS),或者 GPS 信号不好,自动获取会失败。这时候飞控默认磁偏角为 0,偏航就会偏几度到十几度。
我建议:每次换飞行场地,尤其是跨城市飞行,都检查一下 ATT_MAG_DECL 的值。你可以用手机上的磁偏角计算 App 查一下当地值,然后手动填进去。
曾经有个用户找我排查:他的飞机在深圳飞得好好的,带到成都后航线总是偏右。查了两天,最后发现是磁偏角从 -2 度变成了 -1 度,自动获取因为 GPS 冷启动没更新。手动设了 -1 度后,问题解决。
3.5 知识体系总览
为了让你更直观地理解这些参数之间的关系,我画了一张图。它展示了从传感器原始数据到最终姿态输出的完整链路,以及 ATT_* 参数在其中的位置。
从这张图你可以看到:传感器数据先经过 CAL_* 校准(去除零偏和尺度误差),然后通过 SENS_BOARD_* 参数旋转到机体坐标系,最后进入 EKF 融合。ATT_* 参数就是在融合阶段控制各个传感器的信任权重。
任何一个环节出问题,最终姿态都会受影响。所以排查姿态问题时,我建议你从下往上查:先看原始传感器数据是否正常,再看坐标系对齐是否正确,最后才调融合权重。
3.6 实战:如何快速验证 ATT_* 参数是否合理
讲完理论,给一个我常用的验证方法。你不需要起飞,在地面就能做。
- 检查加速度计读数:在 QGroundControl 的 MAVLink Inspector 里看 VFR_HUD 消息。平放时 Z 轴约 -9.8,X/Y 轴接近 0。如果偏差超过 0.3 m/s²,检查 SENS_BOARD_* 参数。
- 检查磁力计一致性:原地缓慢旋转飞机 360 度,看偏航角是否平滑变化。如果出现跳变或卡顿,说明磁力计校准有问题或 ATT_W_MAG 过高。
- 检查陀螺仪零偏:上电后静止放置 1 分钟,看 EKF 日志里的 gyro_bias 估计值是否稳定。如果持续漂移,考虑提高 ATT_W_GYRO_BIAS。
- 检查磁偏角:对比飞控报告的航向和已知参考方向(比如用手机指南针)。偏差超过 5 度,手动设置 ATT_MAG_DECL。
一个小技巧:我习惯在试飞前做一次“桌面测试”。把飞机绑在桌子上(确保安全),解锁后轻轻推油门,看姿态估计是否跟实际倾斜方向一致。往右倾斜时 Roll 角应该为正。如果反了,检查 SENS_BOARD_ROT 是不是设成了 180 度。
3.7 总结
ATT_* 参数看似简单,但牵一发而动全身。记住几个关键点:
- ATT_W_ACC 控制加速度计信任度,震动大时降低,悬停漂时提高
- ATT_W_MAG 控制磁力计信任度,有干扰时降低,无干扰时可适当提高
- ATT_W_GYRO_BIAS 控制零偏学习速率,除非有温漂问题否则不动
- ATT_MAG_DECL 磁偏角,跨场地飞行时务必检查
- 传感器对齐(SENS_BOARD_*)是前提,权重调优(ATT_*)是后续
嗯,这一章就到这。参数是死的,但飞机是活的。多飞、多看日志、多对比,你慢慢就会找到最适合自己机型的参数组合。