【深入理解四旋翼PID控制:从物理原理到稳定分析】
1. 牛顿-欧拉方程 —— 动力学模型的基石
这是描述刚体运动最根本的物理定律。它把运动分成了两部分:
牛顿第二定律(平动)
F=m⋅a F = m \cdot a F=m⋅a
- F:作用在四旋翼质心上所有外力的合力矢量(重力 + 四个旋翼的总升力)。
- m:四旋翼的质量。
- a:质心运动的加速度矢量。
它回答了“飞机会怎么移动”。
欧拉方程(转动)
M=I⋅α+ω×(I⋅ω) M = I \cdot \alpha + \omega \times (I \cdot \omega) M=I⋅α+ω×(I⋅ω)
- M:作用在四旋翼上的所有外力矩的合力矩矢量(由四个旋翼升力差异产生)。
- I:四旋翼的惯性张量(一个 3x3 矩阵,可以简单理解为描述物体绕各个轴转动难易程度的“转动质量”)。
为什么是 3x3 矩阵?(详细解释)
在三维空间中,物体不仅可以绕 X、Y、Z 轴(主轴)旋转,还可能因为质量分布不均匀,在绕 X 轴旋转时产生试图让物体绕 Y 轴或 Z 轴偏转的力矩(惯性积)。
惯性张量 III 的完整形式如下:
I=[Ixx−Ixy−Ixz−IyxIyy−Iyz−Izx−IzyIzz] I = \begin{bmatrix} I_{xx} & -I_{xy} & -I_{xz} \\ -I_{yx} & I_{yy} & -I_{yz} \\ -I_{zx} & -I_{zy} & I_{zz} \end{bmatrix} I= Ixx−Iyx−Izx−IxyIyy−Izy−Ixz−IyzIzz - 对角线元素 (Ixx,Iyy,IzzI_{xx}, I_{yy}, I_{zz}Ixx,Iyy,Izz):转动惯量。表示绕 X、Y、Z 轴旋转的难易程度。例如,IxxI_{xx}Ixx 越大,绕 X 轴加速旋转越费力。
- 非对角线元素 (Ixy,Ixz,…I_{xy}, I_{xz}, \dotsIxy,Ixz,…):惯性积。表示质量分布的不对称性。
举个例子:
假设一个理想的四旋翼,它的质量完全对称地分布在 X 和 Y 轴上(像一个完美的“十”字),且重心在几何中心。那么所有的惯性积(非对角项)都为 0,惯性张量简化为对角矩阵:
Iideal=[Ixx000Iyy000Izz] I_{ideal} = \begin{bmatrix} I_{xx} & 0 & 0 \\ 0 & I_{yy} & 0 \\ 0 & 0 & I_{zz} \end{bmatrix} Iideal= Ixx000Iyy000Izz
这时候,绕 X 轴的力矩只会产生绕 X 轴的角加速度,不会“串台”影响到 Y 轴或 Z 轴,控制起来最简单。但实际无人机可能挂载了不对称的相机或电池,导致非对角项不为 0,产生耦合效应。 - α:角加速度矢量。
- ω:角速度矢量。
- ω × (I * ω):哥氏项/离心项。这是旋转坐标系特有的项,就像旋转的陀螺会进动一样。
详解:XY 平面旋转(偏航 ωz\omega_zωz)的影响
很多初学者会问:哥氏项中 XY 平面的旋转(即绕 Z 轴旋转)会影响绕 X 和 Y 的力矩吗?答案是肯定的。
如果我们将 ω×(I⋅ω)\omega \times (I \cdot \omega)ω×(I⋅ω) 展开(假设 III 为对角矩阵),会得到:
Mcor=[ωyωz(Izz−Iyy)ωxωz(Ixx−Izz)ωxωy(Iyy−Ixx)] M_{cor} = \begin{bmatrix} \omega_y \omega_z (I_{zz} - I_{yy}) \\ \omega_x \omega_z (I_{xx} - I_{zz}) \\ \omega_x \omega_y (I_{yy} - I_{xx}) \end{bmatrix} Mcor= ωyωz(Izz−Iyy)ωxωz(Ixx−Izz)ωxωy(Iyy−Ixx) - X 轴力矩:包含 ωz\omega_zωz。当飞机同时进行俯仰(ωy\omega_yωy)和偏航(ωz\omega_zωz)时,会产生绕 X 轴的哥氏力矩。
- Y 轴力矩:包含 ωz\omega_zωz。当飞机同时进行滚转(ωx\omega_xωx)和偏航(ωz\omega_zωz)时,会产生绕 Y 轴的哥氏力矩。
所以,XY 平面内的旋转(ωz\omega_zωz)不仅影响 Z 轴力矩,还会通过耦合作用显著影响 X 和 Y 轴的力矩,这是高机动飞行控制中必须考虑的因素。
它回答了“飞机会怎么转动”。
小结:牛顿-欧拉方程直接写出了力/力矩与运动(加速度)的关系,构成了原始的非线性动力学模型。
常用四旋翼动力学方程组
在忽略空气阻力、假设机体对称且重心位于几何中心(惯性张量 III 为对角阵)的理想情况下,四旋翼的非线性动力学模型通常写作以下形式(ENU 坐标系):
1. 位置动力学(牛顿方程)
描述四旋翼在惯性系下的平动:
{x¨=U1m(cosϕsinθcosψ+sinϕsinψ)y¨=U1m(cosϕsinθsinψ−sinϕcosψ)z¨=U1m(cosϕcosθ)−g \left\{ \begin{aligned} \ddot{x} &= \frac{U_1}{m} (\cos\phi \sin\theta \cos\psi + \sin\phi \sin\psi) \\ \ddot{y} &= \frac{U_1}{m} (\cos\phi \sin\theta \sin\psi - \sin\phi \cos\psi) \\ \ddot{z} &= \frac{U_1}{m} (\cos\phi \cos\theta) - g \end{aligned} \right. ⎩
⎨
⎧x¨y¨z¨=mU1(cosϕsinθcosψ+sinϕsinψ)=mU1(cosϕsinθsinψ−sinϕcosψ)=mU1(cosϕcosθ)−g
- x,y,zx, y, zx,y,z:惯性系下的位置。
- ϕ,θ,ψ\phi, \theta, \psiϕ,θ,ψ:欧拉角(滚转、俯仰、偏航)。
- U1U_1U1:总升力(垂直于机体平面向上)。
2. 姿态动力学(欧拉方程)
描述四旋翼在机体系下的转动:
{p˙=1Ixx[U2+(Iyy−Izz)qr]q˙=1Iyy[U3+(Izz−Ixx)pr]r˙=1Izz[U4+(Ixx−Iyy)pq] \left\{ \begin{aligned} \dot{p} &= \frac{1}{I_{xx}} [U_2 + (I_{yy} - I_{zz}) q r] \\ \dot{q} &= \frac{1}{I_{yy}} [U_3 + (I_{zz} - I_{xx}) p r] \\ \dot{r} &= \frac{1}{I_{zz}} [U_4 + (I_{xx} - I_{yy}) p q] \end{aligned} \right. ⎩
⎨
⎧p˙q˙r˙=Ixx1[U2+(Iyy−Izz)qr]=Iyy1[U3+(Izz−Ixx)pr]=Izz1[U4+(Ixx−Iyy)pq]
- p,q,rp, q, rp,q,r:机体坐标系下的角速度。
- U2,U3,U4U_2, U_3, U_4U2,U3,U4:分别为绕机体 X、Y、Z 轴的控制力矩。
2. 线性化模型基础 —— 从非线性到线性的桥梁
四旋翼的原始动力学模型是非线性的(包含 sin,cos\sin, \cossin,cos 和角速度耦合项),难以直接用于设计线性控制器(如 PID)。因此,我们需要将其线性化。
2.1 小扰动理论与线性化 —— “化曲为直”的数学魔法
这是处理非线性系统的核心思想,也是将复杂动力学模型转化为简单PID控制器能够处理形式的关键一步。
核心思想:在平衡点附近,一切皆线性
- 它是什么:小扰动理论假设系统在一个稳定的平衡点(Equilibrium Point,例如完美悬停)附近工作。在此状态下,所有的变量(如角度、角速度、控制输入)都只在它们的平衡值附近做微小的波动。
- 为什么用它:原始的动力学方程充满了
sin,cos和变量相乘的项,这些是非线性的,难以直接设计稳定、可预测的控制器。但在一个极小的局部范围内,任何平滑的曲线都可以被它的切线很好地近似。线性化就是找到并使用这条“切线方程”来替代原始的“曲线方程”。 - 关键近似(小角度假设):当飞机接近悬停时,姿态角 ϕ\phiϕ (滚转) 和 θ\thetaθ (俯仰) 都非常小(接近0)。在数学上,当角度 xxx 以弧度为单位且非常小时:
- sin(x)≈x\sin(x) \approx xsin(x)≈x
- cos(x)≈1\cos(x) \approx 1cos(x)≈1
- x⋅y≈0x \cdot y \approx 0x⋅y≈0 (如果x和y都是小量,它们的乘积是二阶小量,可以忽略)
实战:四旋翼悬停模型的线性化推导
让我们以四旋翼在空中完美悬停为场景,一步步看这些近似如何简化我们的非线性方程。
1. 定义平衡状态
- 状态量 (x0x_0x0): 姿态水平 (ϕ=0,θ=0\phi=0, \theta=0ϕ=0,θ=0),无旋转运动 (p=q=r=0p=q=r=0p=q=r=0)。
- 控制量 (u0u_0u0): 各个轴向的控制力矩为零 (U2=0,U3=0,U4=0U_2=0, U_3=0, U_4=0U2=0,U3=0,U4=0),总升力 U1U_1U1 刚好抵消重力,即 U1=mgU_1 = mgU1=mg。
2. 引入扰动
现在,我们考虑飞机在平衡点附近的一个微小偏移。任何变量都可以写成“平衡值 + 扰动量”的形式:
- ϕ=0+Δϕ\phi = 0 + \Delta\phiϕ=0+Δϕ
- θ=0+Δθ\theta = 0 + \Delta\thetaθ=0+Δθ
- U1=mg+ΔU1U_1 = mg + \Delta U_1U1=mg+ΔU1
- U2=0+ΔU2U_2 = 0 + \Delta U_2U2=0+ΔU2
- …等等
3. 将扰动代入非线性方程并简化
案例 1:高度通道 (Z轴)
原始方程:
z¨=U1m(cosϕcosθ)−g \ddot{z} = \frac{U_1}{m} (\cos\phi \cos\theta) - g z¨=mU1(cosϕcosθ)−g
将 U1=mg+ΔU1,ϕ=Δϕ,θ=ΔθU_1 = mg + \Delta U_1, \phi=\Delta\phi, \theta=\Delta\thetaU1=mg+ΔU1,ϕ=Δϕ,θ=Δθ 代入:
z¨=mg+ΔU1m(cos(Δϕ)cos(Δθ))−g \ddot{z} = \frac{mg + \Delta U_1}{m} (\cos(\Delta\phi) \cos(\Delta\theta)) - g z¨=mmg+ΔU1(cos(Δϕ)cos(Δθ))−g
应用小角度近似 cos(Δϕ)≈1\cos(\Delta\phi) \approx 1cos(Δϕ)≈1 和 cos(Δθ)≈1\cos(\Delta\theta) \approx 1cos(Δθ)≈1:
z¨≈(mgm+ΔU1m)⋅1⋅1−g \ddot{z} \approx (\frac{mg}{m} + \frac{\Delta U_1}{m}) \cdot 1 \cdot 1 - g z¨≈(mmg+mΔU1)⋅1⋅1−g
z¨≈g+ΔU1m−g \ddot{z} \approx g + \frac{\Delta U_1}{m} - g z¨≈g+mΔU1−g
最终得到线性化模型:
z¨=1mΔU1 \ddot{z} = \frac{1}{m} \Delta U_1 z¨=m1ΔU1
结论:在悬停附近,垂直加速度 z¨\ddot{z}z¨ 与总升力的变化量 ΔU1\Delta U_1ΔU1 成正比。这完美符合牛顿第二定律 F=maF=maF=ma 的直觉,形式简单,极易控制。
案例 2:水平位置通道 (X轴)
原始方程(为简化,设偏航角 ψ=0\psi=0ψ=0):
x¨=U1m(cosϕsinθcosψ+sinϕsinψ)→ψ=0U1mcosϕsinθ \ddot{x} = \frac{U_1}{m} (\cos\phi \sin\theta \cos\psi + \sin\phi \sin\psi) \xrightarrow{\psi=0} \frac{U_1}{m} \cos\phi \sin\theta x¨=mU1(cosϕsinθcosψ+sinϕsinψ)ψ=0mU1cosϕsinθ
代入扰动量:
x¨=mg+ΔU1mcos(Δϕ)sin(Δθ) \ddot{x} = \frac{mg + \Delta U_1}{m} \cos(\Delta\phi) \sin(\Delta\theta) x¨=mmg+ΔU1cos(Δϕ)sin(Δθ)
应用小角度近似 cos(Δϕ)≈1\cos(\Delta\phi) \approx 1cos(Δϕ)≈1, sin(Δθ)≈Δθ\sin(\Delta\theta) \approx \Delta\thetasin(Δθ)≈Δθ 和 ΔU1⋅Δθ≈0\Delta U_1 \cdot \Delta\theta \approx 0ΔU1⋅Δθ≈0 (二阶小量忽略不计):
x¨≈(mgm+ΔU1m)⋅1⋅Δθ \ddot{x} \approx (\frac{mg}{m} + \frac{\Delta U_1}{m}) \cdot 1 \cdot \Delta\theta x¨≈(mmg+mΔU1)⋅1⋅Δθ
x¨≈(g+ΔU1m)Δθ≈g⋅Δθ+ΔU1mΔθ \ddot{x} \approx (g + \frac{\Delta U_1}{m}) \Delta\theta \approx g \cdot \Delta\theta + \frac{\Delta U_1}{m}\Delta\theta x¨≈(g+mΔU1)Δθ≈g⋅Δθ+mΔU1Δθ
再次忽略二阶小量 (ΔU1⋅Δθ)(\Delta U_1 \cdot \Delta\theta)(ΔU1⋅Δθ):
x¨≈g⋅θ \ddot{x} \approx g \cdot \theta x¨≈g⋅θ
结论:在悬停附近,水平加速度 x¨\ddot{x}x¨ 近似与俯仰角 θ\thetaθ 成正比。这同样非常符合直觉:飞机想往前飞,就需要向前低头。这个关系是串级PID中,位置环的输出(期望角度)能够控制飞机位置的根本原因。
案例 3:姿态通道(滚转 Roll)
原始方程:
p˙=1Ixx[U2+(Iyy−Izz)qr] \dot{p} = \frac{1}{I_{xx}} [U_2 + (I_{yy} - I_{zz}) q r] p˙=Ixx1[U2+(Iyy−Izz)qr]
在小扰动下, p,q,rp, q, rp,q,r 都是小量,它们的乘积 q⋅rq \cdot rq⋅r 是二阶小量,可以直接忽略。U2U_2U2 本身就是扰动输入 ΔU2\Delta U_2ΔU2。同时,在小角度下,机体角速度的变化率 p˙\dot{p}p˙ 等于欧拉角加速度 ϕ¨\ddot{\phi}ϕ¨。
ϕ¨≈1Ixx[U2+0] \ddot{\phi} \approx \frac{1}{I_{xx}} [U_2 + 0] ϕ¨≈Ixx1[U2+0]
最终得到线性化模型:
ϕ¨=1IxxU2 \ddot{\phi} = \frac{1}{I_{xx}} U_2 ϕ¨=Ixx1U2
结论:滚转角加速度 ϕ¨\ddot{\phi}ϕ¨ 与滚转力矩 U2U_2U2 成正比。这等价于旋转运动中的 M=IαM = I \alphaM=Iα。同样,俯仰和偏航也有类似结论:
- θ¨=1IyyU3\ddot{\theta} = \frac{1}{I_{yy}} U_3θ¨=Iyy1U3
- r¨=1IzzU4\ddot{r} = \frac{1}{I_{zz}} U_4r¨=Izz1U4
通过线性化,我们把一组复杂的非线性耦合方程,解耦成了几个可以独立控制的、简单的二阶线性系统。这就为后续设计简单高效的PID控制器铺平了道路。
3. 从线性模型到 PID 控制 —— 控制器的自然演化
我们已经有了四旋翼的线性化模型。现在,让我们看看 PID 是如何自然而然地从这些公式中“长”出来的。
3.1 比例控制 § —— 引入“虚拟弹簧”
以姿态控制为例。我们的线性模型是 ϕ¨=1IxxU2\ddot{\phi} = \frac{1}{I_{xx}} U_2ϕ¨=Ixx1U2。
为了方便理解,令 b=1/Ixxb = 1/I_{xx}b=1/Ixx,则方程为 ϕ¨=b⋅U2\ddot{\phi} = b \cdot U_2ϕ¨=b⋅U2。
目标:无论飞机歪到什么角度 ϕ\phiϕ,都要把它拉回水平 (ϕ=0\phi=0ϕ=0)。
控制律:我们施加一个与角度成正比的反向力矩。
U2=−Kp⋅ϕ U_2 = -K_p \cdot \phi U2=−Kp⋅ϕ
代入方程:
ϕ¨=b(−Kpϕ) ⟹ ϕ¨+(bKp)ϕ=0 \ddot{\phi} = b(-K_p \phi) \implies \ddot{\phi} + (b K_p) \phi = 0 ϕ¨=b(−Kpϕ)⟹ϕ¨+(bKp)ϕ=0
物理意义:
这是一个标准的简谐振动方程(类似于弹簧振子 x¨+kx=0\ddot{x} + kx = 0x¨+kx=0)。
- KpK_pKp 实际上是在给四旋翼装上一个虚拟弹簧,刚度为 bKpb K_pbKp。
- 现象:如果你推一下飞机,它会围绕水平面左右摇摆,永远停不下来(无阻尼振荡)。
3.2 微分控制 (D) —— 引入“虚拟阻尼”
目标:消除 P 控制带来的振荡,让飞机稳稳停住。
控制律:增加一项与角速度 ϕ˙\dot{\phi}ϕ˙ 成正比的反向力矩(阻尼)。
U2=−Kpϕ−Kdϕ˙ U_2 = -K_p \phi - K_d \dot{\phi} U2=−Kpϕ−Kdϕ˙
代入方程:
ϕ¨=b(−Kpϕ−Kdϕ˙) ⟹ ϕ¨+(bKd)ϕ˙+(bKp)ϕ=0 \ddot{\phi} = b(-K_p \phi - K_d \dot{\phi}) \implies \ddot{\phi} + (b K_d) \dot{\phi} + (b K_p) \phi = 0 ϕ¨=b(−Kpϕ−Kdϕ˙)⟹ϕ¨+(bKd)ϕ˙+(bKp)ϕ=0
物理意义:
这是一个阻尼振动方程。
- KdK_dKd 实际上是在给四旋翼装上一个虚拟空气阻尼。
- 现象:振荡能量被 D 项消耗,飞机在受到扰动后能迅速回到水平并静止。
- 结论:这就是 PD 控制器。对于四旋翼的姿态环,这通常就够了。
3.3 积分控制 (I) —— 消除“稳态误差”
以高度控制为例。线性模型为 Δz¨=1mΔU1\Delta \ddot{z} = \frac{1}{m} \Delta U_1Δz¨=m1ΔU1。
注意:这里的 ΔU1\Delta U_1ΔU1 是相对于悬停油门 (mgmgmg) 的增量。
场景:假设我们要飞到高度 ztargetz_{target}ztarget。
如果我们只用 PD 控制:U1=mg+Kp(ztarget−z)−Kdz˙U_1 = mg + K_p(z_{target} - z) - K_d \dot{z}U1=mg+Kp(ztarget−z)−Kdz˙。
但如果电池电压下降了,或者我们估算的重量 mmm 不准(比实际轻了),那么 mgmgmg 这个前馈量就不够了。
飞机为了维持悬停,必须产生额外的升力,这就需要 ztarget−zz_{target} - zztarget−z 保持一个非零的误差(稳态误差)来提供这部分升力。
控制律:
ΔU1=Kpe+Kde˙+Ki∫edt \Delta U_1 = K_p e + K_d \dot{e} + K_i \int e dt ΔU1=Kpe+Kde˙+Ki∫edt
物理意义:
- 只要高度有误差,积分项 ∫edt\int e dt∫edt 就会不断积累。
- 最终,积分项会自动“学习”出电池电压下降或重量增加带来的偏差,并产生一个恒定的补偿力。
- 此时误差 eee 可以回到 0。
总结:
- P (比例):提供虚拟刚度,决定回正的快慢。
- D (微分):提供虚拟阻尼,决定稳定性。
- I (积分):提供误差记忆,自动修正模型偏差(如重量估算错误)。
3.5 深入理解闭环系统与根轨迹分析
上一节我们通过求解特征方程的根(极点)来判断系统的收敛性。本节将进一步阐释闭环传递函数的意义,并引入一种更强大的图形化工具——根轨迹法,来直观地理解控制器参数如何影响系统的稳定性。
3.5.1 闭环传递函数的再认识
在3.4节中,我们推导了系统的闭环传递函数为:
H(s)=Y(s)R(s)=C(s)G(s)1+C(s)G(s) H(s) = \frac{Y(s)}{R(s)} = \frac{C(s)G(s)}{1+C(s)G(s)} H(s)=R(s)Y(s)=1+C(s)G(s)C(s)G(s)
-
它是什么?
闭环传递函数是整个反馈控制系统的总输入-输出模型。它将我们最关心的两个量——“我们期望的目标” R(s)R(s)R(s) (Reference) 和“系统实际的输出” Y(s)Y(s)Y(s) (Output) 直接关联起来。它是一个高度浓缩的数学表达式,内部已经包含了控制器 C(s)C(s)C(s)、被控对象 G(s)G(s)G(s) 以及反馈回路本身的所有动态特性。 -
它的意义是什么?
闭环传递函数 H(s)H(s)H(s) 是分析和设计控制系统的核心,因为它能告诉我们关于系统性能的一切:- 稳定性(收敛性):如前所述,其分母的根(极点)的位置决定了系统在受到扰动后,其自身响应是衰减、发散还是振荡。
- 动态性能:它描述了系统从一个状态过渡到另一个状态的“过程”好坏。例如,当目标值突然改变时(阶跃响应),系统输出是响应迅速还是迟缓?会产生多大的超调?需要多长时间才能稳定下来?这些性能指标(上升时间、超调量、调节时间)都与闭环传递函数的极点和零点(分子多项式的根)位置密切相关。
- 稳态性能:它描述了系统在过渡过程结束后,能否精确地达到期望值。通过对闭环传递函数应用终值定理,我们可以计算出系统的稳态误差,即
lim(t->∞) e(t)。这能回答“控制器最终能否完全消除误差?”这个问题,对于需要高精度控制的系统(如无人机定点悬停)至关重要。
3.5.2 使用根轨迹法 (Root Locus) 分析收敛性
根轨迹法是一种绝妙的图形化分析工具。它清晰地展示了当一个控制器参数(通常是增益 KKK)从0变化到无穷大时,系统的闭环极点在复平面上是如何移动的。这使得我们无需反复求解不同增益下的特征方程,就能直观地看到增益对系统稳定性和动态性能的影响。
基本原理:根轨迹绘制的是满足特征方程 1+K⋅L(s)=01 + K \cdot L(s) = 01+K⋅L(s)=0 的所有根 sss 的集合,其中 L(s)L(s)L(s) 是系统的开环传递函数,K是可变增益。
案例分析1:P控制器的根轨迹
- 特征方程: s2+bKp=0 ⟹ 1+Kp⋅bs2=0s^2 + bK_p = 0 \implies 1 + K_p \cdot \frac{b}{s^2} = 0s2+bKp=0⟹1+Kp⋅s2b=0。
- 开环传递函数: L(s)=b/s2L(s) = b/s^2L(s)=b/s2。它在原点有两个重合的开环极点。
- 根轨迹图分析:
- 轨迹的起点是开环极点(Kp=0K_p=0Kp=0时)。这里是原点的两个极点。
- 随着增益 KpK_pKp 从0开始增大,这两个闭环极点从原点分离,一个向上,一个向下,并始终沿着虚轴移动。
- 结论:
根轨迹图直观地显示,无论比例增益 KpK_pKp 取何值(只要大于0),闭环极点永远停留在虚轴上,实部永远为0。这再次证明,纯P控制器无法使系统稳定收敛,只能产生持续振荡。
案例分析2:PD控制器的根轨迹
- 特征方程: s2+bKds+bKp=0s^2 + bK_d s + bK_p = 0s2+bKds+bKp=0。为了使用根轨迹法,我们必须选择一个参数作为可变增益 KKK,并固定其他参数。这里我们固定 KdK_dKd,将 KpK_pKp 作为可变增益。
- 方程变形: s2+bKds+bKp=0 ⟹ 1+Kp⋅bs2+bKds=0s^2 + bK_d s + bK_p = 0 \implies 1 + K_p \cdot \frac{b}{s^2 + bK_d s} = 0s2+bKds+bKp=0⟹1+Kp⋅s2+bKdsb=0
- 开环传递函数: L(s)=bs(s+bKd)L(s) = \frac{b}{s(s + bK_d)}L(s)=s(s+bKd)b。它有一个开环极点在原点 s=0s=0s=0,另一个在 s=−bKds=-bK_ds=−bKd。
- 根轨迹图分析:
- 轨迹的起点是 s=0s=0s=0 和 s=−bKds=-bK_ds=−bKd。
- 随着增益 KpK_pKp 从0开始增大,两个闭环极点分别从这两个开环极点出发,沿着实轴相向移动。
- 它们在实轴上的某一点(分离点,具体为 s=−bKd/2s = -bK_d/2s=−bKd/2)相遇,然后分离。
- 分离后,一个极点向上进入左上半平面,另一个极点向下进入左下半平面,最终趋近于垂直于实轴的渐近线。
- 结论:
这次的根轨迹图告诉我们一个至关重要的信息:只要 Kd>0K_d > 0Kd>0,使得一个开环极点被“挪”到了左半平面,那么无论比例增益 KpK_pKp 如何从0开始增大,所有的根轨迹都始终位于复平面的左半部分。这从图形上强有力地证明了,D项的引入从根本上保证了系统的稳定性。我们还可以看出,随着 KpK_pKp 的增大(极点在轨迹上移动),极点的虚部会变大,说明系统的振荡性会增强,但它始终是收敛的。
3.4 闭环系统收敛性分析(传递函数法)
为了严谨地分析系统为何在PD控制下能够收敛,而在纯P控制下不能,我们引入控制理论中的传递函数法。我们以滚转通道(ϕ\phiϕ)为例。
为什么极点位置决定收敛性?
这个问题的核心在于拉普拉斯反变换,它将频域中的传递函数转换回时域中的系统响应。
-
传递函数与极点:一个线性系统的闭环传递函数 H(s)H(s)H(s) 可以通过部分分式展开,分解为一系列基本项的和。对于一个单极点 p1p_1p1,其在传递函数中的形式为 A1s−p1\frac{A_1}{s - p_1}s−p1A1。
H(s)=分子多项式分母多项式=分子多项式(s−p1)(s−p2)⋯=A1s−p1+A2s−p2+⋯ H(s) = \frac{\text{分子多项式}}{\text{分母多项式}} = \frac{\text{分子多项式}}{(s-p_1)(s-p_2)\cdots} = \frac{A_1}{s - p_1} + \frac{A_2}{s - p_2} + \cdots H(s)=分母多项式分子多项式=(s−p1)(s−p2)⋯分子多项式=s−p1A1+s−p2A2+⋯
这里的 p1,p2,…p_1, p_2, \ldotsp1,p2,… 就是系统的极点。 -
从极点到时域响应:拉普拉斯反变换的关键规则是:
L−1{As−p}=Aept \mathcal{L}^{-1}\left\{ \frac{A}{s - p} \right\} = A e^{pt} L−1{s−pA}=Aept
这意味着系统的总响应(对于一个脉冲输入的自由响应)是每个极点对应的指数函数之和:
y(t)=A1ep1t+A2ep2t+⋯ y(t) = A_1 e^{p_1 t} + A_2 e^{p_2 t} + \cdots y(t)=A1ep1t+A2ep2t+⋯ -
极点实部与系统趋势:现在,我们将极点写成复数形式 p=σ+jωp = \sigma + j\omegap=σ+jω,其中 σ\sigmaσ 是实部,ω\omegaω 是虚部。
- 对应的时域项为 Ae(σ+jω)t=AeσtejωtA e^{(\sigma + j\omega)t} = A e^{\sigma t} e^{j\omega t}Ae(σ+jω)t=Aeσtejωt。
- 根据欧拉公式 ejωt=cos(ωt)+jsin(ωt)e^{j\omega t} = \cos(\omega t) + j\sin(\omega t)ejωt=cos(ωt)+jsin(ωt),虚部 jωj\omegajω 决定了响应的振荡部分。
- 而实部 σ\sigmaσ 决定了 eσte^{\sigma t}eσt 这一项,它作为整个响应的包络线,直接决定了系统的长期趋势:
- 当 σ<0\sigma < 0σ<0 (极点在左半平面): eσte^{\sigma t}eσt 是一个衰减的指数函数(如 e−2te^{-2t}e−2t)。系统的自由响应会随时间趋近于零。系统收敛,是稳定的。
- 当 σ>0\sigma > 0σ>0 (极点在右半平面): eσte^{\sigma t}eσt 是一个增长的指数函数(如 e2te^{2t}e2t)。系统的自由响应会无限增大。系统发散,是不稳定的。
- 当 σ=0\sigma = 0σ=0 (极点在虚轴上): eσt=1e^{\sigma t} = 1eσt=1。系统的自由响应是一个幅值不变的持续振荡(如 cos(ωt)\cos(\omega t)cos(ωt))。系统既不收敛也不发散,是临界稳定的。
结论:一个系统的动态响应由其所有极点共同决定。只要所有极点的实部都为负,系统的每一个响应分量都会衰减,从而保证系统最终能够稳定下来。因此,分析系统收敛性的关键,就在于求解其闭环传递函数的极点,并检查它们是否全部位于复平面的左半部分。
前提:
- 被控对象(Plant): 从线性化模型可知,滚转力矩 U2U_2U2 与角加速度 ϕ¨\ddot{\phi}ϕ¨ 的关系为 ϕ¨=bU2\ddot{\phi} = b U_2ϕ¨=bU2(其中 b=1/Ixxb=1/I_{xx}b=1/Ixx)。通过拉普拉斯变换(sss为复频率),其传递函数为:
G(s)=Φ(s)U2(s)=bs2 G(s) = \frac{\Phi(s)}{U_2(s)} = \frac{b}{s^2} G(s)=U2(s)Φ(s)=s2b - 控制器(Controller): 控制器根据期望角度 ϕdes\phi_{des}ϕdes 和当前角度 ϕ\phiϕ 的误差 e=ϕdes−ϕe = \phi_{des} - \phie=ϕdes−ϕ 来计算输出 U2U_2U2。
- 闭环系统: 控制器和被控对象组成一个负反馈系统。根据上面的讨论,我们要做的就是分析其闭环极点的位置。
案例分析1:纯比例(P)控制器 (对应3.1节)
-
控制器传递函数 C(s)C(s)C(s):
P控制器的控制律是输出 = Kp * 误差,即 U2(t)=Kp⋅e(t)U_2(t) = K_p \cdot e(t)U2(t)=Kp⋅e(t)。对这个式子进行拉普拉斯变换,我们得到 U2(s)=Kp⋅E(s)U_2(s) = K_p \cdot E(s)U2(s)=Kp⋅E(s)。
传递函数的定义是输出与输入的比值,因此:
C(s)=U2(s)E(s)=Kp C(s) = \frac{U_2(s)}{E(s)} = K_p C(s)=E(s)U2(s)=Kp -
闭环特征方程 1+C(s)G(s)=01 + C(s)G(s) = 01+C(s)G(s)=0:
在一个标准的负反馈控制环中,误差 E(s)E(s)E(s) 是目标值 R(s)R(s)R(s) (期望角度 ϕdes\phi_{des}ϕdes) 与实际值 Y(s)Y(s)Y(s) (实际角度 ϕ\phiϕ) 的差,即 E(s)=R(s)−Y(s)E(s) = R(s) - Y(s)E(s)=R(s)−Y(s)。
而实际值 Y(s)Y(s)Y(s) 是由误差 E(s)E(s)E(s) 经过控制器 C(s)C(s)C(s) 和被控对象 G(s)G(s)G(s) 共同作用产生的:Y(s)=E(s)⋅C(s)⋅G(s)Y(s) = E(s) \cdot C(s) \cdot G(s)Y(s)=E(s)⋅C(s)⋅G(s)。
将两者合并:Y(s)=(R(s)−Y(s))⋅C(s)G(s)Y(s) = (R(s) - Y(s)) \cdot C(s)G(s)Y(s)=(R(s)−Y(s))⋅C(s)G(s)。
整理可得:Y(s)(1+C(s)G(s))=R(s)C(s)G(s)Y(s)(1 + C(s)G(s)) = R(s)C(s)G(s)Y(s)(1+C(s)G(s))=R(s)C(s)G(s)。
系统的闭环传递函数为 Y(s)R(s)=C(s)G(s)1+C(s)G(s)\frac{Y(s)}{R(s)} = \frac{C(s)G(s)}{1+C(s)G(s)}R(s)Y(s)=1+C(s)G(s)C(s)G(s)。
我们看到,分母 1+C(s)G(s)1+C(s)G(s)1+C(s)G(s) 决定了系统响应的固有模式。令分母为零,得到的方程即为特征方程,它的根就是系统的极点。
1+Kp⋅bs2=0 ⟹ s2+bKp=0 1 + K_p \cdot \frac{b}{s^2} = 0 \implies s^2 + bK_p = 0 1+Kp⋅s2b=0⟹s2+bKp=0 -
极点位置:
s=±jbKp s = \pm j\sqrt{bK_p} s=±jbKp -
收敛性分析:
系统的两个极点实部为0,纯粹位于虚轴上。根据我们的理论,这意味着系统处于临界稳定状态。当受到一个扰动后,它会以角频率 ω=bKp\omega = \sqrt{bK_p}ω=bKp 进行永不衰减的正弦振荡。系统并不会收敛到目标值,这与3.1节的直观物理分析完全吻合。
案例分析2:比例微分(PD)控制器 (对应3.2节)
-
控制器传递函数 C(s)C(s)C(s):
PD控制器的控制律是 U2(t)=Kpe(t)+Kdde(t)dtU_2(t) = K_p e(t) + K_d \frac{de(t)}{dt}U2(t)=Kpe(t)+Kddtde(t)。
利用拉普拉斯变换中“时域的微分等于频域乘以s”的性质,我们得到 U2(s)=KpE(s)+KdsE(s)=(Kp+Kds)E(s)U_2(s) = K_p E(s) + K_d s E(s) = (K_p + K_d s)E(s)U2(s)=KpE(s)+KdsE(s)=(Kp+Kds)E(s)。
因此,PD控制器的传递函数为:
C(s)=U2(s)E(s)=Kp+Kds C(s) = \frac{U_2(s)}{E(s)} = K_p + K_d s C(s)=E(s)U2(s)=Kp+Kds -
闭环特征方程为 1+C(s)G(s)=01 + C(s)G(s) = 01+C(s)G(s)=0:
1+(Kp+Kds)⋅bs2=0 ⟹ s2+bKds+bKp=0 1 + (K_p + K_d s) \cdot \frac{b}{s^2} = 0 \implies s^2 + bK_d s + bK_p = 0 1+(Kp+Kds)⋅s2b=0⟹s2+bKds+bKp=0 -
收敛性分析:
这是一个标准的二阶系统特征方程,其通用形式为 s2+2ζωns+ωn2=0s^2 + 2\zeta\omega_n s + \omega_n^2 = 0s2+2ζωns+ωn2=0。- 自然频率: ωn=bKp\omega_n = \sqrt{bK_p}ωn=bKp,它决定了系统响应的“快慢”。
- 阻尼比: 2ζωn=bKd ⟹ ζ=bKd2ωn=bKd2bKp=Kd2bKp2\zeta\omega_n = bK_d \implies \zeta = \frac{bK_d}{2\omega_n} = \frac{bK_d}{2\sqrt{bK_p}} = \frac{K_d}{2}\sqrt{\frac{b}{K_p}}2ζωn=bKd⟹ζ=2ωnbKd=2bKpbKd=2KdKpb,它决定了系统的“稳定性”和“超调”。
-
极点位置由求根公式给出:
s=−ζωn±ωnζ2−1 s = -\zeta\omega_n \pm \omega_n\sqrt{\zeta^2-1} s=−ζωn±ωnζ2−1
只要我们选择 Kp>0K_p > 0Kp>0 和 Kd>0K_d > 0Kd>0,那么 b,ωn,ζb, \omega_n, \zetab,ωn,ζ 都是正数。因此,极点的实部 −ζωn-\zeta\omega_n−ζωn 永远是负数。- 结论: 只要PD增益为正,系统的极点就一定在复平面的左半部分。根据我们的理论,这保证了系统是稳定且收敛的。
- 收敛形式:
- 若 ζ>1\zeta > 1ζ>1 (D项很强),为过阻尼,系统缓慢收敛无超调。
- 若 ζ=1\zeta = 1ζ=1 (D项恰到好处),为临界阻尼,系统最快收敛且无超调。
- 若 0<ζ<10 < \zeta < 10<ζ<1 (P项占优),为欠阻尼,系统在振荡中收敛,会有一定超调。这是实际调参中最常见的情况。
通过传递函数法,我们从数学上证明了D项的引入,相当于在系统特征方程中增加了一次项 sss,从而将极点从虚轴“拉”到了左半平面,确保了系统的收焉性。
4. 四旋翼控制架构 —— 串级 PID
在实际四旋翼中,我们不直接用 PID 控制位置,而是采用串级结构(Cascade Control)。
4.1 为什么要分层?
位置的变化不是直接发生的。
- 想让飞机向前飞(位置变化),必须先让飞机低头(姿态变化)。
- 姿态的变化比位置的变化快得多(电机响应只需几十毫秒,而飞出去几米需要几秒)。
- 时间尺度的分离使得分层控制成为最佳选择。
4.2 控制流图与公式详解
串级PID的本质是将控制任务分解为“快环”和“慢环”,内环快,外环慢。
1. 外环(位置环):计算期望姿态
外环的目标是根据位置误差,计算出要让飞机飞到正确位置所期望的姿态。
- 运行频率: 较低 (e.g., 10Hz - 50Hz)
- 控制器: 通常是 PID (或 PI, PD)
X-Y 平面位置控制 (以X轴为例)
首先,位置控制器计算出一个“期望的加速度” x¨des\ddot{x}_{des}x¨des 来消除位置误差。
x¨des=Kp,x(xdes−xcurr)+Ki,x∫(xdes−xcurr)dt+Kd,x(x˙des−x˙curr) \ddot{x}_{des} = K_{p,x}(x_{des} - x_{curr}) + K_{i,x}\int(x_{des} - x_{curr})dt + K_{d,x}(\dot{x}_{des} - \dot{x}_{curr}) x¨des=Kp,x(xdes−xcurr)+Ki,x∫(xdes−xcurr)dt+Kd,x(x˙des−x˙curr)
- 输入:
- xdesx_{des}xdes: 期望的X轴位置 (来自遥控器或任务规划)
- xcurrx_{curr}xcurr: 当前的X轴位置 (来自GPS或视觉定位)
- x˙des\dot{x}_{des}x˙des: 期望的X轴速度 (通常为0)
- x˙curr\dot{x}_{curr}x˙curr: 当前的X轴速度 (GPS或状态估计)
- 输出:
- x¨des\ddot{x}_{des}x¨des: 期望的X轴加速度
然后,利用在线性化部分得到的近似关系 x¨≈g⋅θ\ddot{x} \approx g \cdot \thetax¨≈g⋅θ,将期望加速度转换成期望的俯仰角 θdes\theta_{des}θdes。
θdes=x¨desg \theta_{des} = \frac{\ddot{x}_{des}}{g} θdes=gx¨des
- 输入:
- x¨des\ddot{x}_{des}x¨des: 期望的X轴加速度 (来自位置PID控制器)
- 输出:
- θdes\theta_{des}θdes: 期望的俯仰角 (将作为内环的输入)
Y轴的控制与X轴完全类似,通过计算 y¨des\ddot{y}_{des}y¨des 来得到期望的滚转角 ϕdes\phi_{des}ϕdes
ϕdes=−y¨desg \phi_{des} = -\frac{\ddot{y}_{des}}{g} ϕdes=−gy¨des
(注意:这里的负号是因为,按照右手坐标系,正的滚转角 ϕ\phiϕ 产生负的Y轴方向加速度)
Z轴(高度)控制
高度控制器的输出是调节总升力 U1U_1U1。
ΔU1=Kp,z(zdes−zcurr)+Ki,z∫(zdes−zcurr)dt+Kd,z(z˙des−z˙curr) \Delta U_1 = K_{p,z}(z_{des} - z_{curr}) + K_{i,z}\int(z_{des} - z_{curr})dt + K_{d,z}(\dot{z}_{des} - \dot{z}_{curr}) ΔU1=Kp,z(zdes−zcurr)+Ki,z∫(zdes−zcurr)dt+Kd,z(z˙des−z˙curr)
- 输入:
- zdesz_{des}zdes: 期望高度
- zcurrz_{curr}zcurr: 当前高度 (来自气压计或GPS)
- z˙des\dot{z}_{des}z˙des: 期望垂直速度 (通常为0)
- z˙curr\dot{z}_{curr}z˙curr: 当前垂直速度
- 输出:
- ΔU1\Delta U_1ΔU1: 升力调节量。最终的总升力指令是 U1=mg+ΔU1U_1 = mg + \Delta U_1U1=mg+ΔU1。
2. 内环(姿态环):执行期望姿态
内环的目标是快速、精确地跟踪外环给出的期望姿态,并输出最终的电机力矩指令。
- 运行频率: 很高 (e.g., 250Hz - 1kHz)
- 控制器: 通常是 PD (或仅P)
姿态控制 (以俯仰角 θ\thetaθ 为例)
姿态控制器计算出力矩 U3U_3U3 来消除姿态角度误差。
U3=Kp,θ(θdes−θcurr)+Kd,θ(θ˙des−θ˙curr) U_3 = K_{p,\theta}(\theta_{des} - \theta_{curr}) + K_{d,\theta}(\dot{\theta}_{des} - \dot{\theta}_{curr}) U3=Kp,θ(θdes−θcurr)+Kd,θ(θ˙des−θ˙curr)
- 输入:
- θdes\theta_{des}θdes: 期望俯仰角 (来自外环)
- θcurr\theta_{curr}θcurr: 当前俯仰角 (来自IMU)
- θ˙des\dot{\theta}_{des}θ˙des: 期望俯仰角速度 (通常为0)
- θ˙curr\dot{\theta}_{curr}θ˙curr: 当前俯仰角速度 qqq (来自IMU)
- 输出:
- U3U_3U3: 俯仰力矩指令 (将进入电机混控器分配到各个电机)
滚转角 ϕ\phiϕ 和偏航角 ψ\psiψ 的控制同理,分别输出滚转力矩 U2U_2U2 和偏航力矩 U4U_4U4
总结: 控制信号的流动路径
- 位置目标 (xdes,ydes,zdes)(x_{des}, y_{des}, z_{des})(xdes,ydes,zdes)
- -> 外环(位置PID)
- -> 期望姿态和升力 (ϕdes,θdes,U1)(\phi_{des}, \theta_{des}, U_1)(ϕdes,θdes,U1)
- -> 内环(姿态PD)
- -> 期望力矩 (U2,U3,U4)(U_2, U_3, U_4)(U2,U3,U4)
- -> 电机混控
- -> 各个电机的转速
- -> 物理世界: 四旋翼产生力和力矩,改变姿态和位置
- -> 传感器(IMU, GPS): 测量新的 (xcurr,ϕcurr,...)(x_{curr}, \phi_{curr}, ...)(xcurr,ϕcurr,...),形成闭环。
5. 实用指南:参数整定与实现
5.1 离散化 PID 代码示例
在单片机中,我们使用离散形式:
// 伪代码示例
float update_pid(float target, float current, float dt) {
float error = target - current;
// P项
float p_term = Kp * error;
// I项(需限幅,防止积分饱和)
integral += error * dt;
integral = constrain(integral, -MAX_I, MAX_I);
float i_term = Ki * integral;
// D项(通常对测量值微分,避免设定值突变引起的冲击)
// 并且通常需要低通滤波
float derivative = (error - prev_error) / dt;
float d_term = Kd * derivative;
prev_error = error;
return p_term + i_term + d_term;
}
5.2 调参口诀(经验法)
对于四旋翼这种快速系统,通常遵循 “先内后外,先P后D再I” 的原则:
- 内环(姿态):
- 先把 I 和 D 设为 0,只加 P。
- 增大 P 直到飞机开始高频振荡,然后回调一点(比如乘 0.6)。
- 慢慢增加 D,直到振荡消失,飞机反应变得“跟手”且没有回弹。
- 姿态环通常不需要 I,或者给很小的 I。
- 外环(位置):
- 同样先调 P。
- 增加 D 抑制过冲。
- 最后增加 I,直到飞机能稳稳地定在原地,不受微风影响。
核心洞见:
PID 参数的本质是对系统频域特性的整形。P 决定带宽(响应速度),D 增加相位裕度(稳定性),I 增强低频增益(稳态精度)。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)