今科网站建设,最新logo设计大赛,平面设计类网站有哪些,ipv6改造网站怎么做二阶非线性自抗扰控制器#xff08;ADRC#xff09;,用的模块搭建的#xff0c;控制简单二阶传递函数#xff0c;可以联合粒子群在线优化自抗扰参数#xff08;但粒子群不包含在这里面#xff09;。
在控制领域#xff0c;二阶非线性自抗扰控制器#xff08;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组成。跟踪微分器TDTD 的作用是安排过渡过程并提取输入信号的微分。其离散形式可以表示为\[ \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函数中实现了跟踪微分器的离散迭代过程。扩张状态观测器ESOESO 用于估计系统的状态和总扰动。离散形式如下\[ \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 的迭代计算。非线性状态误差反馈控制律NLSEFNLSEF 根据跟踪微分器的输出和扩张状态观测器的估计值生成控制量。\[ 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 本身已经展现出强大的控制能力。通过合理调整各个模块的参数能让系统达到良好的控制效果。希望通过这篇博文大家对二阶非线性自抗扰控制器基于模块搭建控制简单二阶传递函数有更清晰的认识。在实际应用中根据不同的需求和系统特性还可以进一步优化和调整这些模块。