第四节:经典PID控制——飞控的“压舱石”
说实话,我入行那会儿,飞控圈子里还没那么多花里胡哨的算法。什么LQR、H无穷、自适应控制,听着高大上,但真正让无人机稳稳飞起来的,还是PID。你想想看,一架四轴在天上乱晃,你要它横滚30度,它就得老老实实滚30度——这背后就是PID在干活。
这一节,咱们就聊聊PID控制器的原理,以及它在横滚通道里是怎么用的。我还会分享一些我自己调参踩过的坑,尤其是Ziegler-Nichols那套经典方法。
4.1 PID控制器原理——三兄弟各司其职
PID控制器,说白了就是三个环节的线性组合:比例、积分、微分。它们各自干一件事,合起来就能把偏差压到零。
- 比例(P):当前偏差有多大,我就输出多大的控制量。反应快,但会有静差。
- 积分(I):把过去的偏差累加起来,消除静差。但积分过头了,就会超调、震荡。
- 微分(D):预测偏差的变化趋势,提前刹车。能抑制超调,但对噪声敏感。
公式很简单:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
嗯,这里要注意:实际飞控里,我们用的是离散形式,也就是每隔几毫秒算一次。比如我常用的Pixhawk,控制频率是250Hz到400Hz,积分项就得用累加来近似。
核心观点:PID不是万能药,但它是飞控的“压舱石”。没有它,再高级的算法也飞不稳。
4.2 横滚角与角速率双环控制——内快外准
单环PID够用吗?不够。为什么?因为无人机是个二阶系统,角速率变化快,角度变化慢。你直接控角度,响应太迟钝,飞起来像喝醉了酒。
所以,我们得用双环结构:
- 外环(角度环):控制横滚角,输出期望角速率。频率低一些,比如50Hz。
- 内环(角速率环):控制角速率,输出电机油门差值。频率高一些,比如250Hz。
内环跑得快,负责“稳住姿态”;外环跑得慢,负责“跟踪目标”。两者配合,才能又稳又准。
我画了一张图,帮你理解这个结构:
你看,外环输出的是“期望角速率”,内环再去追这个速率。这样设计的好处是:内环能快速抑制扰动(比如一阵风),外环则慢慢修正角度偏差。
个人经验:我调过一架大四轴,外环频率设到100Hz,内环400Hz。结果内环响应太快,外环跟不上,飞起来一抖一抖的。后来把外环降到50Hz,内环250Hz,立马稳了。记住:内环频率至少是外环的3-5倍。
4.3 PID参数整定方法——Ziegler-Nichols
参数怎么调?很多人上来就瞎试,Kp给个10,Ki给个0.1,结果飞机直接翻跟头。我建议你试试Ziegler-Nichols方法,这是1942年提出的经典方法,虽然老,但管用。
Ziegler-Nichols分两步:
- 找临界增益Ku:只保留比例项(Ki=0, Kd=0),慢慢增大Kp,直到系统开始等幅震荡。记录此时的Kp为Ku,震荡周期为Tu。
- 查表计算:根据Ku和Tu,按下面表格算出PID参数。
| 控制器类型 | Kp | Ki | Kd |
|---|---|---|---|
| P | 0.5 * Ku | — | — |
| PI | 0.45 * Ku | 1.2 * Kp / Tu | — |
| PID | 0.6 * Ku | 2 * Kp / Tu | Kp * Tu / 8 |
举个例子:我调一架250轴距的小四轴,内环角速率环的Ku是0.8,Tu是0.1秒。按PID表算:
Kp = 0.6 * 0.8 = 0.48
Ki = 2 * 0.48 / 0.1 = 9.6
Kd = 0.48 * 0.1 / 8 = 0.006
实际试飞时,我把Kp设为0.5,Ki设为8,Kd设为0.005,效果已经很好了。为什么微调?因为Ziegler-Nichols算出来偏激进,容易超调。
避坑指南:我曾经在调一架大六轴时,直接用Ziegler-Nichols算出来的参数上机,结果一解锁就剧烈震荡,差点炸机。后来发现,大飞机的惯性大,临界增益Ku比小飞机低很多。所以,这个方法只适合作为初始值,最终参数还得靠手动微调。
4.4 实际调参步骤——我的习惯
我个人习惯按这个顺序来:
- 先调内环角速率环:把飞机绑在测试台上,只给角速率指令。调P让响应快但不超调,调D抑制震荡,最后加I消除静差。
- 再调外环角度环:内环稳定后,解锁飞机,手动遥控横滚。调P让角度跟踪快,调D防止过冲。外环一般不加I,因为内环已经消除了静差。
- 联合调试:让飞机做大幅横滚动作,观察有没有耦合震荡。如果有,适当降低外环P或者内环D。
你想想看,这个过程就像盖房子——先打地基(内环),再砌墙(外环)。地基不稳,墙再漂亮也没用。
总结一下:PID是飞控的基石,双环结构让控制更精细,Ziegler-Nichols能帮你快速找到初始参数。但别忘了,最终调参还得靠手感、经验和一点点运气。