自抗扰(ADRC)控制原理及控制器设计

2023-05-16

自抗扰控制是在PID控制算法基础上进行改进的新型控制方法,它具有不依赖于控制对象模型、不区分系统内外扰的结构特点。常用的自抗扰控制器主要由跟踪微分器(Tracking Differentiator,TD)、扩张状态观测器(Extended State Observer,ESO)和非线性状态误差反馈控制率(Nonlinear State Error Feedback,NLSEF)三部分组成。

跟踪微分器的作用是针对被控对象的输入特点对其提取所需要的信号。

扩张状态观测器作为自抗扰控制的核心组成部分,一方面可以对系统中重要的状态变量进行跟踪,便于实时了解系统状态;另一方面还能根据系统模型内外扰动的总体作用量,以反馈的形式对其加以及时补偿,有助于提高系统鲁棒性。

非线性状态误差反馈控制率是一种非线性的组合方式,输入是TD输出的状态变量与ESO状态估计值之间的误差,输出结合ESO的总扰动补偿值得到控制器的控制量。


这里以二阶系统为例详细介绍自抗扰控制器各部分的设计方法。

跟踪微分器(TD)

经典微分器的形式为:

y = \frac{s}{\tau s + 1}v = \frac{1}{\tau}\left( 1 - \frac{1}{\tau s + 1} \right)v,

y(t) \approx \frac{1}{\tau}\left( v(t) - v(t - \tau) \right) \approx \dot{v}(t)

式中v(t)y(t)分别是系统的输入、输出信号。当对信号u(t)叠加随机噪声n(t)

y(t) \approx \frac{1}{\tau}\left( v(t) - v(t - \tau) \right) + \frac{n(t)}{\tau} \approx \dot{v}(t) + \frac{n(t)}{\tau}

\tau越小时,系统输出的“噪声放大”就越严重。

设二阶系统为:

