3、反馈线性化原理:输入输出线性化与输入状态线性化的区别与联系

好,咱们今天聊点硬核的。反馈线性化,这个名字听起来挺唬人,对吧?

说白了,它就是一种“以毒攻毒”的思路。你系统是非线性的,不好控制?行,那我先设计一个非线性的控制律,把你这个非线性给“抵消”掉,让你在我眼里变成一个线性系统。然后,我再用那些经典的线性控制理论(比如PID、极点配置)去收拾你。

这就像什么呢?我小时候玩过一个游戏,叫“平衡滚珠”。木板是歪的,珠子总往低处滚。你直接用手去接,很难。但如果你能预判木板的倾斜角度,反向去推它,让珠子感觉自己是“在平地上”,那控制起来就简单多了。反馈线性化,干的就是这个“反向推木板”的活儿。

在这个框架下,有两个核心分支:输入输出线性化输入状态线性化。很多初学者容易搞混,我当年也在这上面栽过跟头。今天咱们就把它们掰开揉碎了讲清楚。

3.1 核心思想:从“硬刚”到“智取”

在讲区别之前,咱们先统一一下认知。反馈线性化的目标,不是去近似线性化(像泰勒展开那样),而是精确线性化。它通过状态反馈和坐标变换,把非线性系统变成一个完全线性的系统。

你想想看,传统的PID控制,其实是在跟非线性“硬刚”。它不管你的模型有多复杂,反正我就是一个比例、积分、微分,靠误差来调节。这在非线性不强的时候还行,一旦系统进入强非线性区(比如大角度机动、摩擦突变),PID就容易“力不从心”。

而反馈线性化是“智取”。它先利用你对系统的数学模型(也就是f(x)和g(x))的认知,设计一个控制律,把非线性项精确地抵消掉。然后,你再在这个“干净”的线性系统上,去设计你想要的动态响应。

关键点:反馈线性化依赖于精确的数学模型。模型不准,线性化效果就会大打折扣。我在做四旋翼飞行器控制时,就吃过这个亏——气动参数辨识不准,导致线性化后的系统还有残余非线性,最后还得靠鲁棒控制来兜底。

3.2 输入输出线性化:我只关心“输入-输出”这一对儿

输入输出线性化,顾名思义,它的目标很直接:让系统的输出y和新的输入v之间,呈现一个简单的线性关系

比如,你有一个单输入单输出系统:

ẋ = f(x) + g(x)u
y = h(x)

你的目标是让y和v之间变成:

y^(r) = v

这里的r,就是系统的相对阶。它表示你需要对输出y求多少次导,才能让控制输入u显式地出现。

具体怎么做?

我习惯用李导数来推导。简单说,就是对y求导:

ẏ = ∂h/∂x * ẋ = L_f h(x) + L_g h(x) * u

如果L_g h(x) ≠ 0,那么相对阶r=1。我直接设计控制律:

u = (1 / L_g h(x)) * (v - L_f h(x))

这样,ẏ = v,完美线性化。

如果L_g h(x) = 0,那就继续求导,直到u出现。假设求了r次导后,u终于出现了:

y^(r) = L_f^r h(x) + L_g L_f^{r-1} h(x) * u

那么控制律就是:

u = (1 / L_g L_f^{r-1} h(x)) * (v - L_f^r h(x))

我的经验: 在实际项目中,相对阶r往往小于系统状态维数n。这意味着,输入输出线性化只能保证输出y的动态是线性的,但系统内部有一部分状态(我们称之为“内部动态”)是不可观的。这部分内部动态必须稳定,整个系统才是稳定的。这就是所谓的零动态问题。我曾经在控制一个柔性机械臂时,忽略了内部动态的稳定性分析,结果输出跟踪得很好,但机械臂末端却抖得厉害。嗯,那是一次深刻的教训。

3.3 输入状态线性化:我要把整个状态都变线性

输入状态线性化,野心更大。它不满足于只把“输入-输出”这对儿关系变线性,它要把整个状态空间都变成一个线性系统。

它的目标是找到一个状态变换z = T(x)和一个反馈控制律u = α(x) + β(x)v,使得在新坐标系下,系统变成:

ż = A z + B v

其中(A, B)是可控的标准型(比如布鲁诺夫斯基标准型)。

这要求什么?

