恐刀酷 发表于 2021-10-24 14:00:00

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值来增强飞行稳定度。

晨硕 发表于 2022-2-12 16:53:17

{:5_116:}{:5_179:}
页: [1]
查看完整版本: PID控制与调参详解