MATLAB 自抗扰控制 - Active Disturbance Rejection Control

系列文章目录

MATLAB 模型参考自适应控制 - Model Reference Adaptive Control


文章目录

  • 系列文章目录
  • 前言
  • 一、控制器结构
    • 1.1 一阶逼近
    • 1.2 二阶逼近
  • 二、指定控制器参数
  • 参考


前言

自抗扰控制 (ADRC) 是一种无模型控制方法,适用于为具有未知动态特性以及内部和外部扰动的被控对象设计控制器。此算法只需要对被控对象动态特性进行逼近,即可设计具有稳健抗扰功能的无超调的控制器。

您可以使用 Active Disturbance Rejection Control 模块来实现 ADRC。该模块使用已知系统动态特性的一阶或二阶模型逼近以及建模为被控对象的扩张状态的未知动态特性和扰动。通常,您可以根据工作范围内被控对象的开环阶跃响应来确定此阶数。

一阶逼近 - y ˙ ( t ) = b 0 u ( t ) + f ( t ) {\dot{y}}(t)=b 0 u(t)+f(t) y˙(t)=b0u(t)+f(t)

二阶逼近 - y ¨ ( t ) = b 0 u ( t ) + f ( t ) {\ddot{y}}(t)=b 0 u(t)+f(t) y¨(t)=b0u(t)+f(t)

其中:

  • y(t) 是被控对象输出。

  • u(t) 是输入信号。

  • b0 是临界增益,它是描述被控对象对输入 u(t) 的响应的估计增益。

  • f(t) 是总扰动,包括未知动态特性扰动和其他扰动。

该模块使用扩张状态观测器 (ESO) 来估计 f(t),并通过减少估计的扰动对模型逼近已知部分的影响来实现抗扰控制。

您可以实现离散时间和连续时间控制器。设置控制器时域和采样时间以匹配被控对象模型的时域。


一、控制器结构

1.1 一阶逼近

对于一阶被控对象模型逼近 y ˙ ( t ) = b 0 u ( t ) + f ( t ) {\dot{y}}(t)=b0u(t)+f(t) y˙(t)=b0u(t)+f(t),被控对象输出状态是 x 1 = y ( t ) x_{1}=\mathrm{y}(t) x1=y(t) ,扩张状态是 x 2 = f ( t ) x_{2}=\mathrm{f}(t) x2=f(t)
状态空间模型如下。
x ˙ = A x + B u + ( 0 f ˙ ( t ) ) {{\dot{x}=A x+B u+\left(\begin{array}{c}{{0}}\\ {{\dot{f}(t)}}\end{array}\right)}} x˙=Ax+Bu+(0f˙(t))
y = C x , y=C x, y=Cx,

其中

A = ( 0 1 0 0 ) , B = ( b 0 0 ) , C = ( 1 0 ) . A=\begin{pmatrix} 0 & 1 \\ 0 & 0 \end{pmatrix},\ B=\begin{pmatrix} b0 \\ 0 \end{pmatrix},C=(1\ 0). A=(0010), B=(b00),C=(1 0).

对于此可观测系统,模块使用龙伯格观测器来提供被控对象状态和总扰动的估计值。使用估计的状态

z 1 = y ^ ( t ) z 2 = f ^ ( t ) , \begin{array}{c}{{z_{1}=\hat{y}(t)}}\\ {{z_{2}=\hat{f}(t),}}\end{array} z1=y^(t)z2=f^(t),

控制器计算控制输入 u(t),如下所示。

u ( t ) = u 0 ( t ) − z 2 b 0 , u(t)={\dfrac{u0(t)-z2}{b0}}, u(t)=b0u0(t)z2,

其中

u 0 ( t ) = K P ( r ( t ) − z 1 ) . u\mathrm{0}(t)=K P(r(t)-z1). u0(t)=KP(r(t)z1).

这是一个基于估计的状态反馈控制器,当估计值和实际值相等时,系统具有一阶闭环行为。此闭环系统具有极点 s = –KP。

此控制器表示为以下控制结构。

在这里插入图片描述

为了简化控制器调节,该模块将控制器极点设置在 (s + ωc) 处,将观测器极点设置在 ( s + ω 0 ) 2 (s+\omega_{0})^{2} (s+ω0)2 处,其中 ωc 和 ωo 分别为控制器带宽和观测器带宽。

1.2 二阶逼近

对于二阶被控对象模型逼近 y ¨ ( t ) = b 0 u ( t ) + f ( t ) \ddot{y}(t)=b{0}u(t)+f(t) y¨(t)=b0u(t)+f(t) ,被控对象输出状态是 x 1 = y ( t ) x_{1}=\mathrm{y}(t) x1=y(t) x 2 = y ˙ ( t ) x_{2}=\mathrm{\dot{y}}(t) x2=y˙(t) ,扩张状态是 x 3 = f ( t ) x_{3}=\mathrm{f}(t) x3=f(t)

状态空间模型如下。

x ˙ = A x + B u + ( 0 0 f ˙ ( t ) ) \dot{x}=A x+B u+\left(\begin{array}{c}{{0}}\\ {{0}}\\ {{\dot{f}(t)}}\end{array}\right) x˙=Ax+Bu+ 00f˙(t)

y = C x , y=C x, y=Cx,

其中

A = ( 0 1 0 0 0 1 0 0 0 ) , B = ( 0 b 0 0 ) , C = ( 1 0 0 ) . A={\left(\begin{array}{l l l}{0}&{1}&{0}\\ {0}&{0}&{1}\\ {0}&{0}&{0}\end{array}\right)},B={\left(\begin{array}{l l}{0}\\ {b0}\\ {0}\end{array}\right)},C=(1\quad0\quad0). A= 000100010 ,B= 0b00 ,C=(100).

对于此可观测系统,模块使用龙伯格观测器来提供被控对象状态和总扰动的估计值。使用估计的状态

z 1 = y ^ ( t ) z 2 = y ˙ ^ ( t ) z 3 = f ^ ( t ) , \begin{array}{c}{{z_{1}=\hat{y}(t)}}\\{{z_{2}=\hat{\dot{y}}(t)}} \\ {{z_{3}=\hat{f}(t),}}\end{array} z1=y^(t)z2=y˙^(t)z3=f^(t),

控制器计算控制输入 u(t),如下所示。

u ( t ) = u 0 ( t ) − z 3 b 0 , u(t)={\dfrac{u0(t)-z3}{b0}}, u(t)=b0u0(t)z3,

其中

u 0 ( t ) = K P ( r ( t ) − z 1 ) − K D z 2. u\mathrm{0}(t)=K P(r(t)-z1)-K D z2. u0(t)=KP(r(t)z1)KDz2.

这是一个基于估计的状态反馈控制器,当估计值和实际值相等时,系统具有二阶闭环行为。

此控制器表示为以下控制结构。

在这里插入图片描述
为了简化控制器调节,该模块分别将控制器极点设置在 ( s + ω 0 ) 2 (s+\omega_{0})^{2} (s+ω0)2 处,将观测器极点设置在 ( s + ω 0 ) 3 (s+\omega_{0})^{3} (s+ω0)3 处,其中 ωc 和 ωo 分别为控制器带宽和观测器带宽。

二、指定控制器参数

为了对您的被控对象实现 ADRC,您必须为被控对象逼近的临界增益值 b0 提供合理的估计值。为此,可采用以下方法。

  1. 使用幅值为 uOL 的阶跃信号,在工作范围内对开环被控对象进行仿真。
  2. 记录较短持续时间内被控对象输出的变化。
    • 对于一阶 ADRC,请使用响应逼近 y = at 并确定 a,如下所示。
      a = y ( e n d ) − y ( 0 ) t ( e n d ) − t ( 0 ) a=\dfrac{y(e n d)-y(0)}{t(e n d)-t(0)} a=t(end)t(0)y(end)y(0)
    • 对于二阶 ADRC,请使用响应逼近 y = ½at² 并确定 a,如下所示。
      a = 2 ( y ( e n d ) − y ( 0 ) ) ( t ( e n d ) − t ( 0 ) ) 2 a={\dfrac{2(y(e n d)-y(0))}{(t(e n d)-t(0))^{2}}} a=(t(end)t(0))22(y(end)y(0))
  3. 然后,您可以基于 a 和阶跃幅值 uOL 确定 b0。
    b 0 = a u O L b{\mathrm{{0}}}={\dfrac{a}{u O L}} b0=uOLa
    在模块参数中使用临界增益参数设置此值。

然后,要调节控制器响应,请分别使用控制器带宽和观测器带宽指定 ωc 和 ωo 值。这些值取决于控制器的性能要求。一般情况下,更快的响应需要更大的控制器带宽。观测器还需要比控制器收敛得更快。因此,请将观测器带宽设置为控制器带宽的 5 到 10 倍。

此外,该模块允许您指定状态的初始条件,限制控制器输出,并输出估计的状态值。

参考

[1] Han, Jingqing. “From PID to Active Disturbance Rejection Control.” IEEE Transactions on Industrial Electronics 56, no. 3 (March 2009): 900–906. https://doi.org/10.1109/TIE.2008.2011621.

[2] Herbst, Gernot. “A Simulative Study on Active Disturbance Rejection Control (ADRC) as a Control Tool for Practitioners.” Electronics 2, no. 3 (August 15, 2013): 246–79. https://doi.org/10.3390/electronics2030246.

[3] Zhiqiang Gao. “Scaling and Bandwidth-Parameterization Based Controller Tuning.” In Proceedings of the 2003 American Control Conference, 2003, 6:4989–96. Denver, CO, USA: IEEE, 2003. https://doi.org/10.1109/ACC.2003.1242516.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/192904.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure Machine Learning - 使用 Azure SDK 进行全文搜索

了解如何使用 Azure SDK 中的 Azure.Search.Documents 客户端库创建、加载和查询使用示例数据的搜索索引,实现全文搜索。 全文搜索使用 Apache Lucene 进行索引和查询,使用 BM25 排名算法对结果进行评分。 关注TechLead,分享AI全维度知识。作…

【Spring Boot 源码学习】ApplicationContextInitializer 详解

Spring Boot 源码学习系列 ApplicationContextInitializer 详解 引言往期内容主要内容1. 初识 ApplicationContextInitializer2. 加载 ApplicationContextInitializer3. ApplicationContextInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》,我们…

【傻瓜级JS-DLL-WINCC-PLC交互】6.​向PLC里面装载数据变量

思路 JS-DLL-WINCC-PLC之间进行交互,思路,先用Visual Studio创建一个C#的DLL控件,然后这个控件里面嵌入浏览器组件,实现JS与DLL通信,然后DLL放入到WINCC里面的图形编辑器中,实现DLL与WINCC的通信。然后PLC与…

使用String.valueOf()的坑

说明:记录一次使用String.valueOf()的坑,以下是一段有问题的代码: String count String.valueOf(listData.get(0).get(0).get("count");if (StringUtils.isBlank(count) || "0".equals(count)) {result.setResult(page)…

【bat】批处理脚本大全

目录 1.概述 2.变量 3.运算符 3.2.重定向运算符 3.3.多命名运算符 3.4.管道运算符 4.命令 4.1.基本命令 4.2.参数传递 4.3.查看脚本内容 4.4.注释 4.5.日期和时间 4.6.启动脚本 4.7.调用其他bat 4.8.任务管理 4.8.1.任务列表查看 4.8.2.任务终止 4.9.文件夹 …

美容院管理系统服务预约会员小程序效果如何

美容院在美业场景中需求度较高,尤其女性爱美悦己消费逐年增加,如清洁焕肤、祛皱抗衰、激光脱毛等美容项目都有不少需求者。 互联网深入美业行业多年,传统线下经营模式已经很难满足当今客户消费流程,如品牌寻找、服务预约、到店、…

Effective Java解读

Effective Java 第一章 引言第二章 创建和销毁对象第1条:用静态工厂方法代替构造器第2条:遇到多个构造器参数时要考虑使用构建器第3条:用私有构造器或者枚举类型强化Singletion属性第4条:通过私有构造器强化不可实例化的能力第5条…

pandas基础操作2

数据读取 我们想要使用 Pandas 来分析数据,那么首先需要读取数据。大多数情况下,数据都来源于外部的数据文件或者数据库。Pandas 提供了一系列的方法来读取外部数据,非常全面。下面,我们以最常用的 CSV 数据文件为例进行介绍。 …

【LeetCode:1423. 可获得的最大点数 | 滑动窗口】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

微前端实战:打造高效、灵活的前端应用架构

文章目录 一、微前端简介二、微前端的优势1. 高度模块化2. 独立部署3. 易于扩展4. 技术栈无关5. 独立升级 三、微前端的原理四、微前端案例思路《微前端实战》编辑推荐内容简介作者简介目录前言/序言 随着互联网行业的快速发展,前端应用的规模和复杂度也在不断增加。…

windows11 调整鼠标灵敏度方法

首先 我们打开电脑设置 或者在 此电脑/此计算机/我的电脑 右击选择属性 然后 有的电脑 左侧菜单中 直接就有 设备 然后在设备中直接就可以找到 鼠标 选项 调整光标速度即可 如果操作系统和我的一样 可以直接搜索鼠标 然后 选择 鼠标设置 然后 调整上面的鼠标指针速度即可

论文解读--Robust lane detection and tracking with Ransac and Kalman filter

使用随机采样一致性和卡尔曼滤波的鲁棒的车道线跟踪 摘要 在之前的一篇论文中,我们描述了一种使用霍夫变换和迭代匹配滤波器的简单的车道检测方法[1]。本文扩展了这项工作,通过结合逆透视映射来创建道路的鸟瞰视图,应用随机样本共识来帮助消…

网络编程之套接字

端口 && IP 在学习套接字编程之前,我们必须了解一下前缀知识。首先是IP和端口的作用。 在这之前,我们要明白一件事。那就是把数据从一台主机发送到另一台主机,是目的吗???当然不是!&a…

qt-C++笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解

qt-C笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解 文章目录 qt-C笔记之识别点击鼠标右键、点击位置以及Qt坐标系详解1.示例运行2.event->pos();详解3.event->pos()的坐标系原点4.Qt中的坐标系详解5.QMainWindow::mousePressEvent(event);详解 1.示例运行 截图时鼠…

【SpringMVC】Spring Web MVC入门(一)

文章目录 前言什么是Spring Web MVC?什么是MVC什么是Spring MVC? Spring Boot 和 Spring MVC 的区别什么是Spring Boot?关系和区别 Spring MVC 学习注解介绍1. SpringBootApplication2. RestController3. RequestMapping3.1 RequestMapping 使…

css所有属性介绍

文章目录 1️⃣ CSS属性介绍1.1 CSS3 动画属性(Animation)1.2 CSS 背景属性(Background)1.3 CSS 边框属性(Border 和 Outline)1.4 Box 属性1.5 Color 属性1.6 Content for Paged Media 属性1.7 CSS 尺寸属性…

CyclicBarrier实战应用——批量数据多线程协调异步处理(主线程执行事务回滚)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: CCyclicBarrier实战应用——批量数据多线程协调异步处理(主线程执行事务…

Linux学习笔记之七(shell脚本的基本语法)

Shell 1、Shell脚本2、常用运算符2、特殊语法4、关于变量的一些命令4.1、echo4.2、export4.3、read4.4、declare/typeset4.5、local4.6、unset 5、基本逻辑语法5.1、if判断5.2、for循环5.3、while循环5.4、case语句 6、函数定义7、多脚本链接 1、Shell脚本 学习shell脚本开发之…

C-语言每日刷题

目录 [蓝桥杯 2015 省 A] 饮料换购 题目描述 输入格式 输出格式 输入输出样例 # [蓝桥杯 2023 省 A] 平方差 题目描述 输入格式 输出格式 输入输出样例 说明/提示 【样例说明】 [NOIP2001 普及组] 数的计算 题目描述 输入格式 输出格式 输入输出样例 说明/提示 样例 1 解释 数据…

RK3568平台开发系列讲解(Linux系统篇)netlink 监听广播信息

** 🚀返回专栏总目录 文章目录 一、什么是netlink 机制二、netlink 的使用2.1、创建 socket2.2、绑定套接字2.3、接收数据沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍如何通过 netlink 监听广播信息。 一、什么是netlink 机制 Netlink 是 Linux 内核中…