ADRC的simulink仿真实现与m代码实现

2023-05-16

本文章以最简单的二阶系统为例,介绍其simulink仿真实现和m代码实现

案例中的二阶系统如下所示

 经典ADRC的基本结构如下:

 本案例中的simulink仿真整体结构(为便于理解,结构图与上述ADRC整体结构类似)

仿真参数初始化所需m文件程序(文章尾部附有本仿真模型及m,文件支持matlab2017b以上)

%-----------ADRC参数初始化------------%
%参数初始化
%跟踪微分器
r=100;%表示跟踪快慢
h0=5*h;%h0代表信号的平滑程度(滤波效果)
v1_last=0;
v2_last=0;
v0_last=0;
%扩张状态观测器
beta01=10;
beta02=200;
beta03=30;
alpha1=0.5;%文献里给定值
alpha2=0.25;%给定值
delta=0.0025;
b=1;
z1_last=0;
z2_last=0;
z3_last=0;
%非线性误差反馈
nlsef_alpha1=0.7;
nlsef_alpha2=1;
%被控对象初始化
temp_y=[0.5;0];
u_last=0;

TD微分跟踪器结构如下所示

 图中fst函数利用matlab_function搭建,内部代码如下所示

%fst函数
function fn=fst(x1,x2,r,h)
d=h*r;
d0=h*d;
y=x1+h*x2;
a0=sqrt(d^2+8*r*abs(y));
if abs(y)<=d0
    a=x2+y/h;
else
    a=x2+0.5*(a0-d)*sgn(y);
end
fn=-r*sat(a,d);
end
%符号函数
function y=sgn(x)
if x>0
    y=1;
elseif x<0
    y=-1;
else
    y=0
end
end
%sat函数
function y=sat(a,d)
if abs(a)<=d
    y=a/d;
else
    y=sgn(a);
end
end
%符号函数

ESO扩张状态观测器结构如下所示

 图中fal函数利用matlab_function搭建,内部代码如下所示

function y=fal(e,alpha,delta)
if abs(e)>delta
    y=sign(e)*abs(e)^alpha;
else
    y=e/(delta^(1-alpha));
end
end

BLSEF非线性误差反馈控制律结构如下所示

  图中fal函数利用matlab_function搭建,内部代码同上

典型被控系统结构如下所示

 阶跃信号下输入/输出/跟踪信号仿真结果

 系统输出的微分观测效果

 系统非线性项的观测效果

系统仿真的m文件实现(想要深入理解实现过程的朋友可以尝试复现该代码)

 m代码(ADRC控制器)

clc;clear all;close all;
%设定运行时间
time=10;
%设定仿真步长
h=0.01;
%时间定义
t=0.01:h:time;
%跟踪信号
v0=zeros(1,time/h);
for i=time/h/2+1:time/h;
    v0(i)=1;
end
rand_noise=0.05*randn(1,time/h);
%跟踪信号中加入随机噪声
vn=v0+rand_noise;
%-----------ADRC------------%
%参数初始化
%跟踪微分器
r=100;%表示跟踪快慢
h0=5*h;%h0代表信号的平滑程度(滤波效果)
v1_last=0;
v2_last=0;
v0_last=0;
%扩张状态观测器
beta01=10;
beta02=200;
beta03=30;
alpha1=0.5;%文献里给定值
alpha2=0.25;%给定值
delta=0.0025;
b=1;
z1_last=0;
z2_last=0;
z3_last=0;
%非线性误差反馈
nlsef_alpha1=0.7;
nlsef_alpha2=1;
%被控对象初始化
temp_y=[0.5;0];
u_last=0;
%----ADRC正式开始------%
for k=1:time/h
    %第一轮迭代处理
    %两个参数分别为控制量和当前时间
    parameter1=u_last;
    parameter2=k*h;
    tSpan=[0 h];
    %利用龙格库塔法求解微分方程
    [~,total_y]=ode45('PlantModel',tSpan,temp_y,[],parameter1,parameter2);
    %total_state里面的元素都是龙格塔库一点点计算的结果,直接使用最后一列,即计算结果即可
    temp_y=total_y(length(total_y),:);%寻访最后一行,全部列的元素
    %记录下输出和输出的微分
    y(k)=temp_y(1);
    dy(k)=temp_y(2);
    %---跟踪微分器TD----%
    v1(k)=v1_last+h*v2_last;
    v2(k)=v2_last+h*fst(v1_last-vn(k),v2_last,r,h0);
    x3(k)=-v1_last^2;
    v1_last=v1(k);
    v2_last=v2(k);
    v0_last=vn(k);
    %----扩张状态观测器--%
    e=z1_last-y(k);
    z1(k)=z1_last+h*(z2_last-beta01*e);
    z2(k)=z2_last+h*(z3_last-beta02*(fal(e,alpha1,delta))+b*u_last);
    z3(k)=z3_last-h*beta03*(fal(e,alpha2,delta));
    z1_last=z1(k);
    z2_last=z2(k);
    z3_last=z3(k);
    %---非线性误差反馈----%
    e1(k)=v1(k)-z1(k);
    e2(k)=v2(k)-z2(k);
    u0(k)=beta01*fal(e1(k),nlsef_alpha1,delta)+beta02*fal(e2(k),nlsef_alpha2,delta);
    u(k)=u0(k)-z3(k)/b;
    u_last=u(k);
end
figure(1);
plot(t,u,'r');
figure(2);
subplot(311);
plot(t,z1,'r',t,y,'k',t,vn,'b','linewidth',2);
xlabel('time(s)');ylabel('z1,y');
legend('目标输出信号','估计输出信号','实际输出信号');
subplot(312);
plot(t,z2,'r',t,dy,'k','linewidth',2);
xlabel('time(s)'),ylabel('z2,dy');
legend('估计输出微分信号','实际输出微分信号');
subplot(313);
plot(t,z3,'r',t,x3,'k','linewidth',2);
xlabel('time(s)'),ylabel('z3,x3');
legend('估计扰动','实际扰动');
%---------函数部分---------%
%sat函数
function y=sat(a,d)
if abs(a)<=d
    y=a/d;
else
    y=sgn(a);
end
end
%符号函数
function y=sgn(x)
if x>0
    y=1;
elseif x<0
    y=-1;
else
    y=0
end
end
%fst函数
function fn=fst(x1,x2,r,h)
d=h*r;
d0=h*d;
y=x1+h*x2;
a0=sqrt(d^2+8*r*abs(y));
if abs(y)<=d0
    a=x2+y/h;
else
    a=x2+0.5*(a0-d)*sgn(y);
end
fn=-r*sat(a,d);
end
%fal函数
function y=fal(e,alpha,delta)
if abs(e)>delta
    y=abs(e)^alpha*sign(e);
else
    y=e/(delta^(1-alpha));
end
end

系统模型

%系统方程
function dy=PlantModel(t,y,flag,p1,p2)
u=p1;
time=p2;
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=-y(1)^2+u;
end

m文件实现的仿真结果

 

仿真源文件网盘链接

