目录 | 自适应控制的一点笔记和看法 |
---|---|
1 | 【控制】自适应控制基本概念 |
2 | 【控制】自适应控制,对参考信号跟踪,对未知参数估计的小例子,带程序有结果图 |
3 | 【控制】自适应控制,模型参考自适应控制,公式推导,有程序有结果图 |
4 | 【控制】自适应控制,模型参考自适应控制,参考模型如何求取,有程序有图 |
自适应控制所讨论的对象,一般是指对象的结构已知,仅仅是参数未知,而且采用的控制方法仍是基于数学模型的方法。
但实践中我们还会遇到结构和参数都未知的对象,比如一些运行机理特别复杂,目前尚未被人们充分理解的对象,不可能建立有效的数学模型,因而无法沿用基于数学模型的方法解决其控制问题,这时需要借助人工智能学科,也就是智能控制。
自适应控制与常规的控制与最优控制一样,是一种基于数学模型的控制方法。自适应控制所依据的关于模型的和扰动的先验知识比较少,需要在系统的运行过程中不断提取有关模型的信息,使模型愈来愈准确。
常规的反馈控制具有一定的鲁棒性,但是由于控制器参数是固定的,当不确定性很大时,系统的性能会大幅下降,甚至失稳。因此,从某种程度上说自适应控制也可以看做是基于自动调节反馈增益的反馈控制。
存在一个非线性被控对象如式 (1)
x ˙ = a x 2 + u (1) \begin{aligned} \dot{x} = a x^2 + u \end{aligned} \tag{1} x˙=ax2+u(1)
其中 x x x 是系统状态, a a a 是未知参数, u u u 是控制输入。
参数 | 状态 |
---|---|
a a a | 被控系统真实参数,但未知 |
a ^ \red{\hat{a}} a^ | 被控系统估计参数,待估计 |
要求设计一个合理的控制信号 u u u,使得系统状态 x ( t ) x(t) x(t) 跟踪上期望信号 x r ( t ) x_r(t) xr(t),假设 x r ( t ) x_r(t) xr(t) 是解析并有界的,且其微分 x ˙ r ( t ) \dot{x}_r(t) x˙r(t) 也是连续且有界的。这个假设在实际中是可以满足的,因为被跟踪信号 x r ( t ) x_r(t) xr(t) 往往是人为设计的。
对于现代控制理论,设计控制信号实际上是设计误差动力学系统,并令其收敛到零。
令误差 e = x − x r e = x - x_r e=x−xr,则误差的动力学方程为
e ˙ = x ˙ − x ˙ r = a x 2 + u − x ˙ r (2) \begin{aligned} \dot{e} &= \dot{x} - \dot{x}_r \\ &= ax^2 + u - \dot{x}_r \end{aligned} \tag{2} e˙=x˙−x˙r=ax2+u−x˙r(2)
由于原系统是满足匹配条件的,即控制信号 u u u 和未知参数 a a a 处于一个方程中,那么根据等价确定性原则(certainty equivalence, CE)可以设计控制器为
u = − a ^ x 2 + x ˙ r − K e (3) \begin{aligned} u &= -\red{\hat{a}} x^2 + \dot{x}_r - K e \end{aligned} \tag{3} u=−a^x2+x˙r−Ke(3)
其中 a ^ \red{\hat{a}} a^ 是未知参数 a a a 的估计值, K > 0 K>0 K>0 是控制器增益参数。
接下来更新未知参数的估计值 a ^ \hat{a} a^,也就是设计 a ^ \hat{a} a^ 的更新律。我们基于李雅普诺夫稳定性定理来设计。
假设未知参数的估计误差为 a ~ = a ^ − a \tilde{a} = \hat{a} - a a~=a^−a,将其代入到误差动力学方程式(2)有
e ˙ = a x 2 + u − x ˙ r = a x 2 + ( − a ^ x 2 + x ˙ r − K e ) − x ˙ r = − a ~ x 2 − K e (4) \begin{aligned} \dot{e} &= ax^2 + u - \dot{x}_r \\ &= ax^2 + \left( -\red{\hat{a}} x^2 + \dot{x}_r - K e \right) - \dot{x}_r \\ &= -\tilde{a}x^2 - K e \end{aligned} \tag{4} e˙=ax2+u−x˙r=ax2+(−a^x2+x˙r−Ke)−x˙r=−a~x2−Ke(4)
定义李雅普诺夫函数
V ( e , a ~ ) = 1 2 e 2 + 1 2 η a ~ 2 ≥ 0 (5) \begin{aligned} V(e, \tilde{a}) &= \frac{1}{2} e^2 + \frac{1}{2 \eta} \tilde{a}^2 \ge 0 \end{aligned} \tag{5} V(e,a~)=21e2+2η1a~2≥0(5)
李雅普诺夫函数式 (5) 关于时间求导有
V ˙ ( e , a ~ ) = e e ˙ + 1 η a ~ a ~ ˙ = e e ˙ + 1 η a ~ ( a ^ ˙ − a ˙ ) = e ( − a ~ x 2 − K e ) + 1 η a ~ a ^ ˙ = − K e 2 − e x 2 a ~ + 1 η a ~ a ^ ˙ = − K e 2 + a ~ ( − e x 2 + 1 η a ^ ˙ ) (6) \begin{aligned} \dot{V}(e, \tilde{a}) &= e \dot{e} + \frac{1}{\eta} \tilde{a} \dot{\tilde{a}} \\ &= e \dot{e} + \frac{1}{\eta} \tilde{a} (\dot{\red{\hat{a}}} - \dot{a}) \\ &= e(-\tilde{a}x^2 - K e) + \frac{1}{\eta} \tilde{a} \dot{\red{\hat{a}}} \\ &= -K e^2 - e x^2 \tilde{a} + \frac{1}{\eta} \tilde{a} \dot{\red{\hat{a}}} \\ &= -K e^2 + \tilde{a} (-e x^2 + \frac{1}{\eta} \dot{\red{\hat{a}}}) \end{aligned} \tag{6} V˙(e,a~)=ee˙+η1a~a~˙=ee˙+η1a~(a^˙−a˙)=e(−a~x2−Ke)+η1a~a^˙=−Ke2−ex2a~+η1a~a^˙=−Ke2+a~(−ex2+η1a^˙)(6)
为了系统能够稳定,根据李雅普诺夫稳定性定理,我们需要 V ˙ ≤ 0 \dot{V} \le 0 V˙≤0。因此,设计 a ^ \hat{a} a^ 的更新律可为
− e x 2 + 1 η a ^ ˙ = 0 1 η a ^ ˙ = e x 2 a ^ ˙ = η ⋅ e ⋅ x 2 (7) \begin{aligned} -e x^2 + \frac{1}{\eta} \dot{\red{\hat{a}}} &= 0 \\ \frac{1}{\eta} \dot{\red{\hat{a}}} &= e x^2 \\ \dot{\hat{a}} &= \eta \cdot e \cdot x^2 \end{aligned} \tag{7} −ex2+η1a^˙η1a^˙a^˙=0=ex2=η⋅e⋅x2(7)
代入式 (6) 有
V ˙ ( e , a ~ ) = − K e 2 + a ~ ( − e x 2 + 1 η a ^ ˙ ) = − K e 2 + a ~ ( − e x 2 + 1 η ( η ⋅ e ⋅ x 2 ) ) = − K e 2 + a ~ ( − e x 2 + e x 2 ) = − K e 2 ≤ 0 (8) \begin{aligned} \dot{V}(e, \tilde{a}) &= -K e^2 + \tilde{a} (-e x^2 + \frac{1}{\eta} \dot{\red{\hat{a}}}) \\ &= -K e^2 + \tilde{a} (-e x^2 + \frac{1}{\eta} (\eta \cdot e \cdot x^2)) \\ &= -K e^2 + \tilde{a} (-e x^2 + e x^2) \\ &= -K e^2 \le 0 \end{aligned} \tag{8} V˙(e,a~)=−Ke2+a~(−ex2+η1a^˙)=−Ke2+a~(−ex2+η1(η⋅e⋅x2))=−Ke2+a~(−ex2+ex2)=−Ke2≤0(8)
此时李雅普诺夫函数关于时间的导数 V ˙ ≤ 0 \dot{V} \le 0 V˙≤0,即误差 e e e 是渐进稳定的。
⚠️注意,上述这种自适应律设计的弊端就是误差 e e e 渐进稳定,但是未知参数的估计误差 a ^ − a \hat{a}-a a^−a 未做严格限制,这一点也可以通过以下仿真看出来。
假设被控系统的未知参数 a = 1.6 a = 1.6 a=1.6,
被控系统的初始状态随机 x ( 0 ) = rand x(0) = \text{rand} x(0)=rand,
被控系统的初始控制输入随机 u ( 0 ) = rand u(0) = \text{rand} u(0)=rand。
参考系统的初始状态随机 x r ( 0 ) = rand x_r(0) = \text{rand} xr(0)=rand。
未知参数的估计值随机 a ^ ( 0 ) = rand \hat{a}(0) = \text{rand} a^(0)=rand。
关于自适应控制律中的参数 η \eta η 和控制器中的参数 K K K,我们先假设均为1看下效果。
结果就是有跟踪,但不多。
修改了参数后,收敛效果就好多了。
我们还可以尝试下将未知参数 a a a 修改下,看看跟踪效果。
即然未知参数 a a a 变了,那么参数也要发生变化,以便更好跟踪。随意调了下参数 η = − 0.3 \eta=-0.3 η=−0.3,效果就好了很多。
更多效果请自行修改程序中的参数实验吧,程序代码已经放出来了。
clear
clc
%% Initial states
% controlled system
a = -1.6;
x(1,1) = rand;
u(1,1) = rand;
% reference signal
x_r(1,1) = rand;
% adaptive parameters
hat_a(1,1) = rand;
eta = -0.3;
K = 6;
%% Time parameters
tBegin = 0;
tFinal = 50;
dT = 0.1;
times = (tFinal-tBegin)/dT;
t(1,1) = tBegin;
% Iteration
for k=1:times
% record time
t(:,k+1) = t(:,k) + dT;
% update x_r
if mod(t(:,k),4) >= 2
% non-control
x_r(:,k+1) = 2;
else
x_r(:,k+1) = 0;
end
% calculate error
e = x(:,k) - x_r(:,k);
% calculate adaptive parameters
dot_hat_a = eta * e * x(:,k)^2;
hat_a(:,k+1) = hat_a(:,k) + dT * dot_hat_a;
% calculate input
u(:,k+1) = -hat_a(:,k+1) * x(:,k)^2 + 0 - K * e;
% update controlled system
dot_x = hat_a(:,k+1) * x(:,k)^2 + u(:,k+1);
x(:,k+1) = x(:,k) + dT * dot_x;
end
%%
subplot(2,2,1)
plot(t,x_r, t,x, 'linewidth',1.5)
legend('reference signal $x_r$', 'controlled state $x$', 'interpreter','latex')
grid on
subplot(2,2,2)
plot(t,x_r-x, 'linewidth',1.5)
legend('error $e$', 'interpreter','latex')
grid on
subplot(2,2,3)
plot(t,u, 'linewidth',1.5)
legend('control $u$', 'interpreter','latex')
grid on
subplot(2,2,4)
plot(t,hat_a, t,a*ones(times+1,1), 'linewidth',1.5)
legend('estimator $\hat{a}$', 'unknown param $a$', 'interpreter','latex')
grid on