PID控制与调参详解
本帖最后由 恐刀酷 于 2021-10-27 10:29 编辑PID是一种自动控制的算法,他的存在是为了让穿越机准确稳定地响应飞手的控制信号,即使在螺旋桨轻度磨损,或是被风干扰时也能相对稳定地保持飞行姿态。
https://www.bilibili.com/video/BV1zM4y157pk?zw
在Betaflight调参界面中,PID设置页面占了很大的篇幅,穿越机每一个方向上都能单独调节PID参数。理解PID能极大程度帮助飞手理解飞行原理并提升飞行体验。本文将为零数学基础的飞友深入浅出地说明PID基本原理。
## 什么是闭环控制?
在解释PID控制理论之前需要先了解闭环和开环控制,这两种控制的定义如下:
- 闭环控制:根据反馈结果动态调整控制信号。
> 案例:冰箱会根据温度实时调整功率,让冰箱内部保持恒温状态。
- 开环控制:无反馈的结果,控制信号不会实时调整。
> 案例:将电风扇开至三挡,电风扇的转速与环境温度无关。
可以看出,当控制结果存在不确定性时,只有通过闭环控制才能取得一个相对准确且稳定的结果。
对于飞手来说,穿越机的控高飞行就是一个典型的闭环控制过程。刚拿到遥控器时,飞手并不知道油门需要推到什么角度才维持飞行高度,所以杆量需要时刻根据飞手观测到的高度来调整。
当然,在能保证结果稳定性的前提下,开环控制是一个成本更低且效率更高的控制方法。韩国著名飞手MCK在X-Fly 2019南京站的比赛中一度丢失画面信号,但是依然依靠记忆盲飞取得碾压性的第一。
闭环控制中涉及三个重要部分,分别是输入值,控制算法和输出值。以飞机控高操作为例,三个值分别为:
- 输入值:摇杆的杆位
- 控制算法:在飞手大脑中完成,飞行熟练度越高算法越完善。
- 输出值:穿越机的高度
对于穿越机来说,电子系统的反馈信号频率远超人脑的反应速度。所以我们需要将控制算法写在芯片中,让飞控取代大脑进行**自动闭环控制**。而PID控制就是自动闭环控制理论中的重要的算法之一。
## 什么是PID?
PID三个字母分别源于比例(**P**artial),积分(**I**ntegral),微分(**D**ifferential) 。目前不管是学术界还是圈内关于PID的解释大多比较抽象,但原理其实并不复杂,这里可以举一个简单的例子来帮助理解什么是PID。
假如我们要设计一个算法,根据飞机的来高度调整升力,让穿越机稳定在1米的高度,可以按步骤作以下尝试:
### 根据距离的差值调整升力
最直观的控制思路就是观察飞机与目标高度的差值,高于目标则减少升力,低于目标则增大升力。差值越大升力差越大。气压计能获取穿越机的高度,作为控制的输入值发送给飞控。距离和升力之间成比例关系(**P**artial)。以比例为-1/10为例:
| 输入值:与目标高度的差值(cm) | 输出值:飞机的升力(N) |
| ------------------------------ | ----------------------- |
| +20 | ↓ 2 |
| +10 | ↓ 1 |
| 0 | 保持平衡 |
| -10 | ↑ 1 |
| -20 | ↑ 2 |
这个算法确实能让飞机在一定高度附近停留,但是与目标距离越远回复的力就越大,就好像是将穿越机拴在了弹簧上,不停上下抖动无法稳定。
相信不少飞友在刚入坑的时候就会有一样的问题,解决方法也很简单,控高的时候不能只看高度,还要看飞机的速度。
### 根据速度的大小调整升力
在穿越机持续上升并将要达平衡位置时,即升力不再增加也会因为惯性而超出高度。所以我们需要根据速度适当地减少升力,速度越快,则升力越小。如此重复几次以后穿越机就会稳定在固定高度上。速度可以通过单位时间的距离变化量求得,即对时间进行微分(**D**ifferential)计算。
### 根据累计的差值调整升力
如果穿越机在飞行携带了航拍设备,导致重量增加,前两步中所计算出来的升力没有办法继续将飞机维持在固定高度。而飞行时间越长,这个高度的差值就会越大。这时我们就需要统计这个差值来额外增加升力。差值的计算通过积分(**I**ntegral)算法获得,简而言之就是高度差值越大,且持续的时间越长,需要额外补偿的升力就越多。
## 为什么要调PID?
由于惯性等其他变量的存在,使飞机没法快速准确地停留在目标高度,这就是我们需要调PID的原因。
**PID在穿越机调参中的主要作用有两个:**
1. 排除飞机故障(如飞机抖动等)
2. 提升飞机的性能,让飞机响应更灵敏
第一种情况现在已经基本不会出现,一般默认PID就可以飞的比较稳了。
**所以如果你是刚入门不懂PID原理的新手,不建议自行调整PID。**
如果你已经掌握了基本的飞行技巧和原理,想进一步优化你的飞行手感,就可以开始调整PID了。
这个过程可能很痛苦,需要你花大量的时间,不断地进行微调,然后实践,再微调,实践……直到找到你最喜欢的飞行手感为止。
## **PID的原理**
在动态控制中,我们通过调整PID三个参数来获得动力,同时消除振荡,找到对你当前的飞行场景来说更优的手感。
**P(Partial)是比例的简称。**
“P”单元控制着控制系统的所有**动力**,以达到所需的输出。如果“P”单元没有足够的输出,无人机就没有足够的动力来反馈你的控制命令;如果“P”单元输出过大,无人机就会反应过度,发生振荡。
它的特点和弹簧完全一致。
简单来说,它的作用就是测量无人机当前位置与目标位置的距离。这个距离越远,就需要更大的力给掰回去。
P越大,“弹簧”越硬,回复的速度越快,震动的频率也越高。
如果闭环控制中只有P,结果就是飞机会持续无休止地振荡,这个时候就要引入D来消除振荡。
**D(Differential)是微分的简称。**
D就是通过微分的方法来计算运动速度。用人话来说,就是D越大在物体运动时的阻力就越大。这个阻力和物体的运动方向相反。
你可以把它想象成把振动的物体丢到液体里的过程。
D越大,液体密度越大,“物体”在运动时的阻力就越大,就能更快静止下来。
稍微加一点D,P带来的振幅会变小,无人机会更快地停在目标位置。
但如果D值过大,这个阻力会抵消回复力,让控制变得非常迟钝,整个运动过程就会显得有些油腻。
**I(Integral)是积分的简称。**
“I”单元对外界干扰或存在的系统**误差进行纠正**,以确保最后的输出符合预期。
飞机会不停地检测位置是否存在偏差,如果存在的偏差越大、持续时间越长,就会产生一个越大的力来矫正。
一般情况下,我们可以把I值设的高一点,但需要注意的是,I值过大也会产生振荡。
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值来增强飞行稳定度。 {:5_116:}{:5_179:}
页:
[1]