• 【控制】自适应控制,对参考信号跟踪,对未知参数估计的小例子,带程序有结果图


    1 问题描述

    自适应控制所讨论的对象,一般是指对象的结构已知,仅仅是参数未知,而且采用的控制方法仍是基于数学模型的方法。

    但实践中我们还会遇到结构和参数都未知的对象,比如一些运行机理特别复杂,目前尚未被人们充分理解的对象,不可能建立有效的数学模型,因而无法沿用基于数学模型的方法解决其控制问题,这时需要借助人工智能学科,也就是智能控制。

    自适应控制与常规的控制与最优控制一样,是一种基于数学模型的控制方法。自适应控制所依据的关于模型的和扰动的先验知识比较少,需要在系统的运行过程中不断提取有关模型的信息,使模型愈来愈准确。

    常规的反馈控制具有一定的鲁棒性,但是由于控制器参数是固定的,当不确定性很大时,系统的性能会大幅下降,甚至失稳。因此,从某种程度上说自适应控制也可以看做是基于自动调节反馈增益的反馈控制。

    1.1 被控对象

    存在一个非线性被控对象如式 (1)
    x ˙ = a x 2 + u (1)

    x˙=ax2+u" role="presentation" style="position: relative;">x˙=ax2+u
    \tag{1} x˙=ax2+u(1)

    其中 x x x 是系统状态, a a a 是未知参数, u u u 是控制输入。

    参数状态
    a a a被控系统真实参数,但未知
    a ^ \red{\hat{a}} a^被控系统估计参数,待估计

    1.2 控制目标

    要求设计一个合理的控制信号 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 自适应解决过程

    对于现代控制理论,设计控制信号实际上是设计误差动力学系统,并令其收敛到零。

    2.1 误差动力学系统

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

    e ˙ = x ˙ − x ˙ r = a x 2 + u − x ˙ r (2)

    e˙=x˙x˙r=ax2+ux˙r" role="presentation" style="position: relative;">e˙=x˙x˙r=ax2+ux˙r
    \tag{2} e˙=x˙x˙r=ax2+ux˙r(2)

    2.2 控制器设计

    由于原系统是满足匹配条件的,即控制信号 u u u 和未知参数 a a a 处于一个方程中,那么根据等价确定性原则(certainty equivalence, CE)可以设计控制器为

    u = − a ^ x 2 + x ˙ r − K e (3)

    u=\reda^x2+x˙rKe" role="presentation" style="position: relative;">u=\reda^x2+x˙rKe
    \tag{3} u=a^x2+x˙rKe(3)

    其中 a ^ \red{\hat{a}} a^ 是未知参数 a a a 的估计值, K > 0 K>0 K>0 是控制器增益参数。

    2.3 更新估计参数

    接下来更新未知参数的估计值 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)

    e˙=ax2+ux˙r=ax2+(\reda^x2+x˙rKe)x˙r=a~x2Ke" role="presentation" style="position: relative;">e˙=ax2+ux˙r=ax2+(\reda^x2+x˙rKe)x˙r=a~x2Ke
    \tag{4} e˙=ax2+ux˙r=ax2+(a^x2+x˙rKe)x˙r=a~x2Ke(4)

    定义李雅普诺夫函数
    V ( e , a ~ ) = 1 2 e 2 + 1 2 η a ~ 2 ≥ 0 (5)

    V(e,a~)=12e2+12ηa~20" role="presentation" style="position: relative;">V(e,a~)=12e2+12ηa~20
    \tag{5} V(e,a~)=21e2+2η1a~20(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)

    V˙(e,a~)=ee˙+1ηa~a~˙=ee˙+1ηa~(\reda^˙a˙)=e(a~x2Ke)+1ηa~\reda^˙=Ke2ex2a~+1ηa~\reda^˙=Ke2+a~(ex2+1η\reda^˙)" role="presentation" style="position: relative;">V˙(e,a~)=ee˙+1ηa~a~˙=ee˙+1ηa~(\reda^˙a˙)=e(a~x2Ke)+1ηa~\reda^˙=Ke2ex2a~+1ηa~\reda^˙=Ke2+a~(ex2+1η\reda^˙)
    \tag{6} V˙(e,a~)=ee˙+η1a~a~˙=ee˙+η1a~(a^˙a˙)=e(a~x2Ke)+η1a~a^˙=Ke2ex2a~+η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)

    ex2+1η\reda^˙=01η\reda^˙=ex2a^˙=ηex2" role="presentation" style="position: relative;">ex2+1η\reda^˙=01η\reda^˙=ex2a^˙=ηex2
    \tag{7} ex2+η1a^˙η1a^˙a^˙=0=ex2=ηex2(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)

    V˙(e,a~)=Ke2+a~(ex2+1η\reda^˙)=Ke2+a~(ex2+1η(ηex2))=Ke2+a~(ex2+ex2)=Ke20" role="presentation" style="position: relative;">V˙(e,a~)=Ke2+a~(ex2+1η\reda^˙)=Ke2+a~(ex2+1η(ηex2))=Ke2+a~(ex2+ex2)=Ke20
    \tag{8} V˙(e,a~)=Ke2+a~(ex2+η1a^˙)=Ke2+a~(ex2+η1(ηex2))=Ke2+a~(ex2+ex2)=Ke20(8)

    此时李雅普诺夫函数关于时间的导数 V ˙ ≤ 0 \dot{V} \le 0 V˙0,即误差 e e e 是渐进稳定的。

    ⚠️注意,上述这种自适应律设计的弊端就是误差 e e e 渐进稳定,但是未知参数的估计误差 a ^ − a \hat{a}-a a^a 未做严格限制,这一点也可以通过以下仿真看出来。

    3 实验验证

    3.1 初始状态设置

    假设被控系统的未知参数 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

    3.2 不同参数效果对比

    3.2.1 η = 1 , K = 1 \eta = 1, K = 1 η=1,K=1

    关于自适应控制律中的参数 η \eta η 和控制器中的参数 K K K,我们先假设均为1看下效果。
    在这里插入图片描述

    结果就是有跟踪,但不多😂。

    3.2.2 η = 0.3 , K = 6 \eta = 0.3, K = 6 η=0.3,K=6

    修改了参数后,收敛效果就好多了。
    在这里插入图片描述

    3.2.3 a = − 1.6 , η = 0.3 , K = 6 a = -1.6, \eta = 0.3, K = 6 a=1.6,η=0.3,K=6

    我们还可以尝试下将未知参数 a a a 修改下,看看跟踪效果。

    在这里插入图片描述

    3.2.4 a = − 1.6 , η = − 0.3 , K = 6 a = -1.6, \eta = -0.3, K = 6 a=1.6,η=0.3,K=6

    即然未知参数 a a a 变了,那么参数也要发生变化,以便更好跟踪。随意调了下参数 η = − 0.3 \eta=-0.3 η=0.3,效果就好了很多。

    在这里插入图片描述

    3.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    Ref.

    1. 自适应控制基本思想
  • 相关阅读:
    23软考备考已开始,网络工程师知识点速记~(3)
    深度循环神经网络
    Win11 删除文件时提示“找不到该项目,请重试”的解决办法
    【Redis】Redis安装步骤和特性以及支持的10种数据类型(Redis专栏启动)
    使用CSS实现图片的磨砂玻璃效果
    ZCMU--5230: 排练方阵(C语言)
    Spring 源码(2)Spring IOC 容器 前戏准备工作
    php怎么检测字符串是否只含数字
    Jquery
    FFmpeg入门详解之23:视频转码原理
  • 原文地址:https://blog.csdn.net/weixin_36815313/article/details/126685264