Skip to content

反步法

反步法(backstepping)是一种分层控制器设计方法,能保证控制器的稳定性。

实例

实例 1

考虑系统

\[\begin{aligned} \dot{x}_1 &= x_2\\ \dot{x}_2 &= -x_1+x_1^3-x_2+u \end{aligned}\]

我们先不考虑和输入相关的标量状态,先考虑 \(\dot{x}_1 = x_2\) 这一层,将 \(x_2\) 视为这一层的控制输入,设计 \(x_2 = f(x_1),\ f(0) = 0\) 镇定 \(x_1\) 在原点。

选取 Lyapunov 函数 \(V_1(x_1) = \frac{1}{2}x_1^2\) ,则有 \(\dot{V}_1(x_1) = x_1\dot{x}_1 = x_1x_2\)

要镇定 \(x_1\) ,必须保证 \(\dot{V}_1(x_1)\) 负定。我们不妨选择 \(x_2 = -k_1x_1\) ,其中 \(k_1 > 0\) 是增益系数,此时 \(\dot{V}_1(x_1) = -k_1x_1^2\) 负定。

接下来设计整体的控制输入 \(u = g(x_1,x_2)\) ,目的是为了让 \(x_2 = -k_1x_1\) 。为了便于讨论,定义误差 \(z_2 = x_2 - (-k_1x_1) = x_2 + k_1x_1\) ,控制输入的目的就是让 \(z_2\) 收敛至 0 。

\(z_2\) 表示 \(x_2\) ,我们可以得到

\[\begin{aligned} \dot{z}_2-k_1\dot{x}_1 &= -x_1+x_1^3-z_2+k_1x_1+u\\ \dot{z}_2 &= k_1(z_2-k_1x_1)-x_1+x_1^3+k_1x_1-z_2+u\\ &= (k_1-1)z_2-(k_1^2-k_1+1)x_1+x_1^3+u \end{aligned}\]

注意到 \(x_1\) 镇定在 \(x_1 = 0\) 平衡点,为了将 \(z_2\) 镇定在 \(z_2 = 0\) 平衡点,我们需要恰当地选取 \(u = g(x_1,z_2)\) ,同时保证 \(g(0) = 0\)

选取 Lyapunov 函数 \(V_2(x_1,z_2) = \frac{1}{2}x_1^2 + \frac{1}{2}z_2^2\) ,则有

\[\begin{aligned} \dot{V}_2(x_1,z_2) &= x_1\dot{x}_1 + z_2\dot{z}_2\\ &= x_1(z_2-k_1x_1)+z_2\left[(k_1-1)z_2-(k_1^2-k_1+1)x_1+x_1^3+u\right]\\ &= -k_1x_1^2 + z_2\left[(k_1-1)z_2-(k_1^2-k_1)x_1+x_1^3+u\right] \end{aligned}\]

为了使 \(\dot{V}_2\) 负定,我们选择 \(u = (1-k_1)z_2+k_1(k_1-1)x_1-x_1^3-k_2z_2\) ,此时 \(\dot{V}_2 = -k_1x_1^2-k_2z_2^2\) 负定。

实例2

考虑系统

\[\dot{x}_1 = x_1^2-x_1^3+x_2, \ \ \dot{x_2} = x_3, \ \ \dot{x}_3 = u\]

同样地,先考虑设计 \(x_2 = f(x_1), \ f(0) = 0\) 镇定 \(x_1\) 在原点。选取 Lyapunov 函数为 \(V_1(x_1) = \frac{1}{2}x_1^2\) ,则 \(\dot{V}_1(x_1) = x_1\dot{x}_1 = x_1^3-x_1^4+x_1x_2 = x_1(x_1^2-x_1^3+x_2)\)

我们期望 \(x_2 = -x_1^2-x_1\) ,此时 \(\dot{V}_1(x_1) = -x_1^2-x_1^4\) 负定。

接下来,定义误差变量 \(z_2 = x_2 - (-x_1^2-x_1) = x_2+x_1^2+x_1\) ,我们设计 \(x_3 = g(x_1,z_2),\ g(0) = 0\) 镇定 \(z_2\) 在原点。用 \(z_2\) 表示 \(x_2\) 得到:

\[\begin{align} \dot{x}_1 &= x_1^2-x_1^3+z_2-x_1^2-x_1 = z_2-x_1-x_1^3\\ \dot{z}_2&-2x_1\dot{x}_1-\dot{x}_1 = x_3\\ \dot{z}_2 &= x_3+(2x_1+1)\dot{x}_1\\ &= x_3 + (2x_1+1)(z_2-x_1-x_1^3)\\ \end{align}\]

选取 Lyapunov 函数 \(V_2(x_1,z_2) = \frac{1}{2}x_1^2 + \frac{1}{2}z_2^2\) ,则

\[\begin{aligned} \dot{V}_2(x_1,z_2) &= x_1\dot{x}_1+z_2\dot{z}_2\\ &= x_1(z_2-x_1-x_1^3)+\\ &\ \ \ \ \ \ z_2\left[x_3+(2x_1+1)(z_2-x_1-x_1^3)\right]\\ &= -x_1^2-x_1^4+\\ &\ \ \ \ \ \ z_2\left[x_1+x_3+(2x_1+1)(z_2-x_1-x_1^3)\right] \end{aligned}\]

为了使 \(\dot{V}_2\) 负定,我们期望

\[\begin{aligned} x_3 &= -x_1+(x_1^3+x_1-z_2)(2x_1+1)-z_2\\ &= -x_1+(x_1^3+x_1-x_2-x_1^2-x_1)(2x_1+1)-x_2-x_1^2-x_1\\ &= -2x_1-x_1^2-x_2+(x_1^3-x_1^2-x_2)(2x_1+1)\\ &= -2x_1-x_1^2-x_2 + 2x_1^4-x_1^3-x_1^2-2x_1x_2-x_2\\ &= 2x_1^4-x_1^3-2x_1^2-2x_1-2x_1x_2-2x_2 \end{aligned}\]

此时 \(\dot{V}_2 = -x_1^2-x_1^4-z_2^2\) 【注:这里需要包含 \(z_2\) ?】。

最后,定义误差变量

\[\begin{aligned} z_3 &= x_3 - (2x_1^4-x_1^3-2x_1^2-2x_1-2x_1x_2-2x_2)\\ \end{aligned}\]

我们设计控制输入 \(u = h(x_1, x_2,z_3), h(0) = 0\) 镇定 \(z_3\) 在原点。

\[\begin{aligned} \dot{x}_1 &= x_1^2-x_1^3+x_2\\ \dot{x}_2 &= z_3+2x_1^4-x_1^3-2x_1^2-2x_1-2x_1x_2-2x_2\\ \dot{z}_3 &= u- \end{aligned}\]

【我发现详细写下去的话,式子太复杂了,我没有耐心了。】