当前位置: 首页 > news >正文

探索二阶非线性自抗扰控制器(ADRC)

二阶非线性自抗扰控制器(ADRC),用的模块搭建的,控制简单二阶传递函数,可以联合粒子群在线优化自抗扰参数(但粒子群不包含在这里面)。

在控制领域,二阶非线性自抗扰控制器(ADRC)以其独特的优势逐渐崭露头角。今天咱们就来聊聊基于模块搭建,用于控制简单二阶传递函数的 ADRC。

二阶传递函数

首先,我们得了解一下要控制的对象 - 简单二阶传递函数。一般形式为:

\[ G(s) = \frac{\omegan^2}{s^2 + 2\zeta\omegan s + \omega_n^2} \]

这里,\(\omega_n\) 是自然频率,\(\zeta\) 是阻尼比。这两个参数决定了系统的动态特性。比如在 Python 中,我们可以简单模拟这个传递函数的响应:

import control import matplotlib.pyplot as plt # 定义二阶系统参数 wn = 1.0 # 自然频率 zeta = 0.707 # 阻尼比 num = [wn**2] den = [1, 2*zeta*wn, wn**2] sys = control.TransferFunction(num, den) # 计算阶跃响应 t, y = control.step_response(sys) # 绘制响应曲线 plt.plot(t, y) plt.xlabel('Time (seconds)') plt.ylabel('Response') plt.title('Step Response of Second - Order System') plt.grid(True) plt.show()

这段代码使用了control库,先定义了二阶系统的分子分母多项式系数,然后通过TransferFunction创建系统对象,接着用step_response计算阶跃响应,最后绘制出响应曲线。从曲线我们能直观看到系统的动态变化。

二阶非线性自抗扰控制器(ADRC)模块搭建

ADRC 主要由跟踪微分器(TD)、扩张状态观测器(ESO)和非线性状态误差反馈控制律(NLSEF)组成。

跟踪微分器(TD)

TD 的作用是安排过渡过程,并提取输入信号的微分。其离散形式可以表示为:

\[ \begin{cases}

x{1}(k + 1) = x{1}(k) + hx_{2}(k) \\

x{2}(k + 1) = x{2}(k) + hfst(x{1}(k) - v(k), x{2}(k), r, h_{0})

\end{cases} \]

这里v(k)是输入信号,r是速度因子,h是采样周期,h0是滤波因子,fst是非线性函数。

def fst(x1, x2, r, h0): d = r * h0 d0 = h0 * d y = x1 + h0 * x2 a0 = (d**2 + 8 * r * abs(y))**0.5 if abs(y) <= d0: a = x2 + 0.5 * (a0 - d) * (y / abs(y)) else: a = x2 + (y / abs(y)) * (y - d0) / h0 fval = -r * (a / d) if abs(a) <= d else -r * (a / abs(a)) return fval # TD 实现 def TD(v, r, h, h0, x1_prev, x2_prev): x1 = x1_prev + h * x2_prev x2 = x2_prev + h * fst(x1 - v, x2_prev, r, h0) return x1, x2

在这段代码中,我们先定义了fst函数,根据公式计算其值,然后在TD函数中实现了跟踪微分器的离散迭代过程。

扩张状态观测器(ESO)

ESO 用于估计系统的状态和总扰动。离散形式如下:

\[ \begin{cases}

z{1}(k + 1) = z{1}(k) + h(z{2}(k) - \beta{01}e(k)) \\

z{2}(k + 1) = z{2}(k) + h(z{3}(k) - \beta{02}\text{fal}(e(k), \alpha{1}, \delta) + b{0}u(k)) \\

z{3}(k + 1) = z{3}(k) - h\beta{03}\text{fal}(e(k), \alpha{2}, \delta)

\end{cases} \]

其中,e(k) = y(k) - z1(k)fal是非线性函数。

