控制基础学习(2)-非线性干扰观测器

前言

学习一下基础

针对常值干扰的非线性干扰观测

对于动力学系统
{ x ˙ = f ( x ) + g 1 ( x ) u + g 2 ( x ) d , if  n  is even y = b ( x ) , if  n  is odd \begin{cases} \dot x=f(x)+g_1(x)u+g_2(x)d, & \text{if $n$ is even} \\ y=b(x), & \text{if $n$ is odd} \\ \end{cases} {x˙=f(x)+g1(x)u+g2(x)d,y=b(x),if n is evenif n is odd
令干扰估计为 d ^ \hat d d^,估计误差为 d ~ = d − d ^ \tilde{d}=d-\hat d d~=dd^

d ~ ˙ = d ˙ − d ^ ˙ = − d ^ ˙ \dot{\tilde{d}}=\dot d-\dot {\hat d}=-\dot {\hat d} d~˙=d˙d^˙=d^˙

为了使 d ~ \tilde{d} d~ 趋于0,我们设计趋近律形式为

d ~ ˙ = − d ^ ˙ = − l ( x ) g 2 ( x ) ( d ~ ) \dot{\tilde{d}}=-\dot {\hat d}=-l(x)g_2(x)(\tilde{d}) d~˙=d^˙=l(x)g2(x)(d~)

通过设计 l ( x ) l(x) l(x)使其收敛到0,将趋近律带入系统方程得:

d ^ ˙ = l ( x ) [ x ˙ − f ( x ) − g 1 ( x ) u − g 2 ( x ) d ^ ] \dot{\hat{d}}=l(x)[\dot x-f(x)-g_1(x)u-g_2(x)\hat d] d^˙=l(x)[x˙f(x)g1(x)ug2(x)d^]

为了避免对状态量的测量,对上式进行改进:
两边同时减去 l ( x ) x ˙ l(x)\dot x l(x)x˙

d ^ ˙ − l ( x ) x ˙ = l ( x ) [ − f ( x ) − g 1 ( x ) u − g 2 ( x ) d ^ ] \dot{\hat{d}}-l(x)\dot x=l(x)[-f(x)-g_1(x)u-g_2(x)\hat d] d^˙l(x)x˙=l(x)[f(x)g1(x)ug2(x)d^]

z = d ^ − p ( x ) , p ( x ) = ∫ l ( x ) x ˙ d t z={\hat{d}}-p(x),p(x)= \int l(x)\dot x dt z=d^p(x)p(x)=l(x)x˙dt ,则有

{ z ˙ = − l ( x ) g 2 ( x ) z − l ( x ) [ g 2 ( x ) p ( x ) + f ( x ) + g 1 ( x ) u ] d ^ = z + p ( x ) , \begin{cases} \dot z = −l(x)g_2(x)z − l(x)[g_2(x)p(x) + f (x) + g_1(x)u] & \\ \hat d = z + p(x), & \\ \end{cases} {z˙=l(x)g2(x)zl(x)[g2(x)p(x)+f(x)+g1(x)u]d^=z+p(x),
由此避免了对 x ˙ \dot x x˙ 的测量

我的问题

(1)非线性干扰观测器的构造假设为干扰为常值,那实际情况中怎么使用呢?在论文中看到也是直接使用这个形式。
奇了怪了呀,论文与博客中证明,虽然构造假设是干扰为常值,但是稳定性条件却是 d ˙ \dot d d˙有界

参考

非线性干扰观测器简介

Mohammadi A, Marquez H J, Tavakoli M. Nonlinear disturbance observers: Design and applications to Euler Lagrange systems[J]. IEEE Control Systems Magazine, 2017, 37(4): 50-72.

Li S, Yang J, Chen W H, et al. Disturbance observer-based control: methods and applications[M]. CRC press, 2014.

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
非线性干扰观测器(Nonlinear Disturbance Observer)是一种用于估计和抵消非线性系统干扰的控制方法。下面是一个简单的非线性干扰观测器的代码示例: ```python import numpy as np class NonlinearDisturbanceObserver: def __init__(self, system_func, disturbance_func, observer_gain): self.system_func = system_func self.disturbance_func = disturbance_func self.observer_gain = observer_gain self.disturbance_estimate = 0.0 def update(self, input_signal, output_signal): disturbance_estimate_dot = self.observer_gain * (self.system_func(input_signal) - self.disturbance_estimate) self.disturbance_estimate += disturbance_estimate_dot control_signal = output_signal - self.disturbance_estimate return control_signal # 示例使用的非线性系统函数 def system_func(input_signal): return np.sin(input_signal) # 示例使用的非线性干扰函数 def disturbance_func(input_signal): return np.cos(input_signal) # 示例使用的观测器增益 observer_gain = 0.1 # 创建非线性干扰观测器对象 observer = NonlinearDisturbanceObserver(system_func, disturbance_func, observer_gain) # 输入信号和输出信号 input_signal = 0.5 output_signal = system_func(input_signal) # 更新观测器并获取控制信号 control_signal = observer.update(input_signal, output_signal) print("Control Signal:", control_signal) ``` 在上述代码中,`NonlinearDisturbanceObserver`类是非线性干扰观测器的实现。它接收系统函数、干扰函数和观测器增益作为参数,并通过`update`方法更新观测器状态并计算控制信号。 请注意,这只是一个简单的示例代码,实际应用中可能需要根据具体的系统和干扰函数进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值