【自抗扰控制ADRC】扩张观测器ESO

2023-11-22 10:50

本文主要是介绍【自抗扰控制ADRC】扩张观测器ESO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传送门

  • 前言
  • 线性状态观测器
    • 龙伯格观测器
  • 非线性状态观测器
  • 扩张状态观测器(ESO)


前言

扩张观测器ESO也属于状态观测器中的一种,因此在对ESO展开推导描述前,会以循序渐进的方式引出线性观测器等内容,最后再衍生出对ESO的描述和推导。

线性状态观测器

对于一个线性状态方程而已,它的输出不一定能够完全呈现所有状态变量,这就涉及到关于系统状态方程的可观测性。对于以下的状态方程而言
x ′ = A x + B u y = C x x'=Ax+Bu\\ y=Cx x=Ax+Buy=Cx
其中, x x x n n n维列向量,则该状态方程可观测的充要条件为
r a n k ( [ C C A ] ) = n rank(\begin{bmatrix} C\\CA\end{bmatrix})=n rank([CCA])=n
讨论状态观测器的前提是该系统状态方程具有能观测性。

建立状态观测器的原因是,由于实际开发过程中,对于各状态变量的采集存在各类问题,如传感器设备昂贵,无对应状态变量采样条件等。因此可以跟系统状态方程设计虚拟的状态观测器,估计系统的状态向量。

