【控制】自适应控制,模型参考自适应控制,公式推导,有程序有结果图

目录 自适应控制的一点笔记和看法
1 【控制】自适应控制基本概念
2 【控制】自适应控制,对参考信号跟踪,对未知参数估计的小例子,带程序有结果图
3 【控制】自适应控制,模型参考自适应控制,公式推导,有程序有结果图
4 【控制】自适应控制,模型参考自适应控制,参考模型如何求取,有程序有图

文章目录

  • 1 问题描述
    • 1.1 被控对象
    • 1.2 参考模型
    • 1.3 控制目标
  • 2 常规解决过程
    • 2.1 误差动力学系统
    • 2.2 控制器设计
    • 2.3 实验验证
  • 3 自适应解决过程,针对参数 a a a 未知
    • 3.1 误差动力学系统
    • 3.2 控制器设计
    • 3.3 更新估计参数
    • 3.4 实验验证
  • 4 自适应解决过程,针对参数 b b b 未知
    • 4.1 误差动力学系统
    • 4.2 控制器设计
    • 4.3 更新估计参数
    • 4.4 实验验证
  • 5 总结
  • Ref.

在模型参考自适应控制框架中,可以人为构造一个所谓的“参考模型”,用以表征希望的闭环系统控制性能。而模型参考自适应控制则是希望求得一种动态调整的反馈控制律,使得系统的闭环控制性能与参考模型的性能可以保持一致。

控制流程如下:

  1. 外部指令 r r r 同时给到参考模型 reference model 和被控对象 plant 的控制器 controller,此时控制器的参数是一个初始的参数,控制器根据这个初始的参数给出一个控制量 u u u 输入到被控对象,被控对象作出对应的响应 x x x,同时参考模型也根据指令作响应 x r x_r xr
  2. 由于被控对象存在不确定性,所以其输出与参考模型存在一定的误差 e = x − x r e = x-x_r e=xxr,这个误差会输入到自适应律中,而自适应律正是根据这个误差来调整控制器参数的;
  3. 自适应律更新控制参数之后会传递给控制器,在下一个采样时刻,控制器用新的参数计算和新的状态反馈、指令计算控制量,并输出给被控对象;
  4. 整个参数更新过程一直循环,知道被控对象的输出与参考模型一致,即两者误差为零的时候停止更新。

1 问题描述

1.1 被控对象

假设存在一个单输入单输出的标量系统,其模型表达式为式 (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 是常数。

1.2 参考模型

关于参考模型,我们有
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 时,参考模型能够自动收敛到平衡状态,这样的参考系统才有构建和研究的必要。

1.3 控制目标

要求设计一个合理的控制信号 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) 往往是人为设计的。

2 常规解决过程

首先看下当被控系统的参数 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 待求

2.1 误差动力学系统

令误差 e = x − x r e = x - x_r e=xxr,则误差的动力学方程为

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+buarxr+arxarxbrr=ax+bu+arearxbrr=are+(aar)x+bubrr(3)

2.2 控制器设计

根据一个事实,即针对一个满足微分方程 e ˙ = a ⋅ e \dot{e} = a \cdot e e˙=ae 的变量 e e e,其中 a a a 是常数。当 a < 0 a<0 a<0 时,对变量 e e e 的任意初态,均有 e → 0 e \rightarrow 0 e0

那么回到我们的误差动力学方程式 (3)。若想让误差 e → 0 e \rightarrow 0 e0,那么就需要式 (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˙=areKe 的形式,其中要求 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} (aar)x+bubrrbuu=Ke=(ara)x+brrKe=barax+bbrrbKe(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+(aar)x+bubrr=are+(aar)x+b(barax+bbrrbKe)brr=areKe=(arK)e(5)

在描述参考模型时,已经分析过参数 a r a_r ar 应该小于0。这里我们再要求 K > 0 K>0 K>0,那么就能保证 a r − K < 0 a_r - K < 0 arK<0。显而易见的是此时的误差动力学微分方程,无论误差的初态在哪里,最终都能收敛到 0。

2.3 实验验证

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

3 自适应解决过程,针对参数 a a a 未知

当然本节的重点不在于常规求解,而是需要自适应求解。也就是当被控系统的参数 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^ 系统估计参数,待求

3.1 误差动力学系统

令误差 e = x − x r e = x - x_r e=xxr,则误差的动力学方程为

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+buarxr+arxarxbrr=ax+bu+arearxbrr=are+(aar)x+bubrr(6)

3.2 控制器设计

同样的,可以设计控制器为
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=bara^x+bbrrbKe(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+(aar)x+bubrr=are+(aar)x+b(bara^x+bbrrbKe)brr=are+(aar)x+(ara^)x+brrKebrr=are+(aa^)xKe(8)


3.3 更新估计参数

令真实参数 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+(aa^)xKe=areKea~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(areKea~x)+ηa1a~a^˙=are2Ke2a~xe+ηa1a~a^˙=(arK)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 arK<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=ηaxe(13)

显而易见的是此时的误差动力学微分方程,无论初态在哪里,最终都能收敛到0。

3.4 实验验证

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

4 自适应解决过程,针对参数 b b b 未知

当然本节的重点不在于常规求解,而是需要自适应求解。也就是当被控系统的参数 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^ 系统估计参数,待求

4.1 误差动力学系统

令误差 e = x − x r e = x - x_r e=xxr,则误差的动力学方程为

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+(aar)x+bubrr(14)

4.2 控制器设计

同样的,可以设计控制器为
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^arax+b^brrb^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+(aar)x+bubrr=are+(aar)x+b(b^arax+b^brrb^Ke)brr=are+axarx+b^barxb^bax+b^bbrrb^bKebrr(16)


4.3 更新估计参数

令真实参数 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+axarx+b^barxb^bax+b^bbrrb^bKebrr=are+axarxbrr+b^(b^b~)arxb^(b^b~)ax+b^(b^b~)brrb^(b^b~)Ke=are+axarxbrr+arxb^b~arxax+b^b~ax+brrb^b~brrKe+b^b~Ke=areKeb^b~arx+b^b~axb^b~brr+b^b~Ke=areKe+b^b~arx+b~axb~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(areKe+b^b~arx+b~axb~brr+b~Ke)+ηb1b~b^˙=are2Ke2+b^b~arxe+b~axeb~brre+b~Ke2+ηb1b~b^˙=are2Ke2+b~(b^arxe+axebrre+Ke2+ηb1b^˙)(20)

在描述参考模型时,已经分析过参数 a r a_r ar 应该小于0。这里我们再要求 K > 0 K>0 K>0,那么就能保证 a r − K < 0 a_r - K < 0 arK<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+axebrre+Ke2+ηb1b^˙ηb1b^˙b^˙=0=b^arxeaxe+brreKe2=ηbb^arxeaxe+brreKe2(13)

显而易见的是此时的误差动力学微分方程,无论初态在哪里,最终都能收敛到0。

4.4 实验验证

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

5 总结

被控系统 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=barax+bbrrbKe
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=bara^x+bbrrbKe
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^˙=ηaxe
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^arax+b^brrb^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^arxeaxe+brreKe2

Ref.

你可能感兴趣的:(控制,算法)