开源飞控ACFLY:ADRC安排过渡过程

2023-12-18 07:18

本文主要是介绍开源飞控ACFLY:ADRC安排过渡过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘自:https://blog.csdn.net/weixin_40767422/article/details/87651614

 

开源飞控ACFLY:ADRC安排过渡过程

 

置顶 ACFLY开源飞控 2019-02-24 13:05:39 3466 收藏 13

分类专栏: ADRC自抗扰控制 文章标签: ADRC 自抗扰控制 过渡过程 ACFLY 跟踪微分器

版权

 

ACFLY原创文章,转载请说明出处https://blog.csdn.net/weixin_40767422/article/details/87651614

ADRC相关论文资料请加q群:180319060下载

上一篇我们讲了离散最速控制综合函数fsun,链接在此

这篇我们来讲讲ADRC的安排过渡过程,如下图:

 

       我们知道PID的误差求取直接是e=v-y,而控制目标 v 是有可能产生突变的,而对象输出 y 一定是连续的,用连续的缓变的变量追踪可能跳变的变量本身就是不合理的。韩老师针对PID等的这个缺陷提出的解决办法就是安排过渡过程,顾名思义就是安排个路径过去,让输入量缓慢的增大,使其与输出量的差值很小,即可使系统无超调的达到稳态,解决了 PID快速性与超调之间的矛盾。

       比如现在位置是10,目标是80,如果直接求取误差e就等于90了,安排过渡过程就是可以先到20,此时e1=10;再到50,e2=30;然后到80,e3=30。这只是举个例子(路径随意取的),实际安排过渡路径的方法ADRC里用的是离散跟踪微分器(Tracking Differetiator) ,即二阶纯积分对象的离散最速控制,关于TD的推导上篇博客已经说了。如下图:

                                                                      注:图中的fst函数理解为fsun函数

       这个离散系统可以实现x1跟踪输入信号v(t),x2跟踪v(t)的微分,可能这里大家会有点疑问,上图中的fsun函数是这样的:

                                       fsun( x1( t)-v( t) ,x2( t) ,r ,h)                         (1)式

而在上一篇博客所讲的论文里最后推导得到的fsun函数是这样的:

                                       fsun( x1( t) ,x2( t) ,r ,h)                                 (2)式

     可见第一个参数不一样, fsun函数推导的是从当前状态到目标状态的最速路径,论文里把目标状态设为0,目的是为了方便计算,得到的是(2)式,你可能会问如果目标状态不为0就不能用fsun函数了吗?答案是可以的,只需做一下变换就行,把目标状态设为0点,当前状态就变为了x1( t)-v( t),就得到了(1)式。或者可以这样理解,把x1( t)-v( t)看作是整体,当x1( t)-v( t)=0的时候,x1( t)=v( t),即从当前位置到达了目标位置,安排过渡过程我们用的就是(1)式。

        比如当前状态x1( t) 是10,目标状态v( t)是20,为了适应(2)式我们把目标状态设为0点即原点,那么当前位置就变为x1( t)-v( t) = -10,点还是那个点,只是坐标变换一下。TD的作用除了安排过渡过程还给出此过程的微分信号即X2。

        ADRC中非线性组合部份也可以用离散跟踪微分器来给出最佳控制量u,此时的fsun应该是fsun( e1( t) ,e2( t) ,r ,h) ,不用进行变换,因为我们就是让误差e1最速无超调衰减为0。

Conclusion:

       离散跟踪微分器可以用来安排路径,也可以用来控制,它可以输出状态变量x1,x2即过渡路径,也可以输出最优控制量u。

这篇关于开源飞控ACFLY:ADRC安排过渡过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/507536

相关文章

C/C++的编译和链接过程

目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理——预处理器cpp 2.Compilation编译——编译器cll ps:vs中优化选项设置 3.Assembly汇编——汇编器as ps:vs中汇编输出文件设置 4.Linking链接——链接器ld 符号 模块,库 链接过程——链接器 链接过程 1.简单链接的例子 2.链接过程 3.地址和

探索Elastic Search:强大的开源搜索引擎,详解及使用

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、

mysql中存储过过程和游标的联合使用

1.SQL如下: DELIMITER //DROP PROCEDURE IF EXISTS PrintAllEmployeeNames5;CREATE PROCEDURE PrintAllEmployeeNames5()BEGINDECLARE error_count INT DEFAULT 0;DECLARE num INT ;DECLARE done INT DEFAULT

示例:推荐一个基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器

一、目的:基于第三方开源控件库DataGridFilter封装的FilterColumnDataGrid,可以像Excel拥有列头筛选器,感兴趣的可以去下方链接地址查看开源控件库地址。本控件封装的目的在于将第三方库的皮肤和样式封装到皮肤库中可统一设置样式,同时生成nuget方便调用 二、效果如下 三、环境 VS2022 Net7 四、使用方式 1、安装nuget包:H.Con

ULTRAINTERACT 数据集与 EURUS 模型:推动开源大型语言模型在推理领域的新进展

在人工智能的浪潮中,大型语言模型(LLMs)已经成为推动自然语言处理技术发展的关键力量。它们在理解、生成语言以及执行复杂任务方面展现出了巨大的潜力。然而,尽管在特定领域内取得了显著进展,现有的开源LLMs在处理多样化和高难度的推理任务时,仍然难以与最前沿的专有模型相媲美。这一差距不仅限制了开源模型的应用范围,也阻碍了整个领域的发展和创新。 推理任务,特别是那些需要综合运用数学知识、编程技能和逻辑

开源低代码平台,JeecgBoot v3.7.0 里程碑版本发布

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领低代码开发模式(OnlineCoding-> 代码生成-> 手工MERGE), 帮助解决Java项目70%的重复工作,让开

web前端不可错过的开发工具–Adobe Brackets(开源、简洁强大的HTML、CSS和JavaScript集成开发环境)

Adobe Brackets是一个开源的基于HTML/CSS/JavaScript开发,运行在native shell上的集成开发环境。该项目由Adobe创建和维护,根据MIT许可证发布。提供Windows和OS X平台支持。 Brackets的特点是简约、快捷,没有很多的视图或者面板,它的核心目标是减少在开发过程中那些效率低下的重复性工作,例如浏览器刷新,修改元素的样式,搜索功能等等。

Class 对象在执行引擎中的初始化过程

一个 class 文件被加载到内存中需要经过 3 大步:装载、链接、初始化。 装载 装载是指 Java 虚拟机查找 .class 文件并生成字节流,然后根据字节流创建 java.lang.Class 对象的过程。 链接 链接过程分为 3 步:验证、准备、解析。 验证: 初始化 这是 class 加载的最后一步,这一阶段是执行类构造器方法的过程,并真正初始化类变量。 1.文件格式检验:检

绿联nas折腾过程中遇到的问题

绿联nas折腾过程中遇到的问题 目录 ssh权限问题超级用户 ssh 权限问题 使用chmod -R 777 目录/ 给指定目录及其所有子目录和文件设置最大的权限,权限设置为 rwxrwxrwx(读、写、执行权限给所有用户)。这个命令会将目录和文件的权限设置为非常宽松,允许所有用户对它们进行任何操作。 700只有所有者有读和写以及执行的权限 查看访问权限:ls -l 当前文件夹下所有用

对递归执行过程的简单描述

1. 分析代码 #include <stdio.h>void fun(int n){printf("1th - Level: %d Address: %d\n", n, &n);if(n < 3)fun(n+1);printf("2th - Level: %d Address: %d\n", n, &n);}int main(){fun(1);return 0;} 输出结果为: