[教程]PID控制与调参详解 精华

908浏览
查看: 908|回复: 0

[教程] PID控制与调参详解

[复制链接]
本帖最后由 恐刀酷 于 2021-10-27 10:29 编辑

PID是一种自动控制的算法,他的存在是为了让穿越机准确稳定地响应飞手的控制信号,即使在螺旋桨轻度磨损,或是被风干扰时也能相对稳定地保持飞行姿态。

在Betaflight调参界面中,PID设置页面占了很大的篇幅,穿越机每一个方向上都能单独调节PID参数。理解PID能极大程度帮助飞手理解飞行原理并提升飞行体验。本文将为零数学基础的飞友深入浅出地说明PID基本原理。

什么是闭环控制?

在解释PID控制理论之前需要先了解闭环和开环控制,这两种控制的定义如下:

  • 闭环控制:根据反馈结果动态调整控制信号。

    案例:冰箱会根据温度实时调整功率,让冰箱内部保持恒温状态。

  • 开环控制:无反馈的结果,控制信号不会实时调整。

    案例:将电风扇开至三挡,电风扇的转速与环境温度无关。

可以看出,当控制结果存在不确定性时,只有通过闭环控制才能取得一个相对准确且稳定的结果。

对于飞手来说,穿越机的控高飞行就是一个典型的闭环控制过程。刚拿到遥控器时,飞手并不知道油门需要推到什么角度才维持飞行高度,所以杆量需要时刻根据飞手观测到的高度来调整。

当然,在能保证结果稳定性的前提下,开环控制是一个成本更低且效率更高的控制方法。韩国著名飞手MCK在X-Fly 2019南京站的比赛中一度丢失画面信号,但是依然依靠记忆盲飞取得碾压性的第一。

闭环控制中涉及三个重要部分,分别是输入值,控制算法和输出值。以飞机控高操作为例,三个值分别为:

  • 输入值:摇杆的杆位
  • 控制算法:在飞手大脑中完成,飞行熟练度越高算法越完善。
  • 输出值:穿越机的高度

对于穿越机来说,电子系统的反馈信号频率远超人脑的反应速度。所以我们需要将控制算法写在芯片中,让飞控取代大脑进行自动闭环控制。而PID控制就是自动闭环控制理论中的重要的算法之一。

什么是PID?

635e57250298cd6620bcc8c781d9b1de.jpg

PID三个字母分别源于比例(Partial),积分(Integral),微分(Differential) 。目前不管是学术界还是圈内关于PID的解释大多比较抽象,但原理其实并不复杂,这里可以举一个简单的例子来帮助理解什么是PID。

假如我们要设计一个算法,根据飞机的来高度调整升力,让穿越机稳定在1米的高度,可以按步骤作以下尝试:

根据距离的差值调整升力

最直观的控制思路就是观察飞机与目标高度的差值,高于目标则减少升力,低于目标则增大升力。差值越大升力差越大。气压计能获取穿越机的高度,作为控制的输入值发送给飞控。距离和升力之间成比例关系(Partial)。以比例为-1/10为例:

输入值:与目标高度的差值(cm) 输出值:飞机的升力(N)
+20 ↓ 2
+10 ↓ 1
0 保持平衡
-10 ↑ 1
-20 ↑ 2

这个算法确实能让飞机在一定高度附近停留,但是与目标距离越远回复的力就越大,就好像是将穿越机拴在了弹簧上,不停上下抖动无法稳定。

相信不少飞友在刚入坑的时候就会有一样的问题,解决方法也很简单,控高的时候不能只看高度,还要看飞机的速度。

根据速度的大小调整升力

在穿越机持续上升并将要达平衡位置时,即升力不再增加也会因为惯性而超出高度。所以我们需要根据速度适当地减少升力,速度越快,则升力越小。如此重复几次以后穿越机就会稳定在固定高度上。速度可以通过单位时间的距离变化量求得,即对时间进行微分(Differential)计算。

根据累计的差值调整升力

如果穿越机在飞行携带了航拍设备,导致重量增加,前两步中所计算出来的升力没有办法继续将飞机维持在固定高度。而飞行时间越长,这个高度的差值就会越大。这时我们就需要统计这个差值来额外增加升力。差值的计算通过积分(Integral)算法获得,简而言之就是高度差值越大,且持续的时间越长,需要额外补偿的升力就越多。

为什么要调PID?

由于惯性等其他变量的存在,使飞机没法快速准确地停留在目标高度,这就是我们需要调PID的原因。

PID在穿越机调参中的主要作用有两个:

  1. 排除飞机故障(如飞机抖动等)

  2. 提升飞机的性能,让飞机响应更灵敏

第一种情况现在已经基本不会出现,一般默认PID就可以飞的比较稳了。

所以如果你是刚入门不懂PID原理的新手,不建议自行调整PID。

7461e683003b68ac0e0c42670c5d6552.jpg

如果你已经掌握了基本的飞行技巧和原理,想进一步优化你的飞行手感,就可以开始调整PID了。

这个过程可能很痛苦,需要你花大量的时间,不断地进行微调,然后实践,再微调,实践……直到找到你最喜欢的飞行手感为止。

689e2be4fd7857aa2d9aab41e40890c4.jpg

PID的原理

在动态控制中,我们通过调整PID三个参数来获得动力,同时消除振荡,找到对你当前的飞行场景来说更优的手感。

P(Partial)是比例的简称。

“P”单元控制着控制系统的所有动力,以达到所需的输出。如果“P”单元没有足够的输出,无人机就没有足够的动力来反馈你的控制命令;如果“P”单元输出过大,无人机就会反应过度,发生振荡。

它的特点和弹簧完全一致。

640.gif

简单来说,它的作用就是测量无人机当前位置与目标位置的距离。这个距离越远,就需要更大的力给掰回去。

P越大,“弹簧”越硬,回复的速度越快,震动的频率也越高。

640-1.gif

如果闭环控制中只有P,结果就是飞机会持续无休止地振荡,这个时候就要引入D来消除振荡。

640-2.gif

D(Differential)是微分的简称。

D就是通过微分的方法来计算运动速度。用人话来说,就是D越大在物体运动时的阻力就越大。这个阻力和物体的运动方向相反。

你可以把它想象成把振动的物体丢到液体里的过程。

D越大,液体密度越大,“物体”在运动时的阻力就越大,就能更快静止下来。

640-3.gif

稍微加一点D,P带来的振幅会变小,无人机会更快地停在目标位置。

但如果D值过大,这个阻力会抵消回复力,让控制变得非常迟钝,整个运动过程就会显得有些油腻。

640-4.gif

I(Integral)是积分的简称。

“I”单元对外界干扰或存在的系统误差进行纠正,以确保最后的输出符合预期。

飞机会不停地检测位置是否存在偏差,如果存在的偏差越大、持续时间越长,就会产生一个越大的力来矫正。

一般情况下,我们可以把I值设的高一点,但需要注意的是,I值过大也会产生振荡。

640-5.gif
PID在实际控制的过程中还需要考虑到飞机的重量、环境的因素等其他因素的影响,会产生很多其他复杂的问题,这也是不推荐新手自己去调整参数的原因之一。

总的来说,P、I、D三个值是互相影响的关系,要调整到最佳比例,需要反复不断地实践。

Betaflight中PID控制什么?

上文案例中的PID控高算法已普遍用在消费级的无人机中。但是对于不支持自动控高的穿越机来说,PID控制的对象不是高度,而是姿态角或旋转速度。

  • 自稳模式:三组PID参数分别用于控制穿越机三个方向的倾斜角度,倾角大小由加速度计读取。
  • 手动模式:三组PID参数分别用于控制穿越机三个方向的旋转速度,转速大小由陀螺仪计读取。

PID参数如何影响穿越机飞行?

  • P:用于调整穿越机对指令的响应速度,P越大则能越迅速的让穿越机达到指令对应的姿态。但是P较大会产生持续抖动,P值过大时甚至会放大抖动。
  • I:用于计算累计误差,在不调整杆量的情况下让穿越机保持稳定的飞行姿态。
  • D:用于减少P值产生的抖动,会一定程度降低穿越机响应速度,但是能增加姿态的稳定性。

P和D对于穿越机飞行的影响比较大。而PID调参就是权衡响应速度和飞行稳定性的过程。

PID参数应该如何调整?

Betaflight中的默认数值已经能够满足绝大多数飞行场景,对于已经能够熟练飞行穿越机的玩家来说,可以尝试调整P值感受响应的快慢,在调整到比较舒适的状态后再调整D值来增强飞行稳定度。

评分

参与人数 1贡献 +5 收起 理由
单品蓝山 + 5

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail