第3章:系统稳定性分析

稳定性这东西,说白了就是系统能不能「听话」。

我刚开始做运动控制那会儿,总觉得调参调稳了就万事大吉。直到有一次,一个看似稳定的伺服系统,在负载突变时直接震荡起来,差点把机械臂甩出去。嗯,从那以后,我对稳定性分析再也不敢马虎了。

这一章,咱们就聊聊三种最常用的稳定性分析方法:李雅普诺夫稳定性、BIBO稳定性,还有小增益定理。它们各有各的脾气,也各有各的用武之地。

3.1 李雅普诺夫稳定性理论

李雅普诺夫稳定性,说白了就是看系统「能不能自己回到平衡点」。你推它一下,它晃两下就回去了,这叫稳定;它越晃越大,那就完了。

我个人习惯把李雅普诺夫方法分成两派:

  • 第一法(间接法):通过线性化系统矩阵的特征值来判断。特征值实部全负,系统就稳定。简单粗暴,但只适用于平衡点附近。
  • 第二法(直接法):构造一个能量函数 V(x),看它的导数是否负定。如果能量一直在衰减,系统自然就稳定了。

我在项目中遇到过最典型的案例,就是给一个两关节机械臂做稳定性分析。关节之间有耦合,线性化后特征值看着没问题,但实际跑起来就是抖。后来用第二法构造了一个带耦合项的李雅普诺夫函数,才把问题揪出来。

核心要点:李雅普诺夫第二法不依赖线性化,适用于非线性系统。但难点在于——怎么找到那个 V(x)?

这里给一个简单的代码示例,判断一个二阶系统的稳定性:

import numpy as np

# 系统矩阵 A
A = np.array([[0, 1],
              [-2, -3]])

# 求解李雅普诺夫方程 A^T P + P A = -Q
Q = np.eye(2)
P = np.linalg.solve(A.T @ np.eye(2) + np.eye(2) @ A, -Q)

# 检查 P 是否正定
eigvals = np.linalg.eigvals(P)
if np.all(eigvals > 0):
    print("系统是李雅普诺夫稳定的")
else:
    print("系统不稳定,请检查参数")

避坑指南:我曾经在构造 V(x) 时,只考虑了状态变量的平方和,忽略了交叉项。结果算出来稳定,实际系统却震荡。记住,耦合项不能省。

3.2 BIBO稳定性

BIBO 稳定性,全称是「有界输入有界输出」稳定性。你想想看,如果给系统一个有限大小的输入,输出却飞到天上去了,那这系统谁敢用?

对于线性时不变系统,BIBO 稳定的充要条件是:传递函数的所有极点都在左半平面。

我个人的经验是,BIBO 稳定性更适合分析「黑箱系统」。比如你买了一个驱动器,不知道内部结构,那就给它一个阶跃信号,看输出会不会发散。简单实用。

系统类型 BIBO稳定条件 典型例子
线性时不变 极点实部 < 0 RC低通滤波器
线性时变 状态转移矩阵有界 变增益控制器
非线性 需结合其他方法 饱和非线性系统

注意:BIBO 稳定不等于内部稳定。一个系统可能输出有界,但内部状态已经爆炸了。我在调试一个带积分器的系统时就吃过这个亏——输出看着正常,但积分器内部已经饱和到极限了。

3.3 小增益定理

小增益定理,是鲁棒控制里的一把利器。它解决的是「两个系统连在一起,会不会不稳定」的问题。

说白了,如果两个子系统的增益乘积小于1,那么整个闭环系统就是稳定的。这个「增益」通常用 H∞ 范数来衡量。

我记得有一次做电机-负载耦合系统的鲁棒性分析,负载参数变化很大。用小增益定理算了一下,发现只要控制器设计得当,即使负载惯量变化50%,系统依然稳定。这比反复调参靠谱多了。

小增益定理的核心公式:

如果 ||G1||∞ · ||G2||∞ < 1,则互联系统是稳定的。

下面是一个简单的计算示例:

import control as ct
import numpy as np

# 定义两个子系统
G1 = ct.tf([1], [1, 2])
G2 = ct.tf([0.5], [1, 1])

# 计算 H∞ 范数
h1 = ct.hinfnorm(G1)[0]
h2 = ct.hinfnorm(G2)[0]

if h1 * h2 < 1:
    print(f"小增益条件满足:{h1:.3f} * {h2:.3f} = {h1*h2:.3f} < 1")
else:
    print(f"小增益条件不满足,需要重新设计控制器")

实战建议:小增益定理给出的条件是充分条件,不是必要条件。也就是说,即使乘积大于1,系统也可能稳定。但作为工程师,我建议你保守一点——满足小增益条件,心里踏实。

3.4 三种方法的对比与选择

这三种方法,各有各的脾气。我整理了一个对比表,方便你快速选择:

方法 适用场景 优点 缺点
李雅普诺夫 非线性系统、时变系统 理论严谨,可处理复杂系统 构造 V(x) 需要经验
BIBO 线性系统、黑箱测试 简单直观,适合工程验证 不能保证内部稳定
小增益定理 互联系统、鲁棒性分析 适合模块化设计 条件偏保守

我个人习惯是:先拿 BIBO 做快速筛查,再用李雅普诺夫做精细分析,最后用小增益定理验证鲁棒性。三步走,基本不会漏掉问题。

本章小结:稳定性分析不是纸上谈兵。你设计的每一个控制器,最终都要面对真实的物理世界。李雅普诺夫给你理论底气,BIBO 给你工程手感,小增益定理给你鲁棒保障。三者结合,才能做出真正可靠的运动控制系统。


公众号:蓝海资料掘金营,微信deep3321