链接:https://pan.baidu.com/s/1bZ-teW6aMX2XjmLkBW1ozg 
提取码:4m5p

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ADRC的simulink仿真实现与m代码实现 的相关文章

  • 自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建

    一 现在关于自抗扰控制技术方面的研究已经比较成熟了 xff0c 基本上熟悉结构以后都可以找到例子实现 xff0c 今天以一个简单的例子来介绍自抗扰控制的仿真系统搭建 xff0c 不必畏惧 xff0c 熟悉皆可达 1 首先自抗扰控制分为TD
  • Windows下编译PX4源码并连接simulink

    目录 一 安装UAV支持PX4飞行器支持包二 下载工具链对于2019a对于2021a 三 克隆PX4源码四 构建PX4固件固件的选择编译指令报错的处理 五 MATLAB的Test Connection 一 安装UAV支持PX4飞行器支持包
  • Simulink建模:一阶滤波模型

    本文研究一阶滤波算法的Simulink模型及其代码生成 文章目录 1 一阶滤波算法2 Simulink建模2 1 对公式的理解2 2 建模过程2 3 模型配置 3 模型更新及代码生成3 1 模型更新3 2 代码生成 4 总结 1 一阶滤波算
  • simulink bus总线创建方法

    在simulink中创建bus总线 xff0c 主要包含2种方法 xff1a 基于模块创建总线对象 使用模块 xff0c 根据输入信号创建总线 基于 MATLAB 数据创建总线对象 可以使用 Simulink Bus cellToObjec
  • Linux Simulink打不开——unable to run the MATLABWindow application on Linux

    Linux Simulink打不开 unable to run the MATLABWindow application on Linux 解决办法 xff1a 解决办法 xff1a 参考网页 xff1a https www mathwor
  • 在MATLAB中,用Simulink搭建一个二阶传递函数模型

    文章目录 1 模型准备 二阶传递函数模型 1 1 二阶传递函数模型 1 1 1 时域模型 1 1 2 频域模型 1 2 二阶传递函数公式和参数 2 开始建模 在simulink中搭建二阶传递函数模型 2 1 从simulink库中添加传递函
  • FasterRCNN(一)网络部分代码分析

    一 定义一个RCNN的类作为基础 1 self build network self sess is training True 函数 构建网络框架 with tf variable scope RCNN initializer tf tr
  • LADRC的学习——用simulink搭建仿真模型

    作者 墨心 时间 2019 7 25 用simulink搭建仿真模型 前面两篇博客主要讲了ADRC的相关概念和知识 并且尝试着搭建模型和仿真 之后学习了PID的相关知识 了解了Kp Ki Kd三个参数的意义 接下来 主要根据高志强教授的论文
  • 单相Boost功率因数校正电路(PFC)设计与仿真(Simulink & Saber):第一章 PFC基础知识与电路参数设计

    写在前面 教程是根据Mathworks公司的有源功率因数校正教程 点这里跳转 和那日沙等老师编著的 电力电子 电机控制系统的建模及仿真 改写的 设计思路基本与之一致 嫌看文章麻烦的同学可以直接跳转看视频和查阅相关书籍 Simulink仿真部
  • 基于相干解调法和基于相位比较法的2DPSK数字通信系统 MATLAB Simulink仿真

    1 课程设计目的 通过课程设计 巩固已经学过的通信原理课程中有关数字调制系统的知识 加深对相关知识的理解和应用 学会应用Matlab Simulink工具对通信系统进行仿真和调试 设计与实现的过程中充分利用图书馆和网络资源 提高发现问题和自
  • 均匀辐照度和局部遮光条件下光伏系统的新型样条-MPPT技术(Simulink)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真 Matlab代码 文献 1 概述 文献 光伏 PV
  • simunlink的“Three-Phase V-I Measurement”所测线电压次序问题

    simunlink的 Three Phase V I Measurement 所测线电压次序问题 仿真实例 很多同学在使用simulink进行仿真时可能会用到 Three Phase V I Measurement 这个模块 在该模块par
  • matlab中的mod和rem的异同

    rem和mod是求余的 但是算法不同 差异在哪呢 就在于分别使用了fix和floor 函数fix和floor都是圆整用的 fix是向0的方向圆整 如fix 1 5 1 fix 1 5 1 而floor是向下圆整 如floor 1 5 2 f
  • Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析

    文章目录 1 定义 2 变换和处理 3 函数 4 实例演示 例1 单频正弦信号 整数周期采样 例2 单频正弦信号 非整数周期采样 例3 含有直流分量的单频正弦信号 例4 正弦复合信号 例5 含有随机干扰的正弦信号 例6 实际案例 5 拓展
  • VSC/SMC(十六)——自适应鲁棒滑模控制

    目录 1 参数不定和扰动不定但有界的系统 2 滑模控制自适应律设计 2 1控制律设计总结 3 仿真分析 3 1 PD控制 3 2普通自适应律 3 3映射自适应律 3 4总结 4学习问题 1 参数不定和扰动不定但有界的系统 其中 2 滑模控制
  • 放大滤波电路设计

    放大滤波电路设计 摘 要 研究目的主要为自主设计一个放大滤波电路 使其满足相应参数要求 并且在放大器输出端留有测试端子 本作品信号源提供正弦输入信号 基本满足电压增益40dB可调 低通滤波器 带通滤波器设计等任务要求 关键词 放大滤波电路
  • 如何将 simulink 文件转换为 XML

    我需要将 Simulink 文件 mdl 转换为 XML 文件 经过任何搜索后 我没有找到任何内容来帮助我解决此问题 您知道 Java 中的某种方法或现成的解决方案吗 从 R2008b 开始 您可以使用以下命令将 mdl 文件导出到 xml
  • 如何在simulink中创建计数器

    我想计算我的信号变为零的次数 例如 将脉冲信号作为输入 我想要一个变量来计算脉冲变为零的次数 我正在疯狂地思考某事 有人可以帮助我吗 谢谢 figure 1 is a pulse counter model and figure 2 is
  • 是否可以通过编程方式运行 Simulink 模型并测量其状态?

    我希望为现有 Simulink 模型设置一个测试集 理想情况下 我可以完全控制模型 明确地步进并测量模型中任何总线上任何信号的状态 正如可能已经收集到的 这是该模型的单元测试系统的前身 因此 我不能真正证明更改模型以适应测试是合理的 测试必
  • 如何将 Simulink 编码器编译器版本设置为支持 C++11 的版本?

    我正在尝试将代码合并到 Simulink 及其嵌入式编码器中 该代码使用 C 11 扩展 跑步mex setup c 给出这个输出 mex setup c MEX configured to use Xcode Clang for C la

