目录 | 自适应控制的一点笔记和看法 |
---|---|
1 | 【控制】自适应控制基本概念 |
2 | 【控制】自适应控制,对参考信号跟踪,对未知参数估计的小例子,带程序有结果图 |
3 | 【控制】自适应控制,模型参考自适应控制,公式推导,有程序有结果图 |
4 | 【控制】自适应控制,模型参考自适应控制,参考模型如何求取,有程序有图 |
在模型参考自适应控制框架中,可以人为构造一个所谓的“参考模型”,用以表征希望的闭环系统控制性能。而模型参考自适应控制则是希望求得一种动态调整的反馈控制律,使得系统的闭环控制性能与参考模型的性能可以保持一致。
控制流程如下:
假设存在一个单输入单输出的标量系统,其模型表达式为式 (1)
x ˙ = a x + b u (1) \dot{x} = a x + b u \tag{1} x˙=ax+bu(1)
其中 x x x 表示系统状态, u u u 表示系统控制输入, a , b a,b a,b 是常数。
关于参考模型,我们有
x ˙ r = a r x r + b r r (2) \dot{x}_r = a_r x_r + b_r r \tag{2} x˙r=arxr+brr(2)
其中 a r < 0 a_r<0 ar<0。因为只有 a r a_r ar 是负定的,系统存在平衡状态。即当外部指令 r = 0 r=0 r=0 时,参考模型能够自动收敛到平衡状态,这样的参考系统才有构建和研究的必要。
要求设计一个合理的控制信号 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) 往往是人为设计的。
首先看下当被控系统的参数 a a a 和 b b b 均已知时的常规解决办法。
参数 | 状态 |
---|---|
a a a | 系统真实参数,已知 |
b b b | 系统真实参数,已知 |
a r a_r ar | 参考模型系统参数,已知 |
b r b_r br | 参考模型系统参数,已知 |
u u u | 待求 |
令误差 e = x − x r e = x - x_r e=x−xr,则误差的动力学方程为
e ˙ = x ˙ − x ˙ r = a x + b u − ( a r x r + b r r ) = a x + b u − a r x r + a r x − a r x − b r r = a x + b u + a r e − a r x − b r r = a r e + ( a − a r ) x + b u − b r r (3) \begin{aligned} \dot{e} &= \dot{x} - \dot{x}_r \\ &= a x + b u - (a_r x_r + b_r r) \\ &= a x + b u - a_r x_r + a_r x - a_r x - b_r r \\ &= a x + b u + a_r e - a_r x - b_r r \\ &= a_r e + (a-a_r) x + b u - b_r r \end{aligned} \tag{3} e˙=x˙−x˙r=ax+bu−(arxr+brr)=ax+bu−arxr+arx−arx−brr=ax+bu+are−arx−brr=are+(a−ar)x+bu−brr(3)
根据一个事实,即针对一个满足微分方程 e ˙ = a ⋅ e \dot{e} = a \cdot e e˙=a⋅e 的变量 e e e,其中 a a a 是常数。当 a < 0 a<0 a<0 时,对变量 e e e 的任意初态,均有 e → 0 e \rightarrow 0 e→0。
那么回到我们的误差动力学方程式 (3)。若想让误差 e → 0 e \rightarrow 0 e→0,那么就需要式 (3) 右边的所有项小于0。同时在前文已经令 a r < 0 a_r < 0 ar<0,那么等式 (3) 右边除 a r e a_r e are 的其他项咱们也拼凑成小于0,则满足整体小于0。
拼凑形式可以为 e ˙ = a r e − K e \dot{e} = a_r e - K e e˙=are−Ke 的形式,其中要求 K > 0 K>0 K>0,整体还是小于 0 的。
因此,可以设计控制器为
( a − a r ) x + b u − b r r = − K e b u = ( a r − a ) x + b r r − K e u = a r − a b x + b r b r − K b e (4) \begin{aligned} (a-a_r) x + b u - b_r r &= -Ke \\ b u & = (a_r - a) x + b_r r - K e \\ u &= \frac{a_r-a}{b}x + \frac{b_r}{b} r - \frac{K}{b} e \end{aligned} \tag{4} (a−ar)x+bu−brrbuu=−Ke=(ar−a)x+brr−Ke=bar−ax+bbrr−bKe(4)
将控制器式 (4) 代入误差动力学方程 (3) 有
e ˙ = a r e + ( a − a r ) x + b u − b r r = a r e + ( a − a r ) x + b ( a r − a b x + b r b r − K b e ) − b r r = a r e − K e = ( a r − K ) e (5) \begin{aligned} \dot{e} &= a_r e + (a-a_r) x + b u - b_r r \\ &= a_r e + (a-a_r) x + b \left( \frac{a_r-a}{b}x + \frac{b_r}{b} r - \frac{K}{b} e \right) - b_r r \\ &= a_r e - K e \\ &= (a_r - K) e \end{aligned} \tag{5} e˙=are+(a−ar)x+bu−brr=are+(a−ar)x+b(bar−ax+bbrr−bKe)−brr=are−Ke=(ar−K)e(5)
在描述参考模型时,已经分析过参数 a r a_r ar 应该小于0。这里我们再要求 K > 0 K>0 K>0,那么就能保证 a r − K < 0 a_r - K < 0 ar−K<0。显而易见的是此时的误差动力学微分方程,无论误差的初态在哪里,最终都能收敛到 0。
clear
clc
%% Initial states
% controlled system
a = 1.6;
b = 0.5;
x(1,1) = rand;
u(1,1) = rand;
% reference model
a_r = -4;
b_r = 4;
x(1,1) = rand;
x_r(1,1) = 0;
r(1,1) = 0;
% adaptive parameters
K = 1;
%% 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
r(:,k+1) = 2;
else
r(:,k+1) = 0;
end
dot_x_r = a_r * x_r(:,k) + b_r * r(:,k+1);
x_r(:,k+1) = x_r(:,k) + dT * dot_x_r;
% calculate error
e = x(:,k) - x_r(:,k);
% calculate input
u(:,k+1) = (a_r-a)/b * x(:,k) + b_r/b * r(:,k) - K/b * e;
% update controlled system
dot_x = a * x(:,k) + b * u(:,k+1);
x(:,k+1) = x(:,k) + dT * dot_x;
end
%%
subplot(2,2,1)
plot(t,r, t,x_r, 'linewidth',1.5)
legend('reference signal $r$', 'reference model state $x_r$', 'interpreter','latex')
grid on
subplot(2,2,2)
plot(t,r, t,x_r, t,x, 'linewidth',1.5)
legend('reference signal $r$', 'reference model state $x_r$', 'controlled state $x$', 'interpreter','latex')
grid on
subplot(2,2,3)
plot(t,x_r-x, 'linewidth',1.5)
legend('error $e$', 'interpreter','latex')
grid on
subplot(2,2,4)
plot(t,u, 'linewidth',1.5)
legend('control $u$', 'interpreter','latex')
grid on
当然本节的重点不在于常规求解,而是需要自适应求解。也就是当被控系统的参数 a a a 或 b b b 未知时,如何使用自适应控制对其进行估计。
参数 | 状态 |
---|---|
a a a | 系统真实参数,但未知 |
b b b | 系统真实参数,已知 |
a r a_r ar | 参考模型系统参数,已知 |
b r b_r br | 参考模型系统参数,已知 |
a ^ \red{\hat{a}} a^ | 系统估计参数,待求 |
令误差 e = x − x r e = x - x_r e=x−xr,则误差的动力学方程为
e ˙ = x ˙ − x ˙ r = a x + b u − ( a r x r + b r r ) = a x + b u − a r x r + a r x − a r x − b r r = a x + b u + a r e − a r x − b r r = a r e + ( a − a r ) x + b u − b r r (6) \begin{aligned} \dot{e} &= \dot{x} - \dot{x}_r \\ &= a x + b u - (a_r x_r + b_r r) \\ &= a x + b u - a_r x_r + a_r x - a_r x - b_r r \\ &= a x + b u + a_r e - a_r x - b_r r \\ &= a_r e + (a-a_r) x + b u - b_r r \end{aligned} \tag{6} e˙=x˙−x˙r=ax+bu−(arxr+brr)=ax+bu−arxr+arx−arx−brr=ax+bu+are−arx−brr=are+(a−ar)x+bu−brr(6)
同样的,可以设计控制器为
u = a r − a ^ b x + b r b r − K b e (7) u = \frac{a_r-\red{\hat{a}}}{b}x + \frac{b_r}{b} r - \frac{K}{b} e \tag{7} u=bar−a^x+bbrr−bKe(7)
其中 a ^ \red{\hat{a}} a^ 表示 a a a 的估计值。因为我们对被控系统的实际参数并不知道,因此控制器也不可能获取到真实的 a a a,所以需要使用估计值来设计控制器。但是控制器的结构不会发生变换,还可常规的结构相同。
将控制器式 (7) 代入误差动力学方程 (6) 有
e ˙ = a r e + ( a − a r ) x + b u − b r r = a r e + ( a − a r ) x + b ( a r − a ^ b x + b r b r − K b e ) − b r r = a r e + ( a − a r ) x + ( a r − a ^ ) x + b r r − K e − b r r = a r e + ( a − a ^ ) x − K e (8) \begin{aligned} \dot{e} &= a_r e + (a-a_r) x + b u - b_r r \\ &= a_r e + (a-a_r) x + b \left( \frac{a_r-\red{\hat{a}}}{b}x + \frac{b_r}{b} r - \frac{K}{b} e \right) - b_r r \\ &= a_r e + (a-a_r) x + (a_r-\red{\hat{a}}) x + b_r r - K e - b_r r \\ &= a_r e + (a -\red{\hat{a}}) x - K e \end{aligned} \tag{8} e˙=are+(a−ar)x+bu−brr=are+(a−ar)x+b(bar−a^x+bbrr−bKe)−brr=are+(a−ar)x+(ar−a^)x+brr−Ke−brr=are+(a−a^)x−Ke(8)
令真实参数 a a a 与其估计值 a ^ \red{\hat{a}} a^ 的误差为
a ~ = a ^ − a (9) \begin{aligned} \tilde{a} &= \red{\hat{a}} - a \end{aligned} \tag{9} a~=a^−a(9)
我们将估计值 a ^ \red{\hat{a}} a^ 的和其与真实值的误差 a ~ \tilde{a} a~ 代入到式 (8) 中,这样做的目的是消除未知的真实参数 a a a,得到一个误差仅和估计值有关的式子。
e ˙ = a r e + ( a − a ^ ) x − K e = a r e − K e − a ~ x (10) \begin{aligned} \dot{e} &= a_r e + (a -\red{\hat{a}}) x - K e \\ &= a_r e - K e -\tilde{a} x \end{aligned} \tag{10} e˙=are+(a−a^)x−Ke=are−Ke−a~x(10)
定义李雅普诺夫函数为
V ( e , a ~ ) = 1 2 e 2 + 1 2 η a a ~ 2 (11) \begin{aligned} V(e, \tilde{a}) &= \frac{1}{2} e^2 + \frac{1}{2 \eta_a} \tilde{a}^2 \end{aligned} \tag{11} V(e,a~)=21e2+2ηa1a~2(11)
李雅普诺夫函数式 (11) 关于时间求导有
V ˙ ( e , a ~ ) = e e ˙ + 1 η a a ~ a ~ ˙ = e e ˙ + 1 η a a ~ ( a ^ ˙ − a ˙ ) = e e ˙ + 1 η a a ~ a ^ ˙ = e ( a r e − K e − a ~ x ) + 1 η a a ~ a ^ ˙ = a r e 2 − K e 2 − a ~ x e + 1 η a a ~ a ^ ˙ = ( a r − K ) e 2 + a ~ ( 1 η a a ^ ˙ − x e ) (12) \begin{aligned} \dot{V}(e, \tilde{a}) &= e \dot{e} + \frac{1}{\eta_a} \tilde{a} \dot{\tilde{a}} \\ &= e \dot{e} + \frac{1}{\eta_a} \tilde{a} (\dot{\red{\hat{a}}} - \dot{a}) \\ &= e \dot{e} + \frac{1}{\eta_a} \tilde{a} \dot{\red{\hat{a}}} \\ &= e (a_r e - K e -\tilde{a} x ) + \frac{1}{\eta_a} \tilde{a} \dot{\red{\hat{a}}} \\ &= a_r e^2 - K e^2 -\tilde{a} x e + \frac{1}{\eta_a} \tilde{a} \dot{\red{\hat{a}}} \\ &= ( a_r - K ) e^2 + \tilde{a} ( \frac{1}{\eta_a} \dot{\red{\hat{a}}} - x e ) \end{aligned} \tag{12} V˙(e,a~)=ee˙+ηa1a~a~˙=ee˙+ηa1a~(a^˙−a˙)=ee˙+ηa1a~a^˙=e(are−Ke−a~x)+ηa1a~a^˙=are2−Ke2−a~xe+ηa1a~a^˙=(ar−K)e2+a~(ηa1a^˙−xe)(12)
在描述参考模型时,已经分析过参数 a r a_r ar 应该小于0。这里我们再要求 K > 0 K>0 K>0,那么就能保证 a r − K < 0 a_r - K < 0 ar−K<0。
关于等式 (12) 右侧的第二项,我们就可以设计自适应律为
( 1 η a a ^ ˙ − x e ) = 0 1 η a a ^ ˙ = x e a ^ ˙ = η a ⋅ x ⋅ e (13) \begin{aligned} ( \frac{1}{\eta_a} \dot{\red{\hat{a}}} - x e ) &= 0 \\ \frac{1}{\eta_a} \dot{\red{\hat{a}}} &= x e \\ \dot{\red{\hat{a}}} &= \eta_a \cdot x \cdot e \end{aligned} \tag{13} (ηa1a^˙−xe)ηa1a^˙a^˙=0=xe=ηa⋅x⋅e(13)
显而易见的是此时的误差动力学微分方程,无论初态在哪里,最终都能收敛到0。
clear
clc
%% Initial states
% controlled system
a = 1.6;
b = 0.5;
x(1,1) = rand;
u(1,1) = rand;
% reference model
a_r = -4;
b_r = 4;
x(1,1) = rand;
x_r(1,1) = 0;
r(1,1) = 0;
% adaptive parameters
K = 1;
eta_a = 0.4;
hat_a(1,1) = rand;
%% 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
r(:,k+1) = 2;
else
r(:,k+1) = 0;
end
dot_x_r = a_r * x_r(:,k) + b_r * r(:,k+1);
x_r(:,k+1) = x_r(:,k) + dT * dot_x_r;
% calculate error
e = x(:,k) - x_r(:,k);
% calculate adaptive parameters
dot_hat_a = -eta_a * x(:,k) * e;
hat_a(:,k+1) = hat_a(:,k) + dT * dot_hat_a;
% calculate input
u(:,k+1) = (a_r-hat_a(:,k+1))/b * x(:,k) + b_r/b * r(:,k) - K/b * e;
% update controlled system
dot_x = hat_a(:,k+1) * x(:,k) + b * u(:,k+1);
x(:,k+1) = x(:,k) + dT * dot_x;
end
%%
subplot(2,2,1)
plot(t,r, t,x_r, 'linewidth',1.5)
legend('reference signal $r$', 'reference model state $x_r$', 'interpreter','latex')
grid on
subplot(2,2,2)
plot(t,r, t,x_r, t,x, 'linewidth',1.5)
legend('reference signal $r$', 'reference model state $x_r$', 'controlled state $x$', '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
当然本节的重点不在于常规求解,而是需要自适应求解。也就是当被控系统的参数 a a a 或 b b b 未知时,如何使用自适应控制对其进行估计。
参数 | 状态 |
---|---|
a a a | 系统真实参数,已知 |
b b b | 系统真实参数,但未知 |
a r a_r ar | 参考模型系统参数,已知 |
b r b_r br | 参考模型系统参数,已知 |
b ^ \red{\hat{b}} b^ | 系统估计参数,待求 |
令误差 e = x − x r e = x - x_r e=x−xr,则误差的动力学方程为
e ˙ = a r e + ( a − a r ) x + b u − b r r (14) \begin{aligned} \dot{e} &= a_r e + (a-a_r) x + b u - b_r r \end{aligned} \tag{14} e˙=are+(a−ar)x+bu−brr(14)
同样的,可以设计控制器为
u = a r − a b ^ x + b r b ^ r − K b ^ e (15) u = \frac{a_r-a}{\red{\hat{b}}}x + \frac{b_r}{\red{\hat{b}}} r - \frac{K}{\red{\hat{b}}} e \tag{15} u=b^ar−ax+b^brr−b^Ke(15)
其中 b ^ \red{\hat{b}} b^ 表示 b b b 的估计值。因为我们对被控系统的实际参数并不知道,因此控制器也不可能获取到真实的 b b b,所以需要使用估计值来设计控制器。但是控制器的结构不会发生变换,还可常规的结构相同。
将控制器式 (15) 代入误差动力学方程 (14) 有
e ˙ = a r e + ( a − a r ) x + b u − b r r = a r e + ( a − a r ) x + b ( a r − a b ^ x + b r b ^ r − K b ^ e ) − b r r = a r e + a x − a r x + b a r b ^ x − b a b ^ x + b b r b ^ r − b K b ^ e − b r r (16) \begin{aligned} \dot{e} &= a_r e + (a-a_r) x + b u - b_r r \\ &= a_r e + (a-a_r) x + b \left( \frac{a_r-a}{\red{\hat{b}}}x + \frac{b_r}{\red{\hat{b}}} r - \frac{K}{\red{\hat{b}}} e \right) - b_r r \\ &= a_r e + a x - a_r x + \frac{b a_r}{\red{\hat{b}}} x - \frac{b a}{\red{\hat{b}}} x + \frac{b b_r}{\red{\hat{b}}} r - \frac{b K}{\red{\hat{b}}} e - b_r r \end{aligned} \tag{16} e˙=are+(a−ar)x+bu−brr=are+(a−ar)x+b(b^ar−ax+b^brr−b^Ke)−brr=are+ax−arx+b^barx−b^bax+b^bbrr−b^bKe−brr(16)
令真实参数 b b b 与其估计值 b ^ \red{\hat{b}} b^ 的误差为
b ~ = b ^ − b (17) \begin{aligned} \tilde{b} &= \red{\hat{b}} - b \end{aligned} \tag{17} b~=b^−b(17)
我们将估计值 b ^ \red{\hat{b}} b^ 的和其与真实值的误差 b ~ \tilde{b} b~ 代入到式 (16) 中,这样做的目的是消除未知的真实参数 b b b,得到一个误差仅和估计值有关的式子。
e ˙ = a r e + a x − a r x + b a r b ^ x − b a b ^ x + b b r b ^ r − b K b ^ e − b r r = a r e + a x − a r x − b r r + ( b ^ − b ~ ) a r b ^ x − ( b ^ − b ~ ) a b ^ x + ( b ^ − b ~ ) b r b ^ r − ( b ^ − b ~ ) K b ^ e = a r e + a x − a r x − b r r + a r x − b ~ a r b ^ x − a x + b ~ a b ^ x + b r r − b ~ b r b ^ r − K e + b ~ K b ^ e = a r e − K e − b ~ a r b ^ x + b ~ a b ^ x − b ~ b r b ^ r + b ~ K b ^ e = a r e − K e + − b ~ a r x + b ~ a x − b ~ b r r + b ~ K e b ^ (18) \begin{aligned} \dot{e} &= a_r e + a x - a_r x + \frac{b a_r}{\red{\hat{b}}} x - \frac{b a}{\red{\hat{b}}} x + \frac{b b_r}{\red{\hat{b}}} r - \frac{b K}{\red{\hat{b}}} e - b_r r \\ &= a_r e + a x - a_r x - b_r r + \frac{(\red{\hat{b}}-\tilde{b}) a_r}{\red{\hat{b}}} x - \frac{(\red{\hat{b}}-\tilde{b}) a}{\red{\hat{b}}} x + \frac{(\red{\hat{b}}-\tilde{b}) b_r}{\red{\hat{b}}} r - \frac{(\red{\hat{b}}-\tilde{b}) K}{\red{\hat{b}}} e \\ &= a_r e + a x - a_r x - b_r r + a_r x - \frac{\tilde{b} a_r}{\red{\hat{b}}} x - ax + \frac{\tilde{b} a}{\red{\hat{b}}} x + b_r r - \frac{\tilde{b} b_r}{\red{\hat{b}}} r - Ke + \frac{\tilde{b} K}{\red{\hat{b}}} e \\ &= a_r e - Ke - \frac{\tilde{b} a_r}{\red{\hat{b}}} x + \frac{\tilde{b} a}{\red{\hat{b}}} x - \frac{\tilde{b} b_r}{\red{\hat{b}}} r + \frac{\tilde{b} K}{\red{\hat{b}}} e \\ &= a_r e - Ke + \frac{- \tilde{b} a_r x + \tilde{b} a x - \tilde{b} b_r r + \tilde{b} K e }{\red{\hat{b}}} \end{aligned} \tag{18} e˙=are+ax−arx+b^barx−b^bax+b^bbrr−b^bKe−brr=are+ax−arx−brr+b^(b^−b~)arx−b^(b^−b~)ax+b^(b^−b~)brr−b^(b^−b~)Ke=are+ax−arx−brr+arx−b^b~arx−ax+b^b~ax+brr−b^b~brr−Ke+b^b~Ke=are−Ke−b^b~arx+b^b~ax−b^b~brr+b^b~Ke=are−Ke+b^−b~arx+b~ax−b~brr+b~Ke(18)
定义李雅普诺夫函数为
V ( e , b ~ ) = 1 2 e 2 + 1 2 η b b ~ 2 (19) \begin{aligned} V(e, \tilde{b}) &= \frac{1}{2} e^2 + \frac{1}{2 \eta_b} \tilde{b}^2 \end{aligned} \tag{19} V(e,b~)=21e2+2ηb1b~2(19)
李雅普诺夫函数式 (19) 关于时间求导有
V ˙ ( e , b ~ ) = e e ˙ + 1 η b b ~ b ~ ˙ = e e ˙ + 1 η b b ~ ( b ^ ˙ − b ˙ ) = e e ˙ + 1 η b b ~ b ^ ˙ = e ( a r e − K e + − b ~ a r x + b ~ a x − b ~ b r r + b ~ K e b ^ ) + 1 η b b ~ b ^ ˙ = a r e 2 − K e 2 + − b ~ a r x e + b ~ a x e − b ~ b r r e + b ~ K e 2 b ^ + 1 η b b ~ b ^ ˙ = a r e 2 − K e 2 + b ~ ( − a r x e + a x e − b r r e + K e 2 b ^ + 1 η b b ^ ˙ ) (20) \begin{aligned} \dot{V}(e, \tilde{b}) &= e \dot{e} + \frac{1}{\eta_b} \tilde{b} \dot{\tilde{b}} \\ &= e \dot{e} + \frac{1}{\eta_b} \tilde{b} (\dot{\red{\hat{b}}} - \dot{b}) \\ &= e \dot{e} + \frac{1}{\eta_b} \tilde{b} \dot{\red{\hat{b}}} \\ &= e \left( a_r e - Ke + \frac{- \tilde{b} a_r x + \tilde{b} a x - \tilde{b} b_r r + \tilde{b} K e }{\red{\hat{b}}} \right) + \frac{1}{\eta_b} \tilde{b} \dot{\red{\hat{b}}} \\ &= a_r e^2 - Ke^2 + \frac{- \tilde{b} a_r x e + \tilde{b} a x e - \tilde{b} b_r r e + \tilde{b} K e^2 }{\red{\hat{b}}} + \frac{1}{\eta_b} \tilde{b} \dot{\red{\hat{b}}} \\ &= a_r e^2 - Ke^2 + \tilde{b} \left( \frac{- a_r x e + a x e - b_r r e + K e^2 }{\red{\hat{b}}} + \frac{1}{\eta_b} \dot{\red{\hat{b}}} \right) \end{aligned} \tag{20} V˙(e,b~)=ee˙+ηb1b~b~˙=ee˙+ηb1b~(b^˙−b˙)=ee˙+ηb1b~b^˙=e(are−Ke+b^−b~arx+b~ax−b~brr+b~Ke)+ηb1b~b^˙=are2−Ke2+b^−b~arxe+b~axe−b~brre+b~Ke2+ηb1b~b^˙=are2−Ke2+b~(b^−arxe+axe−brre+Ke2+ηb1b^˙)(20)
在描述参考模型时,已经分析过参数 a r a_r ar 应该小于0。这里我们再要求 K > 0 K>0 K>0,那么就能保证 a r − K < 0 a_r - K < 0 ar−K<0。
关于等式 (12) 右侧的第二项,我们就可以设计自适应律为
− a r x e + a x e − b r r e + K e 2 b ^ + 1 η b b ^ ˙ = 0 1 η b b ^ ˙ = a r x e − a x e + b r r e − K e 2 b ^ b ^ ˙ = η b a r x e − a x e + b r r e − K e 2 b ^ (13) \begin{aligned} \frac{- a_r x e + a x e - b_r r e + K e^2 }{\red{\hat{b}}} + \frac{1}{\eta_b} \dot{\red{\hat{b}}} &= 0 \\ \frac{1}{\eta_b} \dot{\red{\hat{b}}} &= \frac{a_r x e - a x e + b_r r e - K e^2 }{\red{\hat{b}}} \\ \dot{\red{\hat{b}}} &= \eta_b \frac{a_r x e - a x e + b_r r e - K e^2 }{\red{\hat{b}}} \end{aligned} \tag{13} b^−arxe+axe−brre+Ke2+ηb1b^˙ηb1b^˙b^˙=0=b^arxe−axe+brre−Ke2=ηbb^arxe−axe+brre−Ke2(13)
显而易见的是此时的误差动力学微分方程,无论初态在哪里,最终都能收敛到0。
clear
clc
%% Initial states
% controlled system
a = 1.6;
b = 0.5;
x(1,1) = rand;
u(1,1) = rand;
% reference model
a_r = -4;
b_r = 4;
x(1,1) = rand;
x_r(1,1) = 0;
r(1,1) = 0;
% adaptive parameters
K = 1;
eta_b = 1;
hat_b(1,1) = rand;
%% 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
r(:,k+1) = 2;
else
r(:,k+1) = 0;
end
dot_x_r = a_r * x_r(:,k) + b_r * r(:,k+1);
x_r(:,k+1) = x_r(:,k) + dT * dot_x_r;
% calculate error
e = x(:,k) - x_r(:,k);
% calculate adaptive parameters
dot_hat_b = eta_b * (a_r*x(:,k)*e - a*x(:,k)*e + b_r*r(:,k)*e - K*e^2) / hat_b(:,k);
hat_b(:,k+1) = hat_b(:,k) + dT * dot_hat_b;
% calculate input
u(:,k+1) = (a_r-a)/hat_b(:,k+1) * x(:,k) + b_r/hat_b(:,k+1) * r(:,k) - K/hat_b(:,k+1) * e;
% update controlled system
dot_x = a * x(:,k) + hat_b(:,k+1) * u(:,k+1);
x(:,k+1) = x(:,k) + dT * dot_x;
end
%%
subplot(2,2,1)
plot(t,r, t,x_r, 'linewidth',1.5)
legend('reference signal $r$', 'reference model state $x_r$', 'interpreter','latex')
grid on
subplot(2,2,2)
plot(t,r, t,x_r, t,x, 'linewidth',1.5)
legend('reference signal $r$', 'reference model state $x_r$', 'controlled state $x$', '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_b, t,b*ones(times+1,1), 'linewidth',1.5)
legend('estimator $\hat{b}$', 'unknown param $b$', 'interpreter','latex')
grid on
被控系统 | x ˙ = a x + b u \dot{x} = ax+bu x˙=ax+bu |
参考模型 | x ˙ r = a r x r + b r r \dot{x}_r = a_r x_r+b_r r x˙r=arxr+brr |
1. 参数 a , b a,b a,b 均已知 --> 控制器 | u = a r − a b x + b r b r − K b e u = \frac{a_r-a}{b}x + \frac{b_r}{b} r - \frac{K}{b} e u=bar−ax+bbrr−bKe |
2.1. 参数 a a a 未知, b b b 已知 --> 控制器 | u = a r − a ^ b x + b r b r − K b e u = \frac{a_r-\red{\hat{a}}}{b}x + \frac{b_r}{b} r - \frac{K}{b} e u=bar−a^x+bbrr−bKe |
2.2. 参数 a a a 未知, b b b 已知 --> 参数 a ^ \red{\hat{a}} a^ 自适应更新律 | a ^ ˙ = η a ⋅ x ⋅ e \dot{\red{\hat{a}}} = \eta_a \cdot x \cdot e a^˙=ηa⋅x⋅e |
3.1. 参数 a a a 已知, b b b 未知 --> 控制器 | u = a r − a b ^ x + b r b ^ r − K b ^ e u = \frac{a_r-a}{\red{\hat{b}}}x + \frac{b_r}{\red{\hat{b}}} r - \frac{K}{\red{\hat{b}}} e u=b^ar−ax+b^brr−b^Ke |
3.2. 参数 a a a 已知, b b b 未知 --> 参数 b ^ \red{\hat{b}} b^ 自适应更新律 | b ^ ˙ = η b a r x e − a x e + b r r e − K e 2 b ^ \dot{\red{\hat{b}}} = \eta_b \frac{a_r x e - a x e + b_r r e - K e^2 }{\red{\hat{b}}} b^˙=ηbb^arxe−axe+brre−Ke2 |