def fal(e, alpha, delta): if abs(e) <= delta: return e / (delta**(1 - alpha)) else: return abs(e)**alpha * (e / abs(e)) # ESO 实现 def ESO(y, u, b0, beta01, beta02, beta03, alpha1, alpha2, delta, h, z1_prev, z2_prev, z3_prev): e = y - z1_prev z1 = z1_prev + h * (z2_prev - beta01 * e) z2 = z2_prev + h * (z3_prev - beta02 * fal(e, alpha1, delta) + b0 * u) z3 = z3_prev - h * beta03 * fal(e, alpha2, delta) return z1, z2, z3

这里先定义了fal函数,再在ESO函数中按照公式进行 ESO 的迭代计算。

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

NLSEF 根据跟踪微分器的输出和扩张状态观测器的估计值生成控制量。

\[ u0(k) = \text{fal}(v1(k) - z1(k), \alpha{3}, \delta{1}) + \text{fal}(v2(k) - z2(k), \alpha{4}, \delta_{2}) \]

\[ u(k) = \frac{u0(k) - z3(k)}{b_{0}} \]

# NLSEF 实现 def NLSEF(v1, v2, z1, z2, z3, b0, alpha3, alpha4, delta1, delta2): u0 = fal(v1 - z1, alpha3, delta1) + fal(v2 - z2, alpha4, delta2) u = (u0 - z3) / b0 return u

这段代码依据公式计算出控制量u

通过将这些模块组合起来,我们就搭建好了用于控制简单二阶传递函数的二阶非线性自抗扰控制器。虽然粒子群在线优化自抗扰参数不在本次讨论范围内,但 ADRC 本身已经展现出强大的控制能力。通过合理调整各个模块的参数,能让系统达到良好的控制效果。

希望通过这篇博文,大家对二阶非线性自抗扰控制器基于模块搭建控制简单二阶传递函数有更清晰的认识。在实际应用中,根据不同的需求和系统特性,还可以进一步优化和调整这些模块。

http://www.jsqmd.com/news/139350/

相关文章:

  • 什么是加权互反融合策略
  • 【RK3588开发】配置基于 VS Code + CMake 的 RK3588 交叉编译开发环境
  • 2025老年猫粮TOP5榜单!资深宠粮评测师精选推荐 - 极欧测评
  • 一次大模型接口雪崩事故:从调用失败到服务降级
  • Hibernate‌
  • 学长亲荐10个AI论文软件,自考本科毕业论文轻松搞定!
  • 专业 ProfiNet 转 CAN 网关厂家推荐,塔讯技术
  • STM32 环形串口队列程序:大数据串口收发的神兵利器
  • AI 在静雅斋中的使用角度梳理
  • 2025老年狗粮口碑优选榜单:5大优质品牌测评与选购指南 - 极欧测评
  • 飞行的“社会公平”:技术与政策如何破解低空出行的“精英化”与“数字鸿沟”难题
  • 智能控制实验:模糊控制基础(Fuzzy)
  • 2025无人机蜂群选型指南:技术验证、避坑要点与优质供应商全解析 - 品牌2025
  • 在Matlab中实现图片特定部分单独显示与多边形截取
  • ProfiNet 转 CAN 网关靠谱供应商推荐:塔讯技术
  • 广东经济深度复盘:穿越周期的韧性与新旧动能转换
  • 机器学习——罗辑回归
  • 新手必看!2025年公众号编辑器选购指南:从入门到精通的效率工具盘点
  • 2025全钢实验台厂家推荐 产能专利环保三维度权威测评 - 爱采购寻源宝典
  • 哪些字段适合加索引,哪些不适合加?
  • 靠谱的台球杆定制店与优质品牌推荐
  • 事务与 ACID 及失效场景
  • zTasker v2.3.4:Windows 自动化任务工具
  • 上海国德:客户忠诚度、售后与满意度的深度剖析
  • 卫星遥控遥测可视化开源方案
  • 推荐靠谱诚信的企业展厅设计公司,盛世笔特
  • 简易 python 打字计数器
  • 2025年国内家居家纺展示平台口碑推荐榜单有哪些? - 讯息观点
  • 昇思MindSpore打造HyperParallel架构,引领AI框架迈入“超节点时代”
  • 消息队列--消息顺序性保障