要求系统必须是完全能反馈线性化的。这比输入输出线性化苛刻得多。它要求系统的相对阶r必须等于系统的状态维数n。换句话说,你通过求导,必须能把所有n个状态都“暴露”在输入u的控制之下。

如果r = n,那么输入输出线性化和输入状态线性化是等价的。因为此时没有内部动态,整个状态都被线性化了。

具体步骤(以单输入系统为例):

  1. 检验条件: 检查系统是否满足能反馈线性化的两个条件(分布对合性、秩条件)。这通常需要计算李括号。
  2. 构造坐标变换: 找到一组函数T_1(x), T_2(x), ..., T_n(x),使得新坐标z_i = T_i(x)满足特定的微分关系。
  3. 设计控制律: 在新坐标下,系统变成积分链形式,然后设计v = -Kz 来实现极点配置。

注意: 输入状态线性化的条件非常强。很多实际系统(比如大多数飞行器)都不满足r=n的条件。所以,在实际工程中,输入输出线性化+内部动态稳定性分析,是更常用的组合拳。我建议你不要一上来就追求完美的输入状态线性化,先看看输入输出线性化能不能解决问题。

3.4 区别与联系:一张表说清楚

为了让你更直观地理解,我整理了一个表格:

对比维度 输入输出线性化 输入状态线性化
目标 输出y与虚拟输入v线性 整个状态x与虚拟输入v线性
条件 相对阶r存在且有限 相对阶r = n(系统维数)
内部动态 存在(n-r维),需单独分析稳定性 不存在(r=n)
复杂度 较低,只需对输出求导 较高,需要解偏微分方程找坐标变换
工程应用 非常广泛(机器人、飞行器、电机) 较少(仅适用于特殊结构系统)
鲁棒性 对模型误差敏感(内部动态可能失稳) 对模型误差同样敏感

它们的联系是什么?

  • 本质相同: 都是通过状态反馈和非线性坐标变换,将非线性系统转化为线性系统。
  • 包含关系: 当r=n时,输入输出线性化自动退化为输入状态线性化。可以说,输入状态线性化是输入输出线性化的一种特殊情况。
  • 设计流程相似: 都需要计算李导数、李括号,都需要检验能控性/能观性相关的条件。

3.5 一个简单的例子:看看它们怎么用

假设有一个二阶系统:

ẋ1 = x2
ẋ2 = x1^2 + u
y = x1

用输入输出线性化:

相对阶r=2(因为对y求两次导,u才出现:ÿ = ẋ2 = x1^2 + u)。

设计控制律:u = v - x1^2,得到 ÿ = v。

此时,内部动态不存在(因为r=n=2),所以系统完全线性化。这其实也是输入状态线性化。

如果系统改成:

ẋ1 = x1 * x2
ẋ2 = x1^2 + u
y = x1

对y求导:ẏ = x1*x2,再求导:ÿ = x2*ẋ1 + x1*ẋ2 = x2*(x1*x2) + x1*(x1^2 + u) = x1*x2^2 + x1^3 + x1*u。

相对阶r=2,控制律:u = (v - x1*x2^2 - x1^3) / x1(假设x1≠0)。

此时,内部动态?没有,因为r=n=2。但注意,控制律里出现了除以x1,这意味着x1=0是一个奇异点。我在实际项目中遇到这种情况,通常会做分段处理,或者在奇异点附近切换成其他控制策略。

总结一下:

输入输出线性化,是“点对点”的线性化,我只看输出。输入状态线性化,是“面面俱到”的线性化,我要管所有状态。

在工程中,我个人的建议是:

  1. 优先尝试输入输出线性化,因为它实现简单,对模型要求相对低。
  2. 务必检查零动态的稳定性。这是最容易翻车的地方。我曾经在无人机姿态控制中,用输入输出线性化把角度跟踪做得很好,但忽略了角速度的零动态,结果在高速机动时,角速度发散,飞机直接翻了。嗯,那是一次昂贵的试错。
  3. 如果系统结构特殊(比如机械臂的动力学),且你追求完美的动态性能,再考虑输入状态线性化。但要做好心理准备,它的数学推导和实现难度会大一个量级。

好了,关于反馈线性化的这两个“兄弟”,今天就聊到这儿。记住,理论是死的,工程是活的。多在实践中体会它们的区别,你才能真正用好它们。