【UAV】串级 PID 控制原理及应用
【UAV】串级 PID 控制原理及应用
文章目录
- 简介
- 实现过程
- 单级 PID
- 串级 PID
- 三个问题
- Ref:
简介
什么是串级PID?顾名思义就是两个串起来的PID,下面是一个双闭环的例子,外环是位置(角度)环,内环是速度(角速度)环,最终的执行器是电机,电机输出产生了速度(角速度)和位置(角度),具体框图如下图所示。
例如执行器是四轴飞行器时,整体控制过程如下:
- 我们在外环给定相应的位置高度,外环 PID 的输出就是内环 PID 的期望值;
- 内环 PID 的输出将产生相应的油门大小,最终飞行器会产生上升的速度;
- 内环反馈值为速度,控制相应的速度达到外环所需的速度期望值;
- 最终外环达到期望的位置。
PID 的算法控制其实是一种无系统模型的控制,可以根据参数经验去调试系统。但是实际的物理对象的模型其实早就确定好了,PID的输入量和输出量的物理意义也会因为实际的被控对象而改变。换句话说,PID的输入基本上和系统的反馈量相关,而实际的反馈量是什么,从一开始就因为系统而确定下来了。
实现过程
单级 PID
单级 PID 伪代码:
当前角度误差=期望角度−当前角度单环PIDP项=Kp∗当前角度误差\begin{aligned} 当前角度误差 =& 期望角度 - 当前角度 \\ 单环 \red{PID_P} 项 =& Kp * 当前角度误差 \\ \end{aligned}当前角度误差=单环PIDP项=期望角度−当前角度Kp∗当前角度误差
当前角度误差积分及其积分限幅
单环PIDI项=Ki∗当前角度误差积分\begin{aligned} 单环 \green{PID_I} 项 =& Ki * 当前角度误差积分 \\ \end{aligned}单环PIDI项=Ki∗当前角度误差积分
当前角度的微分(原理上为当前角度误差 - 上次角度误差,实际上角度的微分就是角速度,恰好由陀螺仪给出)
单环PIDD项=Kd∗当前角度的微分(直接用陀螺仪输出)单环PID输出=单环PIDP项+单环PIDI项+单环PIDD项\begin{aligned} 单环 \blue{PID_D} 项 =& Kd * 当前角度的微分(直接用陀螺仪输出) \\ 单环 \purple{PID_{输出}} =& 单环 \red{PID_P} 项 + 单环 \green{PID_I} 项 + 单环 \blue{PID_D} 项 \\ \end{aligned}单环PIDD项=单环PID输出=Kd∗当前角度的微分(直接用陀螺仪输出)单环PIDP项+单环PIDI项+单环PIDD项
串级 PID
给出串级 PID 伪代码:
当前角度误差=期望角度−当前角度外环PIDp项=外环Kp∗当前角度误差\begin{aligned} 当前角度误差 =& 期望角度 - 当前角度 \\ 外环 \red{PID_p} 项 =& 外环 Kp * 当前角度误差 \\ \end{aligned}当前角度误差=外环PIDp项=期望角度−当前角度外环Kp∗当前角度误差
当前角度误差积分及其积分限幅
外环PIDI项=外环Ki∗当前角度误差积分外环PID输出=外环PIDP项+外环PIDI项−−−这里来个分割线−−−当前角速度误差=外环PID输出−当前角度(直接用陀螺仪输出)内环PIDP项=内环Kp∗当前角速度误差\begin{aligned} 外环 \green{PID_I} 项 =& 外环 Ki * 当前角度误差积分 \\ 外环 \purple{PID_{输出}} =& 外环 \red{PID_P} 项 + 外环 \green{PID_I} 项 \\ ---&这里来个分割线---\\ 当前角速度误差 =& 外环 \purple{PID_{输出}} - 当前角度(直接用陀螺仪输出) \\ 内环 \red{PID_P} 项 =& 内环 Kp * 当前角速度误差 \\ \end{aligned}外环PIDI项=外环PID输出=−−−当前角速度误差=内环PIDP项=外环Ki∗当前角度误差积分外环PIDP项+外环PIDI项这里来个分割线−−−外环PID输出−当前角度(直接用陀螺仪输出)内环Kp∗当前角速度误差
当前角速度误差积分及其积分限幅
内环PIDI项=内环Ki∗当前角速度误差积分\begin{aligned} 内环 \green{PID_I} 项 =& 内环 Ki * 当前角速度误差积分 \\ \end{aligned}内环PIDI项=内环Ki∗当前角速度误差积分
当前角速度的微分(本次角速度误差 - 上次角速度误差)
内环PIDD项=内环Kd∗当前角速度的微分内环PID输出=内环PIDP项+内环PIDI项+内环PIDD项\begin{aligned} 内环 \blue{PID_D} 项 =& 内环 Kd * 当前角速度的微分 \\ 内环 \purple{PID_{输出}} =& 内环 \red{PID_P} 项 + 内环 \green{PID_I} 项 + 内环 \blue{PID_D} 项 \\ \end{aligned}内环PIDD项=内环PID输出=内环Kd∗当前角速度的微分内环PIDP项+内环PIDI项+内环PIDD项
三个问题
如何做到垂直起飞、四轴飞行时为何会飘、如何做到脱控?
眼看这三个问题是三个不同的问题,其实就原理上讲,他们的原因在绝大多数情况下都是由于加速度计引起的。如果飞机可以垂直起飞,说明你的加速度计放置地很水平,同时也说明你的PID控制算法参数找的不错,既然可以垂直起飞,那么飞行过程中,只要无风,四轴几乎就不会飘,自然而然就可以脱控飞行。由此可见,加速度计是个十分重要的器件。
在姿态解算中,或者说在惯性导航中,依靠的一个重要器件就是惯性器件,包括了加速度计和陀螺仪。
陀螺仪的特性就是高频特性好,可以测量高速的旋转运动;而加速度计的低频特性好,可以测量低速的静态加速度。无论是何种算法(互补滤波、梯度下降、甚至是Kalman滤波器),都离不开对当地重力加速度 ggg 的测量和分析。
惯性导航利用的就是静态性能好的加速度计去补偿动态性能好的陀螺仪漂移特性,得到不飘并且高速的姿态跟踪算法,因此基于惯性器件的姿态解算,加速度计是老大,它说了算。
首先,为了让四轴平稳的悬停或飞行在半空中,四个电机必须提供准确的力矩。假设力矩与电机PWM输出呈线性关系,也就是必须提供准确的4路PWM。4路PWM由遥控器输入(期望角度)、PID算法及其参数和姿态解算输出(当前角度)组成。
假设遥控器输入不变(类似脱控)、PID算法及其参数也较为准确(PID参数无需十分精确,但只要在某个合理的范围内,控制品质差不了多少),也就是姿态解算的输出必须是十分准确的,可以真实反应飞行器的实际角度,而姿态解算的结果由加速度计和陀螺仪给出,根据前述惯性导航的描述,加速度计补偿陀螺仪,因此要得到精确的姿态解算结果,务必要求加速度输出精确的重力加速度 ggg。这里仅讨论悬停飞行,因此忽略掉额外的线性加速度(事实证明,在四轴强机动飞行过程中,线性加速度必须要考虑并消除),假设加速度计输出重力加速度 ggg,这个重力加速度 ggg 必须十分“精确”。
总结来说就是
精准力矩→精准PWM→精准姿态→加速度计输出“精确”重力加速度g精准力矩 \rightarrow 精准PWM \rightarrow 精准姿态 \rightarrow 加速度计输出“精确”重力加速度 g精准力矩→精准PWM→精准姿态→加速度计输出“精确”重力加速度g
Ref:
- 到底什么是串级PID?
- 四轴飞行器上两种常用的PID算法(单环PID和串级PID)