自抗扰控制ADRC原理解析及案例应用

1. ADRC基本原理

1.1 ADRC的基本概念

自抗扰控制(Active Disturbance Rejection Control,ADRC)是一种先进的控制策略,由韩京清研究员于1998年提出。ADRC的核心思想是将系统内部和外部的不确定性因素视为总扰动,并通过扩张状态观测器(Extended State Observer,ESO)对其进行估计和补偿。这种方法不依赖于被控对象的精确数学模型,使得ADRC在处理非线性、时变以及存在未知扰动的复杂系统控制中表现出色。

ADRC的基本结构包括三个主要部分:跟踪微分器(Tracking Differentiator,TD)、扩张状态观测器(ESO)和非线性状态误差反馈控制律(Nonlinear State Error Feedback,NLSEF)。TD用于提取系统输入的连续信号和微分信号;ESO用于估计系统状态和总扰动;NLSEF则根据ESO的输出来设计控制律,实现对系统状态的精确控制。

1.2 ADRC的发展历史

自抗扰控制技术自提出以来,经历了从理论探索到工程应用的逐步发展。最初,ADRC主要在学术界进行研究,随着对其理论的深入理解和技术的进步,ADRC开始被应用于各种工业和工程领域。例如,在电机控制、机器人技术、汽车悬挂系统以及飞行控制系统中,ADRC都展现出了其卓越的控制性能。

随着计算机技术的发展,ADRC的实现变得更加高效和便捷。现代的ADRC控制器可以很容易地集成到各种控制系统中,提供实时的扰动估计和补偿。此外,ADRC的参数整定相对简单,通常只需要调整一个参数——带宽,这大大简化了控制器的设计和调试过程。

ADRC的另一个重要发展方向是与其他控制策略的融合,如模糊控制、神经网络和自适应控制等,以进一步提高系统的鲁棒性和适应性。这些融合策略不仅拓宽了ADRC的应用范围,也提高了其在复杂环境下的性能表现。

2. ADRC的工作原理

2.1 扩张状态观测器ESO

扩张状态观测器(Extended State Observer,ESO)是ADRC中的关键组件之一。ESO的主要任务是估计系统状态和总扰动。在ADRC中,总扰动被视为系统状态的一部分,与系统状态一起被观测和估计。ESO的设计通常基于系统动态方程的线性化或近似模型,其输出包括系统状态的估计值和总扰动的估计值。

ESO的一般形式可以表示为:

\dot{\hat{x_{1}}}=\dot{\hat{x_{2}}}

\dot{\hat{x_{2}}}=\dot{\hat{x_{3}}}+l_{1}(y-\dot{\hat{x_{1}}})

\dot{\hat{x_{3}}}=-l_{2}\dot{\hat{x_{3}}}+l_{1}y

其中,\dot{\hat{x_{1}}}\dot{\hat{x_{2}}}​ 和 \dot{\hat{x_{3}}}分别是系统状态和总扰动的估计值,y 是系统的测量输出,l_{1}​ 和 l_{2}​ 是ESO的参数。

2.2 跟踪微分器TD

跟踪微分器(Tracking Differentiator,TD)用于生成跟踪信号及其微分信号。TD的设计目的是解决传统微分器在处理不连续或带噪声的测量信号时的问题。TD能够提供一个连续且无噪声的信号,同时保持对阶跃输入的快速响应。

TD的数学表达式为:

TD(u(t),y(t),v(t))=\begin{bmatrix} v(t)\\ \dot{v(t)} \end{bmatrix}

其中,u(t) 是控制输入,y(t) 是系统输出,v(t) 是TD的输出,表示跟踪信号,而 \dot{v(t)} 是 v(t) 的导数,即跟踪信号的微分。

2.3 非线性状态误差反馈控制律NLSEF

非线性状态误差反馈控制律(Nonlinear State Error Feedback,NLSEF)是ADRC的最后一个环节,负责根据ESO和TD提供的信息生成控制信号。NLSEF的设计通常基于最速控制理论或非线性控制理论,以实现对系统状态的快速且精确的控制。

NLSEF的控制律可以表示为:

u(t)=-k_{1}e(t)-k_{2}\dot{e(t)}-k_{3}e^{\alpha }(t)

其中,e(t) 是系统输出与期望输出之间的误差,\dot{e(t)} 是误差的导数,k_{1}​、k_{2}​ 和 k_{3}​ 是控制律的参数,\alpha 是非线性项的指数,用于增强控制律的鲁棒性。

3. ADRC的参数设计

3.1 参数整定方法

参数整定是ADRC应用中的关键步骤,它直接影响到控制效果和系统稳定性。ADRC的参数主要包括扩张状态观测器(ESO)的参数和非线性状态误差反馈控制律(NLSEF)的参数。

  • 扩张状态观测器(ESO)参数:ESO的参数决定了对系统状态和扰动的估计精度。参数设计需要考虑观测器的收敛速度和对噪声的抑制能力。一般而言,较大的观测器增益可以加快收敛速度,但同时也可能放大噪声的影响。
  • 非线性状态误差反馈控制律(NLSEF)参数:NLSEF的参数设计涉及到控制律的非线性特性,这些特性可以提供更好的鲁棒性和适应性。参数设计需要平衡系统的超调、稳定性和响应速度。

参数整定方法通常包括基于经验的调整、基于模型的优化以及基于仿真的迭代优化等。在实际应用中,参数整定往往需要结合系统特性和控制需求进行多次调整和验证。

3.2 参数对系统性能的影响

参数的选择对ADRC控制系统的性能有着显著的影响。

  • 收敛速度:参数设置可以影响系统达到稳态所需的时间。较大的ESO增益可以加快收敛速度,但过大可能导致系统过冲。
  • 超调与稳定性:NLSEF的参数可以调整系统的超调量和稳定性。适当的参数设置可以减少超调,提高系统的稳定性。
  • 鲁棒性:ADRC的参数设计需要考虑到系统的不确定性和外部扰动。合理的参数可以提高系统对这些不确定性的抵抗能力。
  • 适应性:参数的调整可以提高系统对参数变化和操作条件变化的适应性,确保在不同工况下都能保持良好的控制效果。

车道保持辅助系统(LKAS)的ADRC实例

自抗扰控制(ADRC)可以应用于自动驾驶汽车的某些控制问题,例如车道保持辅助系统(Lane Keeping Assist System, LKAS)。以下是一个ADRC应用于车道保持辅助系统的例子。假设自动驾驶汽车的横向控制模型可以简化为一个二阶系统,用于描述车辆相对于车道中心的横向位置 y 和横向速度 \dot{y} 的动态行为:

m\ddot{y}+b\dot{y}+ky=u

其中:

  • m 是车辆的质量
  • b 是与横向速度相关的阻尼系数
  • k 是与横向位置相关的弹性系数
  • u 是控制输入,可以是转向角或转向力矩

ADRC控制器的目标是使车辆的横向位置 y 跟踪车道中心线。

ADRC控制器设计

扩张状态观测器(ESO): 用来估计车辆的横向位置 y 和横向速度 \dot{y}​,以及总扰动 d

\dot{\hat{y}}=\hat{\dot{y}}+\hat{d}

\hat{\dot{y}}=-\frac{a_{1}}{m}(\hat{y}-y_{ref})-\frac{a_{2}}{m}\hat{\dot{y_{2}}}+\frac{1}{m}u

其中,y_{ref} 是车道中心线的参考位置。

非线性状态误差反馈控制律(NLSEF):

u=k_{p}(\hat{y}-y_{ref})+k_{i}\int (\hat{y}-y_{ref})dt+k_{d}(\hat{\dot{y}}-\dot{y_{ref}})

其中,k_{p}​,k_{i}k_{d}​ 是控制增益,\dot{y_{ref}}​ 是车道中心线的参考横向速度。

总扰动估计器:

\dot{\hat{d}}=-\frac{a_{3}}{m}(\hat{y}-{y_{ref}})

其中,a_{3}​ 是估计器参数。

C++代码示例

#include <iostream>
#include <cmath>// 系统参数
const double m = 1500; // 车辆质量,单位:kg
const double b = 100; // 阻尼系数,单位:Ns/m
const double k = 20000; // 弹性系数,单位:N/m
const double a1 = 30; // ESO参数
const double a2 = 5; // ESO参数
const double a3 = 10; // 总扰动估计器参数// 控制参数
const double kp = 1; // 比例增益
const double ki = 0.1; // 积分增益
const double kd = 0.5; // 微分增益// 初始状态
double y = 0; // 横向位置
double y_dot = 0; // 横向速度
double y_hat = 0; // 横向位置估计
double y_dot_hat = 0; // 横向速度估计
double d_hat = 0; // 总扰动估计// 参考轨迹
double y_ref = 0; // 车道中心线的参考位置// 时间参数
const double dt = 0.01; // 时间步长,单位:s
double t = 0; // 当前时间// 模拟函数
void simulateADRC() {while (true) {t += dt;// 更新估计值y_dot_hat += (-a1 * (y_hat - y_ref) - a2 * y_dot_hat + u / m) * dt;y_hat += y_dot_hat * dt;d_hat += (-a3 * (y_hat - y_ref)) * dt;// 计算控制输入double u = kp * (y_hat - y_ref) + ki * (y_hat - y_ref) * dt + kd * (y_dot_hat - 0); // 假设车道中心线速度为0// 输出当前状态和控制输入std::cout << "Time: " << t << ", y: " << y << ", y_dot: " << y_dot << ", u: " << u << std::endl;// 更新车辆的横向位置和速度(这里简化处理,假设车辆响应控制输入)y += y_dot * dt;y_dot += (u - b * y_dot - k * y) / m * dt;// 检查是否达到模拟时间if (t > 10) break;}
}int main() {simulateADRC();return 0;
}

 

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

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

相关文章

华硕飞行堡垒键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号&#xff1a; 型号 ASUS FX53VD&#xff08;华硕-飞行堡垒&#xff09; 板号&#xff1a;GL553VD 故障情况描述&#xff1a; 键盘无法使用&#xff0c;键盘除开机键外…

heic格式怎么转成jpg?3种格式转换方法分享

heic格式怎么转成jpg&#xff1f;将HEIC格式的图片转换为JPG格式&#xff0c;是图像处理中的常见需求&#xff0c;它极大地方便了跨平台分享与浏览。通过专业的转换软件&#xff0c;我们可以轻松实现这一转换过程&#xff0c;确保图像内容在更多设备和环境中得到兼容和展示。这…

vue 接口 传参token对 返回数据不对原因

接口不携带参数 接口token 正确 但是返回数据 返回的上一次登录的数据 处理 携带个时间戳

Python基础知识学习总结(五)

一. 字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#xff0c;每个对之间用逗号( , )分割&#xff0c;整个字典包括在花括号 {} 中 。 dict 作为 Python 的关键字和内置函数&#xff0c;变量名不建议命名…

多商户入驻商城系统源码+收银系统源码

随着移动互联网的不断发展&#xff0c;私域小程序对于零售门店来说早已不再陌生。很多门店也都搭建了自己专属的私域商城&#xff0c;但是私域商城一直是不温不火的状态&#xff0c;尤其针对一些腰尾部商户来说&#xff0c;无小程序运营能力&#xff0c;小程序流量匮乏&#xf…

Unity 波函数坍缩算法随机地图生成

Unity 波函数坍缩算法随机地图生成 波函数波函数基本概念位置空间波函数动量空间波函数两种波函数之间的关系波函数的本征值和本征态波函数坍缩 熵是什么熵作为状态函数时间之箭 实现原理举个例子&#xff1a;2D迷宫地图生成 Unity 如何实现前期准备单元格代码瓦片地图代码波函…

jpg怎么转换成pdf?6个简单方法,实现jpg转换成pdf

你是否也曾想将jpg图片转换为pdf格式文档呢&#xff1f;亦或者在处理文档或制作报告时&#xff0c;不知道怎么才能更快地将多张图片整合成一个pdf文件呢&#xff1f;如果你正在寻找简单快速的方法&#xff0c;又有哪些工具可以帮助您完成图片转pdf呢&#xff1f;别着急&#xf…

“LOCAL_LISTENER”参数导致业务无法连接数据库,文末附Oracle连接故障检查监听的排查流程

1. 背景及问题 今天在Oracle BCV技术[1]做数据同步&#xff0c;建立生产库的测试库&#xff0c;需要DBA配合同步前后的停库和起库。在同步完起库后&#xff0c;有部门反应同步好的测试库连接不上去。 2. 问题排查 以我当前的知识储备&#xff0c;能想到的可能就是以下几点进…

深入浅出:你需要了解的用户数据报协议(UDP)

文章目录 **UDP概述****1. 无连接性****2. 尽最大努力交付****3. 面向报文****4. 多种交互通信支持****5. 较少的首部开销** **UDP报文的首部格式****详细解释每个字段** **UDP的多路分用模型****多路分用的实际应用** **检验和的计算方法****伪首部的详细内容****检验和计算步…

国内智能车零部件头号玩家引望:年出货300万套,估值1150亿

作者 |德新 编辑 |王博 8月19日&#xff0c;长安汽车发布公告&#xff0c;其联营企业阿维塔科技在当日的董事会上&#xff0c;通过了对引望公司的投资方案议案。 阿维塔将在8月20日与华为签约&#xff0c;阿维塔将出资115亿元&#xff0c;对引望公司持股10%&#xff0c;华为持…

用Maven开发Spring Boot 项目

一、初识 Spring Boot Spring Boot框架是一 套开源的后台开发框架&#xff0c; 继承了Spring MVC框架的前辈SSM框架的优秀特性&#xff0c;通过注解大幅减少程序员写配置的工作量。从企业开发角度来看&#xff0c;它提供了自动化配置&#xff0c;内嵌容器和兼容Maven等核心功…

设计模式六大原则(一)–单一职责原则(C#)

文章目录 1. 什么是单一职责原则&#xff1f;2. 单一职责原则的定义3. 单一职责原则的重要性4. 单一职责原则的示例&#xff08;C#&#xff09;5.如何判断是否违反单一职责原则6. 单一职责原则的应用场景7. 总结 在软件开发领域&#xff0c;设计模式是解决常见问题的经典解决方…

RK3588J正式发布Ubuntu桌面系统,丝滑又便捷!

本文主要介绍瑞芯微RK3588J的Ubuntu系统桌面演示&#xff0c;开发环境如下&#xff1a; U-Boot&#xff1a;U-Boot-2017.09 Kernel&#xff1a;Linux-5.10.160 Ubuntu&#xff1a;Ubuntu20.04.6 LinuxSDK&#xff1a; rk3588-linux5.10-sdk-[版本号] &#xff08;基于rk3…

如何使用mmdetection训练实例分割模型?

安装 anoconda 从官方网站下载并安装。 配置环境 conda create --name openmmlab python3.8 -y conda activate mmdet 安装 PyTorch 注意&#xff1a;这个步骤很关键&#xff0c;否则后面会出问题。一定要确保自己电脑当前安装和配置的cuda版本。 使用命令&#xff1a;nvcc …

做数据采集,你真的了解PLC插槽号吗?

有很多PLC可以在系统里配置多个独立CPU&#xff0c;各自有自己的任务。也有一些PLC&#xff0c;虽然只有一个CPU&#xff0c;但是&#xff0c;其位置是可变的。外部进行数据采集时&#xff0c;首先要搞明白采集目标是哪个CPU&#xff0c;否则&#xff0c;就会张冠李戴&#xff…

【运维】从一个git库迁移到另一个库

工作目录&#xff1a; /home/java/hosts 10.60.100.194 脚本 hosts / hostsShell GitLab (gbcom.com.cn) 核心代码

FFmpeg的入门实践系列一

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力! 江山如画&#xff0c;客心如若&#xff0c;欢迎到访&#xff0c;一展风采 文章目录 参考环境本系列的适用人群FFmpeg的简介FFmpeg…

win11安装python及pycharm与webots联合仿真

1、查看Windows系统 是否已安装Python及版本 【冰糖Python】Windows系统 查看已安装的Python版本_怎么确定windows上成功安装python-CSDN博客 好&#xff0c;确认没装下面装python37 2、安装python3.7.9 参考教程Python 3.82安装教程&#xff08;Windows11、超详细版&#x…

C语言基础(六)

一维数组&#xff1a; C语言中的数组是一种基本的数据结构&#xff0c;用于在计算机内存中连续存储相同类型的数据。 数组中的每个元素可以通过索引&#xff08;或下标&#xff09;来访问&#xff0c;索引通常是从0开始的。 数组的大小在声明时确定&#xff0c;并且之后不能改…

ansible搭建+ansible常用模块

ansible搭建 管理机安装ansible,被管理节点必须打开ssh服务 1.管理机安装ansible yum -y install ansible 2.查看版本 ansible --version ansible 2.9.27 3.查找配置文件 find /etc/ -name "*ansible*" /etc/ansible /etc/ansible/ansible.cfg 4.三台被管理机…