问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

反步控制(Backstepping)原理与应用实例解析

创作时间:
作者:
@小白创作中心

反步控制(Backstepping)原理与应用实例解析

引用
CSDN
1.
https://m.blog.csdn.net/weixin_51200029/article/details/142755602

反步控制(Backstepping)是一种用于非线性系统控制设计的有效方法,通过递归地设计控制器来实现系统的稳定控制。本文将通过一个非线性弹簧系统的实例,深入探讨反步控制的基本原理、设计方法及其在实际系统中的应用。

一、非线性弹簧系统示例

1.1 系统描述

非线性弹簧系统中,小滑块的质量为m,弹簧的系数为α,受一个向右的力F,向右的方向为x正方向,其动态方程可以写成:

$$
m \ddot{x} + \alpha x^3 = F
$$

因为存在非线性弹簧力,所以这是一个非线性系统。

1.2 控制目标

通过改变F,使小滑块按照一条指定的轨迹移动。

1.3 系统动态方程

令:

  • F = u 代表输入
  • x1 = x 代表位移
  • x2 = x' 代表速度

目标是使x1趋向于xd(desired轨迹)。重新整理方程:

$$
\begin{align}
\dot{x}_1 &= \dot{x} = x_2 \
\dot{x}_2 &= \ddot{x} = -\frac{\alpha}{m}x^3 + \frac{1}{m}u
\end{align}
$$

分析这个方程,可以看到可以通过改变u(系统输入)来控制x2,进而控制x1。

1.4 误差函数与控制目标

引入误差函数e:

$$
e = x_{1d} - x_1
$$

目标是使e趋向于0。对e求导:

$$
\dot{e} = \dot{x}_{1d} - \dot{x}_1
$$

代入(2)式:

$$
\dot{e} = \dot{x}_{1d} - x_2
$$

这个式子很重要,因为目标是让e趋向于0。

二、反步控制器设计

2.1 李雅普诺夫函数的应用

寻找一个李亚普诺夫函数V(e),使得V(e)是正定的,而V'(e)是负定的。设:

$$
V_1 = \frac{1}{2}e^2
$$

这是一个正定函数。求导:

$$
\dot{V}1 = \frac{\partial V_1}{\partial e} \cdot \frac{de}{dt} = e\dot{e} = e(\dot{x}{1d} - x_2)
$$

希望e趋向于0,自然希望V'1是一个负定系统,所以设计:

$$
\dot{x}_{1d} - x_2 = -k_1e
$$

其中,控制器增益k1 > 0。此时:

$$
\dot{V}_1 = -k_1e^2
$$

很明显是负定函数。实现方法是:

$$
x_{2d} = \dot{x}_{1d} + k_1e
$$

2.2 新的误差函数与控制目标

新的目标是使x2趋向于x2d。引入新的误差函数:

$$
\delta = x_{2d} - x_2
$$

代入(6)式:

$$
\dot{V}1 = e(\dot{x}{1d} - (x_{2d} - \delta))
$$

代入(7)式:

$$
\dot{V}_1 = -k_1e^2 + e\delta
$$

分析δ的变化:

$$
\dot{\delta} = \dot{x}_{2d} - \dot{x}_2
$$

代入(2)式和(7)式:

$$
\dot{\delta} = \ddot{x}_{1d} + k_1\dot{e} - \left(-\frac{\alpha}{m}x_1^3 + \frac{1}{m}u\right)
$$

代入(4)式:

$$
\dot{\delta} = \ddot{x}{1d} + k_1(\dot{x}{1d} - x_2) + \frac{\alpha}{m}x_1^3 - \frac{1}{m}u
$$

目标是使δ和e都趋向于零。构造新的李雅普诺夫函数:

$$
V_2 = V_1 + \frac{1}{2}\delta^2
$$

求导:

$$
\dot{V}_2 = \dot{V}_1 + \delta\dot{\delta} = -k_1e^2 + e\delta + \delta\dot{\delta}
$$

2.4 控制器增益的设计

设计:

$$
e + \dot{\delta} = -k_2\delta
$$

其中,k2也是大于0的控制器增益。此时:

$$
\dot{V}_2 = -k_1e^2 - k_2\delta^2
$$

2.5 输入表达式推导

代入(10)式:

$$
e + \ddot{x}{1d} + k_1(\dot{x}{1d} - x_2) + \frac{\alpha}{m}x_1^3 - \frac{1}{m}u = -k_2\delta
$$

推导出输入表达式:

$$
u = me + m\ddot{x}{1d} + mk_1(\dot{x}{1d} - x_2) + \alpha x_1^3 + mk_2\delta
$$

三、系统验证

3.1 误差函数的动态方程

代入(8)式和(7)式:

$$
\dot{e} = -k_1e + \delta
$$

代入(11)式:

$$
\dot{\delta} = -e - k_2\delta
$$

3.2 反馈线性化

写在一起:

$$
\begin{bmatrix}
\dot{e} \
\dot{\delta}
\end{bmatrix} =
\begin{bmatrix}
-k_1 & 1 \
-1 & -k_2
\end{bmatrix}
\begin{bmatrix}
e \
\delta
\end{bmatrix}
$$

这是一个线性系统,整个过程就是通过反馈系统把它线性化了。

3.3 状态特征值分析

特征值分析:

$$
\begin{matrix}
\lambda_1 + \lambda_2 = \Lambda = -k_1 - k_2 < 0 \
\lambda_1 \cdot \lambda_2 = \left| \begin{matrix} -k_1 & 1 \ -1 & -k_2 \end{matrix} \right| = k_1k_2 + 1 > 0
\end{matrix}
$$

所以λ1和λ2一定是同号,并且都小于0。

3.4 系统平衡点稳定性

平衡点:

$$
\begin{bmatrix}
\dot{e} \
\dot{\delta}
\end{bmatrix} = 0 \Rightarrow
\begin{bmatrix}
e \
\delta
\end{bmatrix} = 0
$$

因为特征值都小于0,所以它是渐进稳定的系统。

四、Simulink仿真

4.1 Simulink模型构建

4.2 动态方程实现

系统动态方程部分:

对应于推导的(2)式:

$$
\dot{x}_2 = -\frac{\alpha}{m}x^3 + \frac{1}{m}u
$$

4.3 输入信号构建

输入信号构建部分:

u(1)*u(3)+u(1)*u(11)+u(1)*u(4)*(u(10)-u(8))+u(2)*u(7)^3+u(1)*u(5)*u(6)

4.4 期望值子系统设计

期望值子系统:

正弦函数的变化幅值:

u(2)+u(3)*sin(u(1)*pi/u(4))

4.5 仿真结果分析

(1) 单目标值追踪

设置正弦函数变化幅值为0,目标值为3:

红线是目标值,黄线是实际值,很好地追踪到了目标值。

(2) 多目标值追踪

设置多个目标值:

追踪效果依然很好。

(3) 波动与振荡效果测试

加入波动:

追踪效果依然很好。

五、Matlab实现

%DSC example
%--------------------------------system-----------------------------------%
%dot_x1=x2
%dot_x2=-x1^2+u
%-------------------------------settings----------------------------------%
%initial state
%x1(0)=0.5,x2(0)=0
%sample time
%tao=0.01
%tracking target
%x_1d=[3 1 4 1 3]//interval time:20
%-------------------------------------------------------------------------%
%-------------------------------数据初始化--------------------------------%
%参数取值
k1=1;
k2=50;
%采样时间
tao=0.01;
%总采样次数
T=10000;
%总时间
total_time=tao*T;      %观测时间设置为100秒
%定义初始状态
x1_initial=0.5;
x2_initial=0;
u_initial=0;
%定义状态变量矩阵和控制变量矩阵
x1=zeros(1,T);
x2=zeros(1,T);
u=zeros(1,T);
%x1d的定义
x1d=zeros(1,T);
for i=1:T/5
    x1d(i)=3;
end
for i=T/5+1:2*T/5
    x1d(i)=1;
end
for i=2*T/5+1:3*T/5
    x1d(i)=4;
end
for i=3*T/5+1:4*T/5
    x1d(i)=1;
end
for i=4*T/5+1:T
    x1d(i)=3;
end
%x2d初始化
x2d=zeros(1,(T));
%x2_bar表示x2上面带杠杠
x2_bar=0;
for k=1:T
    if k==1
        x1(k)=x1_initial+tao*x2_initial;
        x2(k)=x2_initial+tao*(-x1_initial^2+u_initial);
        x2d(k)=x2_bar;
        x2_bar=(x1d(k)-0)/tao-k1*(x1(k)-x1d(k));
        u(k)=-(x1(k)-x1d(k))+x1(k)^2+(x2_bar-x2d(k))/tao-k2*(x2(k)-x2d(k));
    else
        x1(k)=x1(k-1)+tao*x2(k-1);
        x2(k)=x2(k-1)+tao*(-x1(k-1)^2+u(k-1));
        x2d(k)=x2_bar;
        x2_bar=(x1d(k)-x1d(k-1))/tao-k1*(x1(k)-x1d(k));
        u(k)=-(x1(k)-x1d(k))+x1(k)^2+(x2_bar-x2d(k))/tao-k2*(x2(k)-x2d(k));
    end
end
figure(1),hold on;
plot(x1,'b','linewidth',1.2);
plot(x1d,'r','linewidth',1.2);
xlabel('时间/s');
ylabel('信号幅值');
title('动态面控制效果');
legend('x1','x1d')
set(gca,'xticklabel',0:10:100);
hold off;

六、总结

通过一个非线性弹簧系统实例,深入探讨了控制理论的应用。首先描述了系统的动态方程,并提出了控制目标:通过改变输入力F,使小滑块按照指定轨迹移动。接着引入误差函数,并利用李雅普诺夫函数设计了反步控制器,通过反馈线性化将非线性系统转化为线性系统,并分析了系统的稳定性。

在Simulink仿真环节,构建了系统模型,并进行了动态方程的实现。通过设定不同的期望值,观察了系统对单目标值、多目标值以及波动和振荡效果的追踪能力。仿真结果显示,系统具有良好的追踪效果和稳定性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号