\left\{\begin{matrix} \begin{aligned} & \dot{x}_{\text{1}}=x_{\text{2}} \\ & {​{​{\dot{x}}}_{\text{2}}}=u,\left| u \right|\le r \end{aligned} \end{matrix}\right.         

上式的“快速最优控制”系统为:  

\left\{ \begin{array}{l} {​{\dot{x}}_{\text{1}} = x_{\text{2}}} \\ {​{\dot{x}}_{\text{2}} = - r{sgn}(x_{\text{1}} + x_{\text{2}}\left| x_{\text{2}} \right|/\text{2}r\mspace{6mu})} \\ \end{array} \right.

直接用跟踪微分器来进行计算,x_{2}|x_{2}|项会使系统在进入“稳态”时易产生“高频颤振”。因此,考虑“跟踪微分器”的离散形式。

\left\{ \begin{array}{l} {x_{\text{1}}(k + 1) = x_{\text{1}}(k) + hx_{\text{2}}} \\ {x_{\text{2}}(k + 1) = x_{\text{2}}(k) + hu,|u| \leq r} \\ \end{array} \right.

对上式求“快速控制最优综合函数”,得

\begin{aligned} & u=fst({​{x}_{\text{1}}},{​{x}_{\text{2}}},r,h); \\ & d=rh\text{;}{​{d}_{\text{0}}}=dh; \\ & y={​{x}_{\text{1}}}+h{​{x}_{\text{2}}};{​{a}_{\text{0}}}={​{(d^{2}+\text{8}r\left| y \right|)}^{\frac{\text{1}}{\text{2}}}}; \\ & a=\left\{ \begin{aligned} & {​{x}_{\text{2}}}+{({​{a}_{\text{0}}}-d)}/{\text{2},\left| y \right|>{​{d}_{\text{0}}}}\; \\ & {​{x}_{\text{2}}}+{y}/{h,\left| y \right|\le {​{d}_{\text{0}}}}\; \\ \end{aligned} \right. \\ & fst=-\left\{ \begin{aligned} & {ra}/{d},\left| a \right|\le d \\ & rsgn (a),\left| a \right|>d \\ \end{aligned} \right. \end{aligned}

式中,r称作“速度因子”,与跟踪速度有关,r越大,跟踪速度越快;h为积分步长。

得到离散系统

\left\{ \begin{array}{l} {x_{\text{1}}(t + h) = x_{\text{1}}(t) + hx_{\text{2}}(t)} \\ {x_{\text{2}}(t + h) = x_{\text{2}}(t) + hfst(x_{\text{1}}(t) - v(t),x_{\text{2}}(t),r,h_{\text{0}})} \\ \end{array} \right.

其中h_{0}为“滤波因子”,主要对噪声起滤波作用,取适当大于积分步长h的参数,可消除速度曲线进入稳态时刻的超调现象。

扩张状态观测器(ESO)

考虑系统

\left\{ \begin{array}{l} {​{\dot{x}}_{\text{1}} = x_{\text{2}}} \\ {​{\dot{x}}_{\text{2}} = f(x_{\text{1}},x_{\text{2}},t)} \\ {y = x_{\text{1}}} \\ \end{array} \right.

大多数情况下,f(x_{1},x_{2},t)未知,这时可将其当作扰动,用“非光滑反馈”等效其作用。

x_{3}=f(x_{1},x_{2},t)\dot{x}_{3}=g(x_{1},x_{2},t),则g(x_{1},x_{2},t)也是未知函数,于是有

\begin{array}{l} \left\{ \begin{array}{l} {​{\dot{x}}_{\text{1}} = x_{\text{2}}} \\ {​{\dot{x}}_{\text{2}} = x_{\text{3}} + bu} \\ {​{\dot{x}}_{\text{3}} = g(x_{\text{1}},x_{\text{2}},t)} \\ {y = x_{\text{1}}} \\ \end{array} \right. \\ {\varepsilon_{\text{1}} = z_{\text{1}} - y} \\ \left\{ \begin{array}{l} {​{\dot{z}}_{\text{1}} = z_{\text{2}} - \beta_{\text{01}}\varepsilon_{\text{1}}} \\ {​{\dot{z}}_{\text{2}} = z_{\text{3}} - \beta_{\text{02}}fal(\varepsilon_{\text{1}},\alpha_{\text{1}},\delta) + bu} \\ {​{\dot{z}}_{\text{3}} = - \beta_{\text{03}}fal(\varepsilon_{\text{1}},\alpha_{\text{2}},\delta)} \\ \end{array} \right. \\ \end{array}

若系统“内扰”和“外扰”的总和,即“总扰动”f(x_{1},x_{2},t)=f_{0}(x_{1},x_{2})+f_{1}(x_{1},x_{2},t),其中f_{0}(x_{1},x_{2})已知,x_{3}=f_{1}(x_{1},x_{2},t),则有

\begin{array}{l} {u = u_{\text{0}} - {​{(x_{\text{3}}(t) + f_{\text{0}}(x_{\text{1}}(t),x_{\text{2}}(t)))}/b}} \\ \left\{ \begin{array}{l} {​{\dot{x}}_{\text{1}} = x_{\text{2}}} \\ {​{\dot{x}}_{\text{2}} = bu_{\text{0}}} \\ {y = x_{\text{1}}} \\ \end{array} \right. \\ \end{array}

系统被“线性化”成双积分装置,即不确定系统的“实时动态线性化”。

非线性PID

把经典PID的“加权和”改成“非线性组合”而得“非线性PID”。一种可用的“非线性组合”形式为:

fal(e,\alpha,\delta) = \left\{ \begin{array}{l} {|e|^{\alpha}{sgn}(e),|e| > \delta,} \\ {e/{\delta^{1 - \alpha},|e| \leq \delta,}} \\ \end{array} \right.\delta > \text{0}

\alpha <1时,函数具有“小误差,大增益”;“大误差,小增益”的特性。

设“非线性PID”输入为e_{1}e_{2}e_{3},则可采用合适的控制律:

u = \beta_{\text{0}}fal(e_{\text{0}},\alpha_{\text{0}},\delta) + \beta_{\text{1}}fal(e_{\text{1}},\alpha_{\text{1}},\delta) + \beta_{\text{2}}fal(e_{\text{2}},\alpha_{\text{2}},\delta)

设计参数时,常令\alpha\text{0} \leq \alpha\text{1} \leq \alpha\text{2}

ADRC整体结构

ADRC控制器结构如图所示。自抗扰的根本在于使用补偿项将系统“不确定模型”和“未知外扰”的总和作用共同作为总扰动进行观测和补偿。

其中,v_{0}为目标速度,v为实际速度,v_{1}为跟踪速度,v_{2}为跟踪加速度,z_{1}为观测速度,z_{2}为观测加速度,z_{3}为观测扰动。

 自抗扰控制器算法:

被控对象:

\left\{ \begin{array}{l} {​{\dot{x}}_{\text{1}} = x_{\text{2}}} \\ {​{\dot{x}}_{\text{2}} = f(x_{\text{1}},x_{\text{2}},w,t) + bu} \\ {y = x_{\text{1}}} \\ \end{array} \right.

安排过渡过程(TD)为设定值

\left\{ \begin{array}{l} {​{\dot{x}}_{\text{1}} = x_{\text{2}}} \\ {​{\dot{x}}_{\text{2}} = f(x_{\text{1}},x_{\text{2}},w,t) + bu} \\ {y = x_{\text{1}}} \\ \end{array} \right.

估计状态和总扰动(ESO)

\begin{array}{l} {\varepsilon_{\text{1}} = z_{\text{1}}(k) - y(k)} \\ \left\{ \begin{array}{l} {z_{\text{1}}(k + 1) = z_{\text{1}}(k) + h(z_{\text{2}} - \beta_{\text{01}}\varepsilon_{\text{1}})} \\ {z_{\text{2}}(k + 1) = z_{\text{2}}(k) + h(z_{\text{3}}(k) - \beta_{\text{02}}fal(\varepsilon_{\text{1}},\alpha_{\text{1}},\delta) + bu(k))} \\ {z_{\text{3}}(k + 1) = z_{\text{3}}(k) - h\beta_{\text{03}}fal(\varepsilon_{\text{1}},\alpha_{\text{2}},\delta)} \\ \end{array} \right. \\ \end{array}

控制量的形成

\begin{array}{l} {e_{\text{1}} = v_{\text{1}}(k) - z_{\text{1}}(k),} \\ {e_{\text{2}} = v_{\text{2}}(k) - z_{\text{2}}(k),} \\ {u_{\text{0}} = \beta_{\text{01}}fal(e_{\text{1}},\alpha_{\text{1}},\delta) + \beta_{\text{02}}fal(e_{\text{2}},\alpha_{\text{2}},\delta),} \\ {u(k) = u_{\text{0}} - {​{z_{\text{3}}(k)}/b},} \\ \end{array}

式中,

fal(\varepsilon,\alpha,\delta) = \left\{ \begin{array}{l} {|\varepsilon|^{\alpha}{sgn}(\varepsilon),|\varepsilon| > \delta,} \\ {\varepsilon/{\delta^{1 - \alpha},|\varepsilon| \leq \delta,}} \\ \end{array} \right.\delta > \text{0}

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

自抗扰(ADRC)控制原理及控制器设计 的相关文章

  • ADRC自抗扰控制自学笔记(包含simulink仿真)(转载)

    他这里让我很好理解了跟踪微分器 非线性PID 准确说是非线性PD xff0c 所以可以看到输入是两根线而不是三根线 xff09 也就是说传统PID是线性的 xff1f 但是不是那些系统是非线性的 xff0c 比如无人机 xff0c 平衡车
  • 关于ADRC的一些粗鄙之语

    看这篇我感受到我控制理论方面的基础还掌握得不够 摘自 xff1a https zhuanlan zhihu com p 156228260 关于ADRC的一些粗鄙之语 隔壁uncle wang 机械工程Ph D amp 控制算法小萌新 ac
  • (ADRC)自抗扰控制器学习总结(一)

    蓝色字体是我的评注 摘自 xff1a https blog csdn net qq 27270029 article details 78937854 ADRC自抗扰控制基本思想要点 xff1a 1 标准型与总扰动 xff0c 扩张状态与扰
  • 这看到一个内环ADRC 外环PID的。

    这看到一个内环ADRC 外环PID的 https oversea cnki net Kcms detail detail aspx filename 61 1018818866 nh amp dbcode 61 CMFD amp dbnam
  • 我的ADRC调参经验总结

    提示 xff1a 本文是在前人基础上搭建的ADRC模型 xff0c 并根据这一模型学习如何对其进行调参时产生的 xff0c 部分结论来自论文 目录 前言一 控制系统简介二 调参步骤1 前后结果效果对比2 调参经验 总结参考链接 前言 ADR
  • ADRC算法Auto Disturbances Rejection control

    自抗扰控制 其中 xff0c e 61 v t y t 是控制系统参考输入量v t 与被控对象输出量y t 之间的差值 xff0c kp比例系数 ki积分系数 xff0c xff0c kd微分系数 优点 xff1a 1 仅由误差来决定控制
  • 用c语言实现adrc算法

    ADRC Adaptive Dynamic Range Control 算法是一种用于自动调节动态范围的方法 在 C 语言中实现 ADRC 算法 xff0c 您需要首先了解 ADRC 算法的基本原理 xff0c 然后根据公式把算法按照 C
  • ADRC例程

    ADRC 优化fhan 自抗扰控制入门 自抗扰死忠粉 ADRC H span class token macro property span class token directive keyword ifndef span ADRC H
  • 自抗扰(ADRC)控制原理及控制器设计

    自抗扰控制是在PID控制算法基础上进行改进的新型控制方法 xff0c 它具有不依赖于控制对象模型 不区分系统内外扰的结构特点 常用的自抗扰控制器主要由跟踪微分器 xff08 Tracking Differentiator xff0c TD
  • 自抗扰控制ADRC之扩张观测器

    目录 前言 1 被控对象 被观测对象 2 非线性观测器 2 1仿真分析 2 2仿真模型 2 3仿真结果 3 线性观测器 3 1仿真模型 3 2仿真结果 4 总结和学习问题 前言 什么叫观测器 xff1f 为什么该类观测称为扩张观测器 xff
  • 【ADRC】跟踪微分器

    在上一篇文章中 xff0c 分析了PID算法的基本数学原理 xff0c 从PID算法的原理与实际应用 xff0c 是可以看出其PID的优点与缺点的 xff0c ADRC算法 自抗扰控制 也可以说是针对PID算法的一些缺点 xff0c 或者说
  • PLC的自抗扰控制(ADRC)算法

    自抗扰控制算法 网上很多文章有理论推导和讲解 大家也可以关注韩京清教授的论文和书籍 这里就不赘述了 博途PLC ADRC自抗扰控制完整源代码可以参看下面这篇文章 博途PLC 1200 1500PLC自抗扰控制 ADRC 完整SCL源代码 R
  • ADRC/Matlab一步步实现跟踪微分器TD(附完整PLC测试代码链接)

    TD微分器的主要作用 就是安排过渡过程 产生跟踪信号和微分信号 滤除噪声 关于Adrc的理论分析不是本篇博客的重点 主要也是能力所限 相关理论大家可以看韩京清教授的论文 专栏有简单的学习笔记 感兴趣的同学可以看看 链接如下 ADRC自抗扰的
  • ADRC的simulink仿真实现与m代码实现

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

    1 ADRC控制原理和结构 xff08 1 xff09 最速跟踪微分器 TD xff08 2 xff09 扩张状态观测器 ESO xff08 3 xff09 非线性状态误差反馈 NLSEF 2 ADRC控制仿真 xff08 1 xff09
  • ADRC Ardupilot代码分析

    记录一下自己对于Ardupilot ADRC控制代码的一些理解 GitHub链接 ADRC Active Disturbance Rejection Control by MichelleRos Pull Request 20243 Ard
  • 自抗扰控制(ADRC)仿真系统(matlab/simulink)的搭建

    一 现在关于自抗扰控制技术方面的研究已经比较成熟了 xff0c 基本上熟悉结构以后都可以找到例子实现 xff0c 今天以一个简单的例子来介绍自抗扰控制的仿真系统搭建 xff0c 不必畏惧 xff0c 熟悉皆可达 1 首先自抗扰控制分为TD
  • ADRC(自抗扰控制器)技术附Matlab代码框架

    自抗扰控制器 Auto Active Disturbances Rejec ion Controller ADRC 是韩京清学者提出的 xff0c 是一种继PID控制器后的一种新型的实用的控制技术 它不是一种独立的技术 xff0c 可以理解
  • ADRC自抗扰控制学习

    入门 自抗扰控制01 xff1a 为何ADRC会成为百年PID算法的继承者 xff1f http news eeworld com cn mp ZLG a23516 jspx 自抗扰控制02 ADRC如何避免执行错误命令 http news
  • LADRC的学习——用simulink搭建仿真模型

    作者 墨心 时间 2019 7 25 用simulink搭建仿真模型 前面两篇博客主要讲了ADRC的相关概念和知识 并且尝试着搭建模型和仿真 之后学习了PID的相关知识 了解了Kp Ki Kd三个参数的意义 接下来 主要根据高志强教授的论文

随机推荐

  • 【剑指offer】二叉树中和为某一值的路径(一)

    直接对二叉树进行前序遍历 xff0c 每次累加当前节点的值 xff0c 如果到达叶子节点 xff0c 判断当前累加和是否等于给定值 xff0c 是则返回true xff0c 否则继续遍历二叉树 xff0c 若找不到则返回false span
  • Docker 容器互联

    1 基于 Volume 互联 1 1 存储 Driver Aufs Docker最早支持的driver xff0c 但它只是Linux内核的一个补丁集 Device Mapper xff1a Linux2 6 内核提供的一种从逻辑设备到物理
  • torch.cdist高效计算大矩阵相似度

    问题定义 现有矩阵 A R N C
  • 【剑指offer】二叉搜索树与双向链表

    双向链表从左到右的顺序很明显就是中序遍历二叉树输出的顺序 xff0c 因此核心思想就是使用中序遍历 xff0c 在遍历过程中调整指针的指向 需要用到两个全局变量 xff08 递归的题目不用吝啬全局变量 xff09 xff0c c u r N
  • win10远程计算机

    确保被控制电脑远程功能开启 控制面板 61 61 gt 允许远程访问 选中允许远程连接到此计算机 查看被控制电脑的用户名和ip 命令行 query user xff0c 下面的用户名为远程登录的用户名 密码为改账户的登录密码 xff08 不
  • 【剑指offer】对称的二叉树

    递归法 通过两个指针同时递归遍历左右两个子树 xff0c 判断当前遍历到的两个节点是否相等 如下图 xff0c 需要注意的是 xff0c 左右子树的遍历不是完全一样 xff0c 左子树采用左右遍历 xff0c 右子树采用右左遍历 xff0c
  • 【剑指offer】判断是不是平衡二叉树

    这题只需要在求二叉树深度的基础上扩展一下即可 xff0c 下面为求二叉树深度的代码 span class token keyword public span span class token class name HashMap span
  • Linux查看硬盘属性(机械硬盘/固态硬盘)

    通过命令lsblk d o name rota查看 xff0c 0表示固态硬盘 xff0c 1表示机械硬盘 xff0c sda为机械硬盘 xff0c sdb为固态硬盘
  • python计算众数scipy

    计算如下数组中每一行的众数 xff0c 期望结果 xff0c 第一行为1 xff0c 第二行为3 0 0 1 1 1 2 3 3 2 3 使用scipy 的统计包stats中的mode函数 xff0c 指定第二个维度 xff0c 返回元组
  • 【剑指offer】序列化二叉树

    解题思路 序列化时 xff0c 可以通过各种遍历方法 xff0c 例如层序遍历 递归遍历对二叉树进行遍历 xff0c 遍历过程中将每个节点的值拼接到字符串中 xff0c 注意每个节点之间用一个标识符隔开 xff0c 例如 xff0c 这是为
  • Linux cuda11.1安装torch_scatter,torch-sparse,torch-cluster,torch-spline-conv,torch-geometric

    创建虚拟环境 conda create n torch18 span class token assign left variable python span span class token operator 61 span span c
  • pytorch查看张量占用内存大小

    element size返回单个元素的字节大小 xff0c nelement返回元素个数 span class token keyword import span torch a span class token operator 61 s
  • MySQL8.0 集群安装 (K8S)

    尝试了很多版本的mysql镜像 xff0c 都存在这样那样的的问题 原始需求中 xff0c 需要同时支持x86 64 AMD64 和aarch64 ARM64V8 xff0c 最后找到Oracle官方出品的MySQL Server 8 0镜
  • 使用latex导出IEEE文献格式

    创建一个tex文件 xff0c 内容如下 documentclass span class token punctuation span a4paper span class token punctuation span 10pt span
  • IDEA中设置python解释器(不同虚拟环境)

    按住Ctrl 43 Shift 43 Alt 43 s xff0c 或 File gt Project Structure xff0c 在Module SDK处下拉找到对应的python解释器 xff0c 如果第一次添加python解释器
  • TF-IDF

    TF IDF xff08 term frequency inverse document frequency xff09 是一种用于信息检索与数据挖掘的常用加权技术 TF意思是词频 Term Frequency xff0c IDF意思是逆文
  • 第一次写博客-C/C++软件开发工程师需要学习哪些东西?

    学习路线概述 概述数据结构和算法操作系统计算机网络数据库设计模式 概述 作为一名本科机械电子 xff0c 研究生研究计算机视觉方向的211应届毕业生 xff0c 如何才能从事C C 43 43 软件开发类的工程师呢 xff1f 如果能有机会
  • Vue中使用v-for不能用index作为key值

    今天在改一个项目 xff0c 有一个 lt el tabs gt 的列表循环 xff0c 需要根据权限控制列表项的显示 xff0c 代码如下 xff1a span class token operator lt span template
  • java 冒泡排序 选择排序 插入排序及其异同点

    交换两坐标位置的swap 函数 之后要用到 span class token keyword public span span class token keyword static span span class token keyword
  • 自抗扰(ADRC)控制原理及控制器设计

    自抗扰控制是在PID控制算法基础上进行改进的新型控制方法 xff0c 它具有不依赖于控制对象模型 不区分系统内外扰的结构特点 常用的自抗扰控制器主要由跟踪微分器 xff08 Tracking Differentiator xff0c TD