反步控制(Backstepping)原理与应用实例解析
反步控制(Backstepping)原理与应用实例解析
反步控制(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仿真环节,构建了系统模型,并进行了动态方程的实现。通过设定不同的期望值,观察了系统对单目标值、多目标值以及波动和振荡效果的追踪能力。仿真结果显示,系统具有良好的追踪效果和稳定性。