随机推荐

  • 看野火的视频,用正点原子的板子(STM32F4探索者)做系统定时器实验

    1 实验目的 编写一个毫秒级的延时函数 xff0c 控制LED的亮灭 这里的灯是LED1 xff0c 端口是GPIOF xff0c 引脚是PIN10 2 实验流程 2 1 准备知识 SysTick 系统定时器 xff0c 24位 xff0c
  • 用正点原子的板子(STM32F4探索者)做PWM 输出实验

    1 实验目的 使用 TIM14 的通道 1 来产生 PWM 控制 LED0 DS0 的亮度 2 实验准备和流程 由上图可以看出 xff0c GPIOF9引脚对应的是定时器TIM14的通道1 由上图可以看出 xff0c GPIOF9引脚对应的
  • MATLAB快速入门(二):矩阵

    矩阵 目录 矩阵 1 冒号表达式 2 矩阵元素的引用 3 矩阵的运算 3 1算术运算 3 2逻辑运算 4 特殊矩阵 5 矩阵变换 5 1对角阵 5 2三角阵 5 3矩阵旋转 5 4稀疏矩阵 6 矩阵求值 1 冒号表达式 e1 e2 e3 省
  • toString方法使用

    一 Object类中toString的作用 1 在主方法中我们可以直接用toString 输出对象其中的内容 2 我们需要直接输出对象中所属内容时 xff0c 直接使用toString 方法输出语句 xff0c 输出内容不友好 xff0c
  • px4+mavros+offboard控制+gazebo仿真以及与pixhawk4飞控连接(一)

    记录一下自己从px4到板载控制的一系列流程以及踩坑过程 xff0c 希望也可以帮助大家避雷 话不多说直接上干货 一 软 硬件平台 px4版本 xff1a 1 10 1 飞控板 xff1a pixhawk4 ros版本 xff1a melod
  • 浅谈穿越机飞控如何烧写固件及其相关设置问题

    背景 xff1a 自己本人是无人机爱好者对穿越机也较为痴迷 xff0c 在使用DJI FPV天空端时发现无法显示OSD信息 xff0c 同时在眼镜端的OSD开关已经打开 xff0c 查阅相关资料发现自己的飞控版本过低需要烧写到4 1 0以上
  • XSS攻击原理及防范

    文章目录 一 XSS攻击简介二 XSS攻击分类1 反射型2 存储型3 DOM based型 三 XSS防范1 cookie安全策略2 X XSS Protection设置3 XSS防御HTML编码4 XSS 防御HTML Attribute
  • Jetson Xavier NX安装librealsense

    在nx上安装librealsense可以使用由jetsonhacks开源的安装脚本installRealSenseSDK 克隆仓库 xff0c 进入目录 git clone https github com jetsonhacks inst
  • Kubernetes(K8s)的简介及基础知识

    1 关于Kubernetes xff08 K8s xff09 的简介 Kubernetes xff0c 简称又叫K8s xff0c 为什么简称要叫K8s xff0c 据说是因为Kubernetes单词中K字母和S字母之间相隔8个字母 xff
  • 爬虫实战(三)

    随着互联网的不断发展 xff0c 网络数据的规模和价值也不断提升 在这个大数据时代 xff0c 如何从海量数据中提取有价值的信息并加以利用 xff0c 成为了数据科学 商业分析 金融预测 社会研究等领域中一个重要的问题 而网络爬虫作为一种数
  • 数据库连接

    一 连接数据库的方法和工具 数据库连接是访问数据库的关键步骤之一 xff0c 通过连接数据库 xff0c 我们可以进行数据的增删改查等操作 下面介绍几种连接数据库的方法和工具 命令行工具 在命令行中输入相应的命令即可连接数据库 常用的命令行
  • C语言之十进制转化为十六进制

    作者 xff1a 从未止步 博客主页 xff1a 从未止步的博客 专栏 xff1a 和我一起学C 语录 xff1a Every day is a second chance 行动是理想最高贵的表达 xff0c 给大家介绍一款超牛的斩获大厂o
  • 合肥工业大学机器人足球仿真robcup作业二(python实现)附代码有注释

    用面向对象的思维设计相关类 xff0c 从而实现直线与直线 直线与圆 直线与矩形的交点 要求各给出每个案例的至少一个示例的程序 这是第二次机器人足球的作业代码 xff0c 写的比较潦草 xff0c 但是用的方法还是通俗易懂的 xff0c 基
  • 合肥工业大学机器人足球仿真robcup作业三(python实现)附代码有注释

    第三次作业 题目 xff1a 已知2个点的信息 定位自己的绝对坐标 设图中C 0 0 P1 52 5 32 P2 52 5 32 P3 52 5 32 P4 52 5 32 P5 0 32 P6 0 32 P7 30 7 P8 30 7 P
  • 程序员一定要知道的10个网站,记得收藏

    为大家整理了对程序员超有用的网站合集 xff0c 今天主要分享知识社区 amp 学习刷题两大类 希望能助力各位早日成为码神 话不多说 xff0c 直接上干货 知识社区类 1 Github 程序员的Facebook 毋庸置疑 xff0c 首位
  • for in 和for of的区别

    文章目录 1 遍历数组通常用for循环2 for in遍历数组3 遍历对象总结 1 遍历数组通常用for循环 ES5的话也可以使用forEach xff0c ES5具有遍历数组功能的还有map filter some every reduc
  • win11打开移动热点显示“我们无法设置移动热点”

    解决方法 xff1a 以下方法是本人联系微软客服解决 xff0c 亲测有效 用管理员模式打开命令提示符 xff0c 输入netsh winsock reset xff08 按下Enter键 xff09 netsh int ip reset
  • 树莓派pico的软件安装及使用

    简介 xff1a 在些日子在芯查查积分商城兑换了一个树莓派pico xff0c 来教大家怎么安装Thonny软件 xff0c 并且使用Thonny编译运行树莓派pico 第一步 xff1a 安装固件 第二步 xff1a 在window上安装
  • Git分布式版本控制工具(linux)

    内容 xff1a Git 概述 Git 代码托管服务 Git 常用命令 在 IDEA 中使用 Git 目录 1 前言 xff1a 1 1 什么是Git xff1f 1 1 1 其他版本控制工具 xff1a 1 2 使用Git能做什么 xff
  • ADRC的simulink仿真实现与m代码实现

    本文章以最简单的二阶系统为例 xff0c 介绍其simulink仿真实现和m代码实现 案例中的二阶系统如下所示 经典ADRC的基本结构如下 xff1a 本案例中的simulink仿真整体结构 xff08 为便于理解 xff0c 结构图与上述