龙伯格观测器

  • 理想假设
    首先建立
    x ′ ^ = A x ^ + B u y ^ = C x ^ \hat{x'} =A\hat{x}+Bu\\ \hat{y}=C\hat{x} x^=Ax^+Buy^=Cx^
    假设系统不存在扰动,且各状态变量初始状态一致,则这个观测器得到的估计值则就完全等同于实际的状态值。但世事难预料,往往实际系统存在扰动,且无法得到各状态的初始状态,则该观测器在实际运行中会因为累计误差而导致状态估计出现严重偏差。因此需要加入修正项进行补偿。
  • 修正补偿
    令修正项为 L ( y − y ^ ) L(y-\hat{y}) L(yy^),其中 L L L是修正项增益。将修正项代入后可以得到
    x ′ ^ = A x ^ + B u + L ( y − y ^ ) → x ′ ^ = A x ^ + B u + L ( y − C x ^ ) → x ′ ^ = ( A − L C ) x ^ + B u + L y \hat{x'} =A\hat{x}+Bu+L(y-\hat{y})\\ \rightarrow\hat{x'} =A\hat{x}+Bu+L(y-C\hat{x})\\ \rightarrow\hat{x'} =(A-LC)\hat{x}+Bu+Ly\\ x^=Ax^+Bu+L(yy^)x^=Ax^+Bu+L(yCx^)x^=(ALC)x^+Bu+Ly
  • 增益参数计算
    观测器增益 L L L决定了观测器的准确性,定义观测器性能指标 e = x − x ^ e=x-\hat{x} e=xx^,满足以下关系
    e ′ = x ′ − x ′ ^ → e ′ = A x + B u − ( A − L C ) x ^ − B u − L y → e ′ = A x − ( A − L C ) x ^ − L C x → e ′ = ( A − L C ) ( x − x ^ ) → e ′ = ( A − L C ) e e'=x'-\hat{x'}\\ \rightarrow e'=Ax+Bu-(A-LC)\hat{x}-Bu-Ly\\ \rightarrow e'=Ax-(A-LC)\hat{x}-LCx\\ \rightarrow e'=(A-LC)(x-\hat{x})\\ \rightarrow e'=(A-LC)e e=xx^e=Ax+Bu(ALC)x^BuLye=Ax(ALC)x^LCxe=(ALC)(xx^)e=(ALC)e
    关于观测指标 e e e,建立了一个状态方程来进行描述,我们希望这个状态方程的状态向量能够在有限时间能收敛为0。这个指标e的状态方程无输入,即为齐次微分方程组,求解其特征根,并配置观测参数 L L L的值,使特征根的值均处于负平面,即可使观测器在有限时间内完成对实际系统的准确估计(指标误差 e = 0 e=0 e=0)。

以一个简单的例子来加强理解。假设线性系统状态方程为:
[ x 1 ′ x 2 ′ ] = [ 0 1 0 − 2 ] [ x 1 x 2 ] + [ 0 1 ] u y = [ 1 0 ] [ x 1 x 2 ] \begin{bmatrix} x_1' \\x_2' \end{bmatrix}=\begin{bmatrix} 0&1\\0&-2\end{bmatrix} \begin{bmatrix} x_1 \\x_2\end{bmatrix}+\begin{bmatrix} 0 \\1 \end{bmatrix}u\\ y=\begin{bmatrix} 1&0 \end{bmatrix}\begin{bmatrix} x_1 \\x_2 \end{bmatrix} [x1x2]=[0012][x1x2]+[01]uy=[10][x1x2]
该系统的输出只包含了对于 x 1 x_1 x1,为了观测 x 2 x_2 x2,建立龙伯格观测器。设观测器增益 L = [ l 1 l 2 ] L=\begin{bmatrix} l_1 \\l_2 \end{bmatrix} L=[l1l2]。先根据特征点确定增益参数
d e t ( λ I − ( A − L C ) ) = d e t ( [ λ + l 1 − 1 l 2 λ + 2 ] ) = 0 → λ 2 + ( 2 + l 1 ) λ + 2 l 1 + l 2 = 0 det(\lambda I- (A-LC))=det(\begin{bmatrix} \lambda+l_1&-1 \\l_2&\lambda+2 \end{bmatrix})=0\\ \rightarrow \lambda^2+(2+l_1)\lambda+2l_1+l_2=0 det(λI(ALC))=det([λ+l1l21λ+2])=0λ2+(2+l1)λ+2l1+l2=0
令极点均位于 λ 1 = λ 2 = − 2 \lambda_1=\lambda_2=-2 λ1=λ2=2,则可以得到 ( λ + 2 ) 2 = λ 2 + 4 λ + 4 = 0 (\lambda+2)^2=\lambda^2+4\lambda+4=0 (λ+2)2=λ2+4λ+4=0

{ 2 + l 1 = 4 2 l 1 + l 2 = 4 → { l 1 = 2 l 2 = 0 \left\{\begin{matrix} 2+l_1=4\\ 2l_1+l2=4 \end{matrix}\right.\\ \rightarrow \left\{\begin{matrix} l_1=2\\ l2=0 \end{matrix}\right.\\ {2+l1=42l1+l2=4{l1=2l2=0
则可以得到龙伯格观测器,其数学描述为
[ x 1 ′ ^ x 2 ′ ^ ] = [ − 2 1 0 − 2 ] [ x 1 ^ x 2 ^ ] + [ 0 1 ] u + [ 2 0 ] y \begin{bmatrix} \hat{x_1'} \\\hat{x_2'} \end{bmatrix}=\begin{bmatrix} -2&1\\0&-2\end{bmatrix} \begin{bmatrix} \hat{x_1} \\\hat{x_2}\end{bmatrix}+\begin{bmatrix} 0 \\1 \end{bmatrix}u+\begin{bmatrix} 2 \\0 \end{bmatrix}y [x1^x2^]=[2012][x1^x2^]+[01]u+[20]y
用simulink搭载,仿真观察以下状态观测器估计状态与实际状态的对比。
在这里插入图片描述
在这里插入图片描述
这里的状态空间的形式是 x1'=x2,x2'=f(x1,x2,u),主要是为了衔接后续的内容,针对的是具有二阶变量的状态变量。即x2是x1的导数,x2对x1具有一定表征能力的特点。

非线性状态观测器

对比龙伯格状态观测器,非线性状态观测器的区别在于对观测器的补偿项是非线性的。
在上面关于补偿项的描述中,采用了线性的误差补偿方法,即 L ( y − y ^ ) = L e L(y-\hat{y})=Le L(yy^)=Le。除了采用这种方法外,也可以采用一些特殊的非线性函数来进行补偿。
对于满足以下特征的状态空间方程,可以利用这种非线性函数补偿的方式,忽略系统参数及相关关系,进行观测器设计。
{ x 1 ′ = x 2 x 2 ′ = x 3 ⋮ x n − 1 ′ = x n x n ′ = f ( x ⃗ , t , w ) + b u y = x 1 \left\{\begin{matrix} x_1'=x_2 \\ x_2'=x_3\\ \vdots\\ x_{n-1}'=x_n\\ x_n'=f(\vec{x},t,w)+bu\end{matrix}\right.\\ y=x_1 x1=x2x2=x3xn1=xnxn=f(x ,t,w)+buy=x1
e = y − y ^ e=y-\hat{y} e=yy^,则对应的观测器函数为
{ x 1 ′ ^ = x 2 ^ + β 1 g 1 ( e ) x 2 ′ ^ = x 3 ^ + β 2 g 2 ( e ) ⋮ x n − 1 ^ ′ = x n ^ + β n − 1 g n − 1 ( e ) x n ^ ′ = b u + β n g n ( e ) \left\{\begin{matrix} \hat{x_1'}=\hat{x_2} + \beta_1g_1(e)\\ \hat{x_2'}=\hat{x_3} + \beta_2g_2(e)\\ \vdots\\ \hat{x_{n-1}}'=\hat{x_n} + \beta_{n-1}g_{n-1}(e)\\ \hat{x_n}'=bu + \beta_{n}g_{n}(e) \end{matrix}\right. x1^=x2^+β1g1(e)x2^=x3^+β2g2(e)xn1^=xn^+βn1gn1(e)xn^=bu+βngn(e)
其中, β n \beta_n βn是观测器增益,类似于上面龙伯格观测器中 l n l_n ln g n ( e ) g_n(e) gn(e)是非线性函数,其表达式为
g n ( e ) = ∣ e ∣ 1 2 n − 1 s i g n ( e ) g_n(e)=\left | e\right | ^{\frac{1}{2^{n-1}}}sign(e) gn(e)=e2n11sign(e)
这个非线性函数本质上就是对于不同阶数状态空间观测的误差响应,这种误差响应排除掉了系统参数,外部扰动,时变性的影响,属于一种具有泛化特性的误差响应机制。

为了对比观测器的性能,同样用上面用到的模型,建立非线性观测器。
[ x 1 ′ x 2 ′ ] = [ 0 1 0 − 2 ] [ x 1 x 2 ] + [ 0 1 ] u y = [ 1 0 ] [ x 1 x 2 ] \begin{bmatrix} x_1' \\x_2' \end{bmatrix}=\begin{bmatrix} 0&1\\0&-2\end{bmatrix} \begin{bmatrix} x_1 \\x_2\end{bmatrix}+\begin{bmatrix} 0 \\1 \end{bmatrix}u\\ y=\begin{bmatrix} 1&0 \end{bmatrix}\begin{bmatrix} x_1 \\x_2 \end{bmatrix} [x1x2]=[0012][x1x2]+[01]uy=[10][x1x2]
建立非线性观测器,其数学描述为
{ x 1 ^ ′ = x 2 ^ + β 1 g 1 ( e ) = x 2 ^ + β 1 e x 2 ^ ′ = u + β 2 g 2 ( e ) = u + β 2 ∣ e ∣ s i g n ( e ) \left\{\begin{matrix} \hat{x_1}'=\hat{x_2}+\beta_1g_1(e) =\hat{x_2}+\beta_1e\\ \hat{x_2}'=u+\beta_2g_2(e)=u+\beta_2 \sqrt{\left | e\right | } sign(e) \\\end{matrix}\right.\\ {x1^=x2^+β1g1(e)=x2^+β1ex2^=u+β2g2(e)=u+β2e sign(e)
上simulink,搭建非线性观测器模型
在这里插入图片描述
在这里插入图片描述
这里观测增益参数分别为5和3,这两个参数影响观测器收敛速度,具体要怎么调,可以对比不同参数下的观测效果
β 1 = 1 , β 2 = 1 \beta_1=1,\beta_2=1 β1=1,β2=1
在这里插入图片描述
β 1 = 10 , β 2 = 10 \beta_1=10,\beta_2=10 β1=10,β2=10
在这里插入图片描述
β 1 = 50 , β 2 = 50 \beta_1=50,\beta_2=50 β1=50,β2=50
在这里插入图片描述
看起来似乎越大越好,但我认为在实际开发中,由于观测器往往是离散的而非理想的连续系统,因此增益过大会导致振荡的问题。

扩张状态观测器(ESO)

我个人学习东西喜欢进行比较,对比非线性观测器,ESO扩张了什么,又有什么作用,这是我学习这部分内容一直思考的问题。后续的叙述也主要是围绕这几个问题展开。

  • 扩张了什么 —— 扩张了对扰动的观测
    在非线性观测器中,由于引入了非线性误差补偿修正项,可以忽略系统的各项参数、相互关系及扰动,数学描述为 f ( x ⃗ , w , t ) f(\vec{x},w,t) f(x ,w,t),在实际的很多系统中,对于系统参数、相互关系及随机扰动都是未知的,无法精确描述的内容,因此非线性观测器的优势就体现出来了,可以忽略这部分内容进行观测。
    注:个人认为在系统中,未知的东西就是扰动。
    如果,我是说如果,我们将这部分扰动也观测出来,并且将观测结果通过输入抵消掉,那就可以极大的提高控制器的性能。
    为了实现这个目的,我们就需要扩张一个状态变量,用于描述这个扰动。即在 n n n维状态空间中,扩展 n + 1 n+1 n+1的状态变量 x n + 1 = f ( x ⃗ , w , t ) x_{n+1}=f(\vec{x},w,t) xn+1=f(x ,w,t),则状态空间扩张为:
    { x 1 ′ = x 2 x 2 ′ = x 3 ⋮ x n − 1 ′ = x n x n ′ = x n + 1 + b u x n + 1 ′ = f ′ ( x ⃗ , w , t ) \left\{\begin{matrix} x_1'=x_2 \\ x_2'=x_3\\ \vdots\\ x_{n-1}'=x_n\\ x_n'=x_{n+1}+bu\\ x_{n+1}'=f'(\vec{x},w,t)\end{matrix}\right.\\ x1=x2x2=x3xn1=xnxn=xn+1+buxn+1=f(x ,w,t)
    将状态空间扩张后,重新走一遍非线性状态观测器的路子。
    e = y − y ^ e=y-\hat{y} e=yy^,则对应的观测器函数为
    { x 1 ′ ^ = x 2 ^ + β 1 g 1 ( e ) x 2 ′ ^ = x 3 ^ + β 2 g 2 ( e ) ⋮ x n − 1 ^ ′ = x n ^ + β n − 1 g n − 1 ( e ) x n ^ ′ = x n + 1 ^ + b u + β n g n ( e ) x n + 1 ^ ′ = β n + 1 g n + 1 ( e ) \left\{\begin{matrix} \hat{x_1'}=\hat{x_2} + \beta_1g_1(e)\\ \hat{x_2'}=\hat{x_3} + \beta_2g_2(e)\\ \vdots\\ \hat{x_{n-1}}'=\hat{x_n} + \beta_{n-1}g_{n-1}(e)\\ \hat{x_n}'=\hat{x_{n+1}}+bu + \beta_{n}g_{n}(e) \\ \hat{x_{n+1}}'=\beta_{n+1}g_{n+1}(e) \\ \end{matrix}\right. x1^=x2^+β1g1(e)x2^=x3^+β2g2(e)xn1^=xn^+βn1gn1(e)xn^=xn+1^+bu+βngn(e)xn+1^=βn+1gn+1(e)
  • 有什么作用
    扩张的这部分对于扰动的观测,主要是用于ADRC控制器的扰动补偿环节,除此之外,我们可以继续用上面的案例来观察在一样参数的情况,ESO的观测性能会不会得到提高。

{ x 1 ^ ′ = x 2 ^ + β 1 g 1 ( e ) = x 2 ^ + β 1 e x 2 ^ ′ = x 3 ^ + u + β 2 g 2 ( e ) = x 3 ^ + u + β 2 ∣ e ∣ s i g n ( e ) x 3 ^ ′ = β 3 g 3 ( e ) = β 3 ∣ e ∣ 1 4 s i g n ( e ) \left\{\begin{matrix} \hat{x_1}'=\hat{x_2}+\beta_1g_1(e) =\hat{x_2}+\beta_1e\\ \hat{x_2}'=\hat{x_3}+u+\beta_2g_2(e)=\hat{x_3}+u+\beta_2 \sqrt{\left | e\right | } sign(e)\\ \hat{x_3}'=\beta_3g_3(e)=\beta_3\left | e\right |^{\frac{1}{4}} sign(e) \\\end{matrix}\right.\\ x1^=x2^+β1g1(e)=x2^+β1ex2^=x3^+u+β2g2(e)=x3^+u+β2e sign(e)x3^=β3g3(e)=β3e41sign(e)
上simulink,设计EOC观测器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据定义的系统,这部分扰动的表达式为 f ( x ⃗ , w , t ) = − 2 x 2 f(\vec{x},w,t)=-2x_2 f(x ,w,t)=2x2,一开始的偏差是由于 x 1 ( 0 ) ≠ 0 x_1(0)\ne0 x1(0)=0,但也能够很快收敛。

这篇关于【自抗扰控制ADRC】扩张观测器ESO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

【电机控制】数字滤波算法(持续更新)

文章目录 前言1. 数字低通滤波 前言 各种数字滤波原理,离散化公式及代码。 1. 数字低通滤波 滤波器公式 一阶低通滤波器的输出 y [ n ] y[n] y[n] 可以通过以下公式计算得到: y [ n ] = α x [ n ] + ( 1 − α ) y [ n − 1 ] y[n] = \alpha x[n] + (1 - \alpha) y[n-1]

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—1控制节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack离线Train版安装系列—10.控制节点-Heat服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack Victoria版——7.1控制节点-Neutron网络服务组件

7.1控制节点-Neutron网络服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版 离线安装部署系列教程(全) OpenStack Train版 离线安装部署系列教程(全) 欢迎留言沟通,共同进步。 文章目录 一、创建n