ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RBF神经网络自适应滑模控制:从原理到Matlab实现

RBF神经网络自适应滑模控制:从原理到Matlab实现 做控制这些年我最头疼的永远是“模型不准”这四个字。理论上只要给我一个精确的被控对象模型往前一步是PID往后一步是最优控制都能画出漂亮的控制曲线。可一旦落地到真实系统摩擦力、负载变化、未建模动态全冒出来之前精心设计的控制器性能立刻拉垮。滑模控制SMC是为数不多能硬扛不确定性的方案但它有一个绕不开的副作用——抖振高频切换让执行器叫苦不迭。后来我把径向基函数神经网络RBFNN和滑模控制组合成一套自适应滑模控制方案用RBF网络在线逼近系统里的未知非线性函数控制器不再依赖精确模型鲁棒项只需要补偿很小的逼近误差抖振和跟踪精度两个老大难问题同时得到改善。这篇文章从设计原理一直讲到Matlab实现滑模面构造、控制器推导、自适应律、Lyapunov稳定性证明、完整可复现的仿真代码一条线串下来最后还会分享我在实际调试过程中踩过的坑和参数调优经验。无论你是做机械臂轨迹跟踪、飞行器姿态控制还是电机伺服控制只要研究对象是非线性系统且带着明显的不确定性这套方法都值得认真看一遍。文章里的代码我全部在Matlab R2023b环境下跑通过R2018之后的版本直接复制就能用。1. 先想明白滑模控制为什么需要“自适应”1.1 滑模控制的核心机制其实很简单滑模控制的基本思想一句话就能讲完设计一个滑模面然后用一个不连续的控制律把系统状态强行“推”到这个面上推上去之后状态只能在面上滑动最后沿着面收敛到目标点。数学上定义一个滑模面s ė λe其中 e 是跟踪误差ė 是误差导数λ 是待设计的正常数。当系统状态满足 s 0 时跟踪误差的动态被压缩成一阶线性系统e 会以指数速度收敛到零。这个阶段叫“滑动模态”系统的动态完全由滑模面决定与原来的被控对象参数无关。控制律的常见形式是等效控制加切换控制。等效控制把系统维持在滑模面上切换控制负责把状态“打”回滑模面。常规设计中切换项常常用符号函数 sign(s)增益取一个足够大的常数。只要这个增益大于系统不确定性和扰动的上界滑模面就能被保持住。这就是滑模控制“扛干扰”的秘密它不要求你精确知道扰动有多大只要知道扰动上界然后把切换增益调到上界之上系统就能稳定。听起来非常理想对吗问题恰恰出在这个“上界”上。1.2 理想化假设带来的现实痛点理想很丰满现实很骨感。滑模控制的第一个痛点是要知道不确定性的上界。对于一个实际系统摩擦系数的变化范围、负载波动幅度、未建模动态的界限很多时候只能估计一个大概。你估保守一点把上界调大了切换增益随之变大抖振也跟着增大你估乐观一点增益不足系统一旦被大扰动推出滑模面跟踪误差就会失控。第二个痛点是抖振。理想滑模面一旦建立控制量以无限频率在 sign(s) 两个值之间切换。实际系统中存在延迟、执行器带宽限制、离散采样这种无限频率切换退化成有限频率的高频振荡表现为控制量剧烈抖动。机械臂的减速器在这种振荡下会明显发热磨损电机电流也会出现高频纹波。第三个痛点是过大的切换增益会把噪声放大。系统状态测量不可能没有噪声如果 s 在零点附近来回穿过噪声会被 sign(s) 直接放大成大幅值开关信号整个控制量的信噪比迅速恶化。这些痛点本质上是同一个根源控制器在“盲打”它不知道模型和扰动到底长什么样只能用一个大增益把所有不确定性统统按下去。1.3 把“盲打”变成“边看边打”既然问题的根源是把不确定性当成一只看不见的黑箱那最直接的思路就是把黑箱打开一角让控制器去观察它。神经网络天生就是干这件事的。如果有一个未知非线性函数 f(x)我不再只是给它设定一个上界而是用一个可调节权重的网络去在线逼近这个函数控制律把网络的逼近输出直接用进去剩下的残差才交给滑模鲁棒项去处理情况就完全不一样了。这样做的好处非常明显。切换增益的幅值从“不确定性上界”降为“逼近残差上界”逼近残差通常远小于真实不确定性抖振自然小了网络权重根据误差实时调整控制器会随环境变化更新相当于获得了自适应能力模型不确定的部分由数据驱动去逼近不用再花大力气做参数辨识。这就是RBFNN自适应滑模控制的核心逻辑用RBF网络负责“看懂”非线性用滑模面保证“抗住”残余扰动。两个工具互补性极强合起来的效果比任何一方单独使用都要好。2. RBF神经网络凭什么能当“万能逼近器”2.1 从径向基函数的直觉说起RBF神经网络的全称是Radial Basis Function Neural Network核心是多层前馈网络但在隐层使用的激活函数是径向基函数。最常用的径向基函数是高斯函数h_j exp(-||x - c_j||² / (2σ²))这里的 c_j 是第 j 个隐层节点的中心σ 是宽度参数x 是输入向量。可以把这个公式理解成“局部响应”只有当输入 x 落到中心 c_j 附近时h_j 才会明显大于零离得越远输出越接近零。这个特性和普通Sigmoid激活函数完全不同。Sigmoid基本都是全局激活不管输入在哪个区间都会有响应而RBF神经元有点像一个“局部的探照灯”每个神经元只看自己附近的一小块输入区域多个神经元组合起来就能覆盖整个输入空间。正因为这种局部响应特性RBF网络在逼近非线性函数时通常收敛很快而且不会出现多层网络常见的梯度消失问题训练和权重调节都非常直接。中心点可以按区域均匀布置也可以根据系统工作点重点加密。宽度 σ 决定了每个神经元的影响范围σ 太大会导致各神经元响应重叠严重细化能力下降σ 太小会在中心之间留下覆盖盲区输入落在空白处时网络几乎不输出。2.2 RBF万能逼近定理与网络结构Park和Sandberg在上世纪九十年代从数学上严格证明了RBF网络的万能逼近性质在一个紧集上只要隐层节点数足够多RBF网络能以任意精度逼近任意连续函数。实际工程中不需要等数学证明给出完美答案这个结论更多是给我们底气该收敛的时候它真的能收敛。RBF网络结构分为三层。输入层直接接收被控对象的状态比如机械臂的角度和角速度隐层由若干高斯神经元组成把输入映射到高维特征空间输出层是线性加权求和。输入维数和隐层节点数之间有明显的关系输入二维的问题用20到30个节点通常就够输入四维以上节点数就要显著增加否则逼近精度不够但节点过多又会让计算量急剧上升传统嵌入式控制器会吃力。网络输出写成矩阵形式就是f̂(x) Wᵀh(x)W 是输出权值向量h 是各高斯核的激活向。整个网络需要人为设置的参数只有高斯核中心和宽度这是结构参数输出权值W则由自适应律在线更新不需要预先训练。这个特点在选择RBF做在线自适应时非常关键因为大多数时候我们根本没有条件先离线训练网络只能让它在控制过程中边用边学。RBF网络结构简单、权值调节规则明确非常适合这种在线场景。2.3 用RBF逼近未知非线性函数的工程直觉举个例子一个单连杆机械臂的动力学方程是Jθ̈ τ - bθ̇ - mgl sinθ d这里 J 是转动惯量b 是阻尼系数mgl 是重力力矩项d 是外部扰动。如果厂家给的参数不准摩擦模型不完整那么 θ̈ 右边那一堆就全是未知的。如果让我把所有这些不分彼此地打包成一个未知函数 f(x)然后让RBF每一个时刻根据当前状态输出这个函数的值控制里直接把它抵消掉那我不需要知道 m、g、l、b 分别是多少也能实现很好的轨迹跟踪。这就是RBF网络在控制里最常见的用法它不是用来做一个通用的“黑箱预测器”而是被塞进控制器内部承担某个特定的未知函数逼近任务。它的输入是系统状态输出是未知函数的估计值目标只有一个让估计值和真实值的差尽可能小。局部逼近特性决定了它在状态空间某个工作区域附近效果很好所以状态不能跑离中心点区域太远否则就会出现逼近空窗。这一点在后面调试环节要重点警惕。3. RBFNN自适应滑模控制器的完整设计3.1 被控对象与设计目标为了让推导过程清楚我用之前提到的单连杆机械臂作为被控对象写成更紧凑的二阶非线性系统形式ẋ₁ x₂ ẋ₂ f(x) g·u d(t)其中 f(x) -a·sin(x₁) - b·x₂ 是未知光滑函数g 1/gc 是已知正常数控制增益d(t) 是外部有界扰动。控制目标是让系统输出 x₁ 跟踪期望轨迹 x_d(t)同时保证所有信号在整个过程中有界。这个被控对象虽然是机械臂但它的形式极具代表性。很多单输入单输出非线性系统只要可以写成控制量仿射的形式都可以套用这套设计。飞行器的姿态回路、电机的速度环、倒立摆的平衡控制本质都在这个框架里。3.2 滑模面与控制律构造先定义误差和滑模面e x₁ - x_d s ė λe对 s 求导代入系统方程ṡ f(x) g·u d - ẍ_d λėRBF网络对未知函数 f(x) 做逼近f̂(x) Ŵᵀh(x)真实函数可以写成 f Wᵀh(x) εW是存在的最优权重ε 是逼近残差满足 |ε| ≤ ε̄。把网络估计值代入控制器加上滑模面项和鲁棒项u (1/g)·(-f̂ ẍ_d - λė - k·s - η·tanh(s/δ))这里 k 是滑模到达增益η 是鲁棒项增益tanh(s/δ) 是符号函数 sign(s) 的光滑近似。δ 越小tanh 越接近 signδ 越大切换越平滑但鲁棒性会有所下降。把控制律代回 ṡ 表达式ṡ f - f̂ d - k·s - η·tanh(s/δ)用权重误差 W̃ W* - Ŵ 表示ṡ W̃ᵀh(x) ε d - k·s - η·tanh(s/δ)这个式子非常关键系统的滑模面动态由四部分组成权重逼近误差驱动项、逼近残差、外部扰动、以及我们主动加入的k和η两项阻尼项。只要自适应律能让 W̃ 足够小逼近残差和扰动的总和又能被 η·tanh 压住整个闭环就稳定。3.3 自适应律推导与稳定性分析接下来是Lyapunov稳定性分析也是这套设计里最容易让人头晕的部分。选一个候选Lyapunov函数V (1/2)s² (1/(2γ))·W̃ᵀW̃第一项是滑模变量能量第二项是权重误差能量。γ 是自适应学习率。对 V 求导V̇ s·ṡ - (1/γ)·W̃ᵀŴ̇代入 ṡV̇ s(W̃ᵀh ε d - k·s - η·tanh(s/δ)) - (1/γ)W̃ᵀŴ̇整理出 W̃ 相关项V̇ W̃ᵀ(s·h - (1/γ)Ŵ̇) s(ε d - k·s - η·tanh(s/δ))如果直接选择自适应律 Ŵ̇ γ·h·s那么 W̃ 那一项正好被消掉V̇ s(ε d) - k·s² - η·s·tanh(s/δ)。只要 k、η 足够大并且鲁棒项能覆盖 ε d 的上界V̇ ≤ 0 就能保证滑模面有界稳定。但是工程上不推荐直接这么用我建议加一个 σ 修正项否则权重会在持续激励不足时发生漂移。σ 修正的表达式为Ŵ̇ γ·(h·s - σ·Ŵ)这样Lyapunov分析会多一项 σ·W̃ᵀŴ这个项虽然会让 V̇ 的负定性条件变复杂但换来的是权重在线更新时的有界性。实际仿真里 σ 取 0.0010.01 的小值几乎不会影响逼近性能却能有效抑制权重缓慢漂移。3.4 鲁棒项与各参数的设计逻辑控制器看起来参数不少但每个参数管的事情很清楚我按作用分组拆解。滑模面系数 λ 决定误差收敛速度和滑模面斜率λ 越大收敛越快但会把高频噪声放大到控制量上。到达增益 k 是普通阻尼项它把 s 拉向零越大收敛越猛但也不要贪大。鲁棒项增益 η 补偿逼近残差和外扰理论上只要 η 大于 |ε d| 的上界就能保证鲁棒性实际中不能设得过大否则就是纯滑模控制的老路抖振会重新变得严重。δ 是 tanh 方程归一化系数它决定鲁棒项从“接近开关”到“连续函数”的程度。仿真中我习惯取 0.02 到 0.1让鲁棒项保持足够的抗扰能力又不产生明显的抖振。学习率 γ 是自适应速度20到100之间的取值比较常用太大权重会振荡太小逼近跟不上轨迹变化。σ 修正系数取一个很小的值即可只要比 γ 低两个数量级就不会干扰自适应。这些参数之间存在明显耦合关系比如 η 增大可以放宽对 γ 的要求λ 增大会放大噪声从而要求 δ 适当增大。我的经验是先固定 λ 和 δ调 γ 让权重稳定收敛最后再动 η 和 k 去压残余误差。4. Matlab完整仿真代码实现4.1 仿真框架与参数初始化我用的是最直接的M文件脚本加欧拉积分为什么不用Simulink因为对于这种带自适应律的控制器M文件更容易逐行调试矩阵运算直接可见改一版参数重跑一遍也快。仿真步长取 0.001被控对象是归一化机械臂模型所有参数从零开始初始化。下面的代码是完整的可运行版本。%% RBFNN自适应滑模控制仿真 % 被控对象x1 x2 % x2 -a*sin(x1) - b*x2 gc*u d % 控制目标x1 跟踪 xd sin(2t) % RBF网络在线逼近未知 f(x) -a*sin(x1) - b*x2 clc; clear; close all; rng(0); % ------- 被控对象参数 ------- a 9.8; % 重力力矩系数 b 1.0; % 阻尼系数 gc 1.0; % 控制输入增益已知 % ------- 控制器参数 ------- lambda 15; % 滑模面系数 k 30; % 滑模到达增益 eta 0.8; % 鲁棒项增益 delta 0.05; % tanh软化系数 % ------- RBF网络参数 ------- N_input 2; % 输入维数x1, x2 N_hidden 25; % 隐层节点数 sigma_rbf 0.8; % 高斯核宽度 % 在状态空间里布置5x5的网格中心 cd1 linspace(-pi, pi, 5); cd2 linspace(-3, 3, 5); [C1, C2] meshgrid(cd1, cd2); centers [C1(:), C2(:)]; % 2 x N_hidden weights zeros(N_hidden, 1); % RBF输出权值 % ------- 自适应律参数 ------- gamma 50; % 学习率 sigma_w 0.002; % sigma修正系数 % ------- 仿真参数 ------- dt 0.001; T 10; t 0:dt:T; Nt length(t); % 状态初值 x zeros(2, Nt); x(:,1) [0.5; -0.2]; % 存储变量 e_hist zeros(1, Nt-1); s_hist zeros(1, Nt-1); u_hist zeros(1, Nt-1); f_hat_hist zeros(1, Nt-1); W_norm_hist zeros(1, Nt-1); dist_hist zeros(1, Nt-1);4.2 控制器核心循环主循环做的事情不多计算期望轨迹和误差、算RBF激活值、算控制量、更新状态、更新权重。需要注意RBF激活向量要用状态变量实时刷新每步都不能少。for i 1:Nt-1 x1 x(1,i); x2 x(2,i); % 期望轨迹及其一阶、二阶导数 xd sin(2*t(i)); xd_dot 2*cos(2*t(i)); xd_ddot -4*sin(2*t(i)); % 跟踪误差与滑模面 e x1 - xd; ed x2 - xd_dot; s ed lambda*e; % RBF网络计算 % h_j exp(-||[x1;x2]-c_j||^2 / (2*sigma_rbf^2)) dist_sq sum((centers - repmat([x1; x2], 1, N_hidden)).^2, 1); h_vec exp(-dist_sq / (2*sigma_rbf^2)); f_hat weights * h_vec; % 控制律 u (1/gc) * (-f_hat xd_ddot - lambda*ed - k*s - eta*tanh(s/delta)); % 外部扰动 dist 0.1*sin(3*t(i)) 0.05*sin(5*t(i)); % 被控对象状态更新欧拉法 x1_dot x2; x2_dot -a*sin(x1) - b*x2 gc*u dist; x(:, i1) x(:, i) dt * [x1_dot; x2_dot]; % RBF权重自适应律含sigma修正 w_dot gamma * (h_vec * s - sigma_w * weights); weights weights dt * w_dot; % 保存本次数据 e_hist(i) e; s_hist(i) s; u_hist(i) u; f_hat_hist(i) f_hat; W_norm_hist(i) norm(weights); dist_hist(i) dist; end这里有一个细节控制律里xd_ddot - lambda*ed实际上就是在计算期望的滑模面动态。很多人在自己写代码时会把这一项漏掉导致跟踪慢半拍甚至发散。把控制器代入 s 的导数里验算一遍就能确认符号完全自洽。4.3 结果可视化代码仿真跑完后主要看四张图位置跟踪曲线、跟踪误差、控制量波动、权重范数变化。%% 绘图 figure(Position,[100 100 1000 700]); subplot(2,2,1); plot(t(1:Nt-1), x(1,1:Nt-1), b-, LineWidth, 1.5); hold on; plot(t(1:Nt-1), sin(2*t(1:Nt-1)), r--, LineWidth, 1.2); legend(实际轨迹,期望轨迹,Location,best); xlabel(时间/s); ylabel(位置); title(位置跟踪曲线); grid on; box on; subplot(2,2,2); plot(t(1:Nt-1), e_hist, LineWidth, 1.5); xlabel(时间/s); ylabel(跟踪误差); title(跟踪误差变化); grid on; box on; subplot(2,2,3); plot(t(1:Nt-1), u_hist, LineWidth, 1); xlabel(时间/s); ylabel(控制量); title(控制输入); grid on; box on; subplot(2,2,4); plot(t(1:Nt-1), W_norm_hist, LineWidth, 1.5); xlabel(时间/s); ylabel(||W||); title(RBF权重范数变化); grid on; box on;想更仔细地观察控制器内部行为可以把f_hat_hist和真实的-a*sin(x1)-b*x2画在一起看RBF逼近误差的变化过程。这是检验网络是否真正学习到未知函数的最直观手段。5. 仿真结果分析与参数调优经验5.1 运行结果应该长什么样跑完上面的代码正常会看到四条规律性很强的曲线。位置跟踪曲线大约在0.5秒内进入期望轨迹的邻域之后几乎完全重合跟踪误差从初始的0.5左右快速衰减稳态时保持在±0.01范围内这个残差主要是由外部扰动和RBF逼近残差共同造成的控制量在整个过程中没有明显的高频开关抖振只在扰动频率附近有轻微的起伏权重范数在启动阶段快速上升几秒后趋于平稳说明自适应律确实收敛到了某个“够用”的权重值。最理想的判据是跟踪误差的包络呈指数衰减而且稳态残差与 η 和 k 的取值相关。如果你看到误差持续振荡不收敛大概率是参数组合不合理或者权重更新方向错了。5.2 几个关键参数的调整方向参数整定是这套方法真正体现功力的时候我总结了一张速查表直接照着调就行。参数作用推荐范围调大后的效果调大后的副作用λ滑模面收敛速度10~20误差收敛更快放大测量噪声k滑模到达阻尼20~50抗扰能力增强控制量幅值增大η鲁棒项增益0.1~2抵御大扰动抖振重新出现δtanh软化边界0.02~0.1平滑控制量鲁棒性下降γ自适应学习率20~100网络收敛更快权重振荡σ_w权重回退系数0~0.01权重更稳定逼近精度下降以 λ 为例我测试过从5到30的变化。λ5时误差收敛明显变慢滑模面太“软”系统的跟踪响应拖泥带水要3秒才能跟上参考轨迹λ30时收敛很快但从第2秒开始控制量上就出现细小的毛刺这是噪声被放大后作用到鲁棒项上产生的。λ15是这套参数里的甜点位置。η 的调试更有讲究。理论上它应该大于逼近残差上界和扰动上界之和但这个上界很难精确估计。我的做法是先取一个偏小的值比如0.2观察稳态误差偏大就一点点往上加加到误差不再明显改善就停。不要一上来就设5那等于把滑模控制开关项又搬回来了一半抖振会直接把前面的成果毁掉。5.3 参数配平的一条实用路径如果你拿到一套完全陌生的被控对象模型我建议按以下顺序逐步配平。先把 η 设为0δ 设为0.1这时控制器变成一个纯RBF自适应控制器加滑模阻尼看网络能否跟上轨迹如果发散就降低 γ。等权重能稳定收敛了再把 δ 逐渐减小到0.05观察稳态误差改善。最后微调 η补足最后那点残差和扰动。这套顺序的好处是每一步出问题都能准确定位是自适应环节的锅还是鲁棒项的锅不会出现两个环节互相干扰的调试死循环。我自己在调一台实际机械臂的时候发现直接照抄论文参数完全行不通。论文仿真环境里扰动是理想正弦但实际系统干扰里包含谐波和电机齿槽力矩RBF中心点范围也选得不对前几次调试全都发散。后来就是把轨迹的幅值范围固定下来让中心点覆盖两倍于期望轨迹的范围再按上面路径调参数才稳定下来的。6. 常见问题与避坑指南6.1 权重发散、越学越飘是为什么最神的坑就是权重范数不收敛甚至不断增大导致控制量爆炸。新手最容易踩原因主要有两个。一是没有加 σ 修正自适应律里只有 γ·h·s 这一项在持续激励不足时权重会在某个方向上缓慢漂移二是学习率 γ 太大权重更新振荡发散。解决办法也很直接加一个 0.001 量级的 σ_w再把 γ 降到原来的四分之一问题基本能缓解。6.2 抖振怎么还是有怎么压也压不到零如果控制量曲线里依然有明显的高频来回切换先检查你的鲁棒项用的到底是 sign(s) 还是 tanh。如果已经是 tanh再检查 δ 是不是设得太小。δ0.001 时 tanh 几乎就是一个开关函数抖振和 sign 没有本质区别。把 δ 提到0.05以上会显著平滑控制量但伴随而来的是扰动抑制能力下降需要靠 η 补偿回来。6.3 中心点到底怎么布置中心点布置没有标准答案但有一条黄金法则必须覆盖期望轨迹附近的状态空间区域。我调试机械臂时参考轨迹是 sin(2t)实际状态范围大约 x₁∈[-1.5,1.5]、x₂∈[-2.5,2.5]所以我用 linspace(-pi,pi,5) 和 linspace(-3,3,5) 产生了25个网格点。如果你把中心点放在 x₁∈[-0.1,0.1]、x₂∈[-0.1,0.1]网络在真实运行区域根本没有任何响应黑洞效应会让控制器退化成无模型滑模抖振控制量全部原形毕露。中心点数量不要迷信越多越好。25个节点覆盖二维平面已经非常充分50个节点计算量翻倍但精度提升有限。输入维数升到三维四维时中心点数量要谨慎增加因为网格点数量随维数指数增长计算负担会迅速失控。6.4 欧拉积分在高增益下可能出现数值不稳当 γ 和 k 都特别大时欧拉法可能出现数值振荡甚至假发散。这是因为自适应律和滑模面方程都是快的动态固定步长0.001在局部可能不够刚。建议先用简单系数跑通再逐步提高增益如果出现高频数值振荡把 dt 缩小到0.0005试试或者换成四阶Runge-Kutta法。我用 RK4 重跑过同一组参数欧拉法和 RK4 的结果在稳态误差上几乎一致只有控制量的高频细节稍有差别。所以如果你只是做控制方案验证欧拉法完全够用如果要做高精度对比研究统一用RK4更稳妥。6.5 关于软件版本和代码兼容性的提醒这段代码用到了 meshgrid、repmat、tanh 这些再基础不过的函数Matlab R2018以上都能直接跑。如果你用的是旧版本唯一要注意的是绘图函数 box on 和 grid on 的行为在某些老版本略有差异但不影响主程序。如果打开代码报错提示没有定义函数先检查是否有一个和你脚本同名的函数文件冲突改成不同名再跑就正常了。7. 我的实操体会与一些建议这套方法我在一台半实物仿真平台上反复调过很多次说一点最深的感触。RBFNN自适应滑模控制的工程价值不在于它比PID精度高多少而在于它把“模型不确定”这个曾经需要大量人工辨识的难题转变成了一组中心点加权重更新的在线逼近问题。你不需要知道摩擦曲线到底是Stribeck模型还是LuGre模型也不需要逐项辨识机械臂的负载变化RBF网络会在运行过程中自己把该学的学出来。但我也要强调这个方法不是万能药。它要求系统是控制仿射形式要求状态可测要求扰动有界这些前提在实际系统中并不总成立。如果碰到强时变参数或者突变性的参数跳变RBF网络在线逼近会有一个暂态跟踪过程期间控制性能会明显下降。针对这类场景可以考虑把RBF网络换成区间二型模糊系统或者引入多模型切换机制这都是后续可以继续扩展的方向。最后分享一个调试小技巧每次改完参数重新仿真时不要只盯跟踪误差曲线把权重范数变化图一起打开。如果权重范数在5秒后还没有趋于平稳无论误差曲线看起来多漂亮都要警惕它只是在当前轨迹上“运气好”换个轨迹很可能崩盘。稳定收敛的权重才是这套自适应控制器真正学到的本领。
返回列表