1. 姿态控制里PID到底在调什么
很多人拿到飞控第一件事就是翻参数表,看到一长串PID就头大。我刚开始玩Pixhawk那会儿也一样,以为PID是三个独立的旋钮,调不好就来回拧,结果飞机要么软绵绵像喝醉了,要么抖得像得了帕金森。后来才明白,姿态控制里的PID不是三个孤立参数,而是一整套互相拉扯的反馈系统。
1.1 从摇杆到电机:一条完整的控制链路
你推一下遥控器的横滚摇杆,这个动作在飞控内部要经过这么一条链路:遥控接收机把PWM信号传给飞控,飞控把它翻译成期望的角速度,然后和IMU测到的实际角速度做差,这个差值就是误差。PID控制器拿到这个误差,经过比例、积分、微分三项运算,输出一个修正量,再分配给四个电机,让它们差速旋转,最终产生力矩把机身转过去。
这条链路里,P是主力,负责根据当前误差大小立刻给出修正力度;I是补刀,负责消除长期存在的稳态误差,比如飞机总是往一边偏;D是刹车,负责预判误差变化趋势,提前给反向修正,防止过冲和震荡。三者配合不好,轻则飞行手感差,重则直接翻车。
1.2 为什么姿态环和角速度环要分开调
APM和PX4都采用串级PID结构,外环是角度环,内环是角速度环。很多新手不知道这个结构,直接去调最外层的角度PID,结果怎么调都不对。正确的做法是先调内环角速度PID,再调外环角度PID。
原因很简单:内环是基础,它决定了飞机对力矩的响应速度。如果内环都没调好,外环给出的期望角速度根本没法被准确跟踪,就像你让一个反应迟钝的人去接快速飞来的球,他接不住,你再怎么调整你的指令频率也没用。内环调好了,外环只需要一个简单的P控制器就能有不错的效果。
1.3 不同机架对PID的敏感度差异
我飞过250mm的小穿越机,也飞过680mm的六轴挂微单,还试过900mm的植保机。同样的PID参数,在小机上可能稳如磐石,到大机上就直接震荡炸机。这里面的核心变量是转动惯量和电机响应速度。
小机架转动惯量小,电机稍微给点力就能快速改变姿态,所以P可以给大一点,D要小一点,否则容易高频抖动。大机架转动惯量大,电机需要更长时间才能把机身转起来,P要给小,D可以适当大一点来抑制过冲,I也要相应减小,否则积分累积太猛会导致低频摆动。这个规律不是绝对的,但方向不会错。
2. 调参前的硬件与固件准备
我见过太多人PID调了半天没效果,最后发现是机架螺丝松了或者桨叶平衡没做。调参之前,硬件和固件的基础工作必须做扎实,否则你调的不是PID,是在跟机械振动和传感器噪声作斗争。
2.1 机架与动力系统的机械检查清单
在通电之前,拿手把机臂挨个掰一掰,看有没有松动。电机座螺丝要打螺纹胶,我吃过亏,飞着飞着电机座松了,飞机直接空中解体。桨叶要做动平衡,特别是大桨,不平衡的桨叶会产生周期性振动,这个振动频率如果和PID的D项作用频段重叠,你会看到电机温度异常升高。
电调校准也要做,APM和PX4都有电调校准流程。校准不到位会导致四个电机响应不一致,你调PID的时候会感觉某个轴特别难调,其实就是动力不对称。电池要满电,低电压下电机响应会变软,PID表现和满电时完全不同。
2.2 固件版本选择与参数重置
APM固件现在主流是ArduCopter 4.x系列,PX4则是1.13或1.14。我建议不要追最新版,用社区反馈稳定的版本。比如PX4 1.14.3是我目前飞得最稳的版本,1.15刚出来的时候我刷过,姿态控制有改动,老参数直接套用会出问题。
刷完固件第一件事是恢复默认参数。很多人从别人那里拷了一份参数表就直接用,结果飞机行为诡异。不同固件版本的默认值不同,机架类型不同默认值也不同。正确的做法是:刷固件、选机架类型、恢复默认、再做传感器校准,然后才开始调PID。
2.3 传感器校准中容易被忽略的细节
加速度计校准要在水平面上做,这个大家都知道。但磁罗盘校准很多人做得不规范。校准时要远离钢筋、手机、磁铁,最好到室外空旷处做。我有个朋友在车库校准罗盘,起飞后飞机一直往一个方向偏,查了半天是罗盘被车库的钢结构干扰了。
另外,PX4的陀螺仪温度校准也值得做。特别是冬天室外飞行,IMU温度变化会导致零偏漂移,姿态会慢慢跑偏。做了温度校准后,这个漂移会小很多。APM这边虽然没有专门的温度校准流程,但可以在上电后等IMU温度稳定了再解锁起飞,一般等个两三分钟。
3. 角速度环PID的实战整定方法
角速度环是姿态控制的内核,它直接决定飞机对力矩指令的跟踪能力。这个环调好了,飞机就像被一根无形的杆子撑着,松杆就停,推杆就走,非常跟手。
3.1 从默认参数出发的第一次试飞
不要一上来就大改参数。先恢复默认,在无风或微风的天气试飞。起飞后切到Stabilize模式,轻轻推杆,感受飞机的响应。如果飞机反应迟钝,松杆后还在慢慢转,说明P太小。如果飞机快速抖动,特别是电机声音发尖,说明P太大或者D太小。
我第一次调一架450mm的四轴,默认参数下飞机软得像面条,推杆后要等半秒才有反应。我把角速度P从默认的0.135提到0.18,立刻跟手了很多。但提到0.22的时候开始出现高频抖动,最后定在0.19,兼顾响应和稳定。
3.2 P项:响应速度与震荡的平衡点
P项是角速度环的主力。它的作用是把当前角速度误差按比例放大后输出。P越大,飞机对误差的修正越猛,响应越快。但P太大会导致系统在目标值附近来回震荡,因为修正力度超过了实际需要的力度。
调P的时候,我习惯每次增加10%到15%,飞一个起落感受一下。当出现轻微高频抖动时,往回退两格。比如从0.18加到0.20出现抖动,那就退到0.19。这个值就是临界P,实际使用可以再降5%留点余量。
注意:P项调好后,如果飞机在悬停时缓慢漂移,那是I项的问题,不要继续加P。
3.3 I项:消除稳态误差的慢功夫
I项负责累积误差,只要误差存在,I项就会一直增大输出,直到误差消除。在角速度环里,I项主要用来克服电机死区和机械摩擦带来的稳态误差。
调I的时候要耐心,因为I的作用是慢慢体现的。我一般先把I设为默认值的一半,飞起来看悬停时飞机是否慢慢往一个方向转。如果有,每次增加0.01到0.02。I太大会导致低频摆动,飞机像钟摆一样左右晃。I太小则稳态误差消除不了,飞机总是往一边偏。
有个技巧:在APM里可以看日志的PIDR.I项,如果悬停时I项输出一直在增大,说明I不够;如果I项输出在正负之间大幅摆动,说明I太大。
3.4 D项:抑制过冲的阻尼器
D项对误差的变化率做出反应,误差变化越快,D项输出越大,方向与误差变化相反,起到阻尼作用。D项调好了,飞机在快速机动后能迅速稳定下来,不会来回过冲。
但D项对振动非常敏感。如果机架有振动,D项会把振动放大,导致电机发热甚至烧毁。所以调D之前一定要确保机械振动在可接受范围内。我一般用APM的RATE.R日志看振动水平,如果振动峰值超过30m/s²,先解决振动问题再调D。
调D的时候,从默认值开始,每次增加20%。当飞机在快速推杆后出现高频抖动,说明D太大了。D太小则飞机在机动后会有明显的过冲,比如快速横滚后飞机要晃两下才停。
3.5 角速度环调参的验收标准
怎么判断角速度环调好了?我自己的标准是:在Stabilize模式下,快速推杆到极限然后松杆,飞机应该迅速停止转动,没有明显的过冲和震荡。用手抓住飞机快速晃动,电机应该能迅速做出反向修正,手感是“紧”的,不是“软”的。
另外,悬停时电机声音应该平稳,没有周期性的忽高忽低。如果电机声音像在喘气,说明PID在低频震荡,需要检查I项和D项。
4. 角度环与位置环的联动调整
角速度环调好后,角度环就简单多了。角度环的输出是期望角速度,输入是期望角度和实际角度的差值。因为内环已经能准确跟踪角速度指令,外环只需要一个P控制器就能有很好的效果。
4.1 角度环P项的快速整定
角度环的P项决定了飞机从当前角度回到期望角度的速度。P越大,回中越快,但太大会导致过冲,飞机在回中时冲过头再回来。
我调角度环P的时候,先把角速度环的参数固定,然后从默认值开始,每次增加20%。在Stabilize模式下,把飞机倾斜30度然后松杆,看飞机回中的过程。理想情况是飞机快速回中,在水平位置附近轻微过冲一次然后停住。如果来回晃好几次,说明P太大;如果回中太慢,说明P太小。
4.2 定高与定点模式下的PID差异
定高模式用到了高度环PID,定点模式用到了位置环PID。这两个环的参数和姿态环是独立的,不要混在一起调。
高度环的P项决定飞机对高度误差的修正力度,I项消除悬停时的缓慢升降。我调高度环的时候,先在定高模式下悬停,看飞机是否稳定在一个高度。如果飞机像坐电梯一样上下缓慢浮动,说明高度环P太小或者I太大。如果飞机快速上下震荡,说明P太大。
位置环的调参更复杂,因为涉及到GPS和光流的速度估计。我一般先调速度环,再调位置环。速度环的P项决定飞机对速度误差的修正力度,位置环的P项决定飞机对位置误差的修正力度。这两个环调不好,飞机在定点模式下会画圈或者漂移。
4.3 前馈控制在姿态响应中的作用
前馈控制是进阶话题,但值得提一下。前馈的作用是在误差产生之前就给出修正量,提高系统的响应速度。在姿态控制里,前馈通常用在遥控杆量到期望角速度的映射上。
PX4支持前馈参数,APM这边也有类似的机制。我试过在PX4上给横滚和俯仰加前馈,飞机对杆量的响应明显更快,感觉像换了一架更灵敏的飞机。但前馈加太多会导致飞机对杆量过于敏感,稍微碰一下杆飞机就大幅动作,不适合新手。
前馈的调整方法:先不加前馈,调好PID。然后慢慢增加前馈值,每次增加5%,直到飞机对杆量的响应让你满意。如果飞机开始出现自激震荡,说明前馈太大了。
5. 试飞验证与常见问题排查
参数调好了,最终要在实际飞行中验证。我习惯用几个标准动作来测试:悬停、快速横滚、快速俯仰、急停。每个动作做三遍,看飞机的一致性。
5.1 悬停稳定性与电机温度的检查
悬停是最基本的测试。飞机应该在微风中保持位置和高度,没有明显的漂移和震荡。悬停一分钟后降落,用手摸电机。电机应该是温热的,不是烫手的。如果电机烫手,说明PID在震荡,电机在频繁正反转。
我遇到过一架飞机,悬停时看起来挺稳,但电机温度很高。查日志发现角速度环的D项在振荡,虽然幅度不大,但频率很高,电机一直在做高频修正。把D项降了20%后,电机温度正常了。
5.2 快速机动后的震荡问题定位
快速横滚后飞机来回晃,这是典型的D项不足或者P项过大。先检查D项,适当增加。如果增加D项后震荡频率变高,说明是P项太大了,需要降P。
还有一种情况是快速机动后飞机往一个方向偏,这是I项在机动过程中累积了误差。可以适当降低I项,或者开启I项限幅,防止积分饱和。
5.3 不同飞行模式下的参数适配
Stabilize、AltHold、Loiter、Auto等模式对PID的要求不同。Stabilize模式最考验姿态环,AltHold考验高度环,Loiter考验位置环,Auto考验航点跟踪。我一般先在Stabilize下调好姿态环,然后在AltHold下调高度环,最后在Loiter下调位置环。
不同模式之间切换时,如果飞机行为突变,说明某个环的参数不匹配。比如从Stabilize切到Loiter,飞机突然开始画圈,那是位置环的问题,不是姿态环的问题。
5.4 日志分析:用数据代替感觉
调参不能只靠感觉,要看日志。APM的日志可以用Mission Planner下载分析,PX4的日志可以用Flight Review上传分析。我重点看几个量:角速度跟踪曲线、PID各项输出、电机输出、振动水平。
角速度跟踪曲线里,期望值和实际值应该贴合得很好。如果实际值总是滞后于期望值,说明P不够或者D不够。如果实际值在期望值附近高频震荡,说明P太大或者D太大。PID各项输出里,如果某项一直在极限值附近,说明该项饱和了,需要调整。
振动水平用FFT分析,看主要振动频率在哪里。如果振动频率和电机转速一致,那是桨叶或电机的问题。如果振动频率是电机转速的整数倍,那是机架共振。解决振动问题后再调PID,事半功倍。
6. 我踩过的那些坑
调PID这些年,炸过的机比飞过的起落还多。说几个典型的坑,希望大家别重复我的错误。
第一个坑:在室内调PID。室内有地面效应和墙壁反射,飞机行为和在室外完全不同。我在客厅调好的参数,到室外飞直接翻车。后来学乖了,再小的飞机也去室外调。
第二个坑:用自动调参后不验证。APM和PX4都有自动调参功能,但自动调参的结果不一定适合你的飞行风格。我有次用自动调参后直接飞,飞机稳是稳,但响应太慢,做动作像慢动作回放。后来在自动调参的基础上手动改了P和D,才达到我想要的手感。
第三个坑:忽略电池电压对PID的影响。满电时调好的参数,电池降到3.5V时飞机开始抖。因为电压降低后电机响应变慢,同样的PID参数下修正力度不够。解决办法是开启电压补偿,或者用高压电池。
第四个坑:不同桨叶混用。我有次炸机后换了不同品牌的桨,参数没改,飞机抖得厉害。不同桨叶的重量和平衡特性不同,换桨后最好重新检查振动,必要时微调PID。
第五个坑:迷信别人的参数。网上有人分享“完美参数”,我直接拿来用,结果飞机差点飞丢。每个人的机架、电机、桨叶、重量都不同,参数只能参考,不能照搬。调参这件事,没有捷径,只能自己一步步试。
7. 给新手的三个实用建议
如果你刚开始接触飞控调参,我建议你按这个顺序来:先把机械和传感器基础打好,再调角速度环,最后调角度环和位置环。不要跳步,不要贪快。
第一个建议:每次只改一个参数。同时改多个参数,你根本不知道是哪个参数起了作用。我习惯用表格记录每次改动的参数和飞行表现,这样能快速定位问题。
第二个建议:在微风中调参。无风天气可遇不可求,但大风天气绝对不要调参。我一般选清晨或傍晚,风小的时候去飞。如果风速超过3m/s,只做验证飞行,不做参数调整。
第三个建议:保持耐心。调参是个慢活,一架飞机调好可能需要十几个起落。我见过有人一个下午就想调好,结果越调越乱。慢就是快,每次飞行只解决一个问题,积累下来就是一套好参数。
最后说一句,PID调参没有标准答案,只有适合你的答案。别人的参数可以参考,但最终要你自己飞得舒服。多飞、多记、多分析,你也能成为调参高手。