2026/3/25 23:18:46
网站建设
项目流程
沈阳门户网站建设,广东网站备案多长时间,网站开发组岗位,企业网站官网模板二阶线性自抗扰控制器#xff08;L_ADRC2#xff09;#xff0c;支持算法#xff0c;已封装调试简单#xff0c;支持粒子群调参#xff08;另外的#xff09;。搞控制的兄弟对自抗扰应该不陌生#xff0c;这玩意儿比PID多带个状态观测器#xff0c;对付系统扰动确实更…二阶线性自抗扰控制器L_ADRC2支持算法已封装调试简单支持粒子群调参另外的。搞控制的兄弟对自抗扰应该不陌生这玩意儿比PID多带个状态观测器对付系统扰动确实更生猛。最近封装了个二阶线性自抗扰控制器LADRC2实测效果不错顺手把粒子群调参也集成了。直接甩干货先说怎么用再看门道。先看封装好的LADRC2类class LADRC2: def __init__(self, w0, b0, dt): self.z1 0 # 状态观测器状态1 self.z2 0 # 状态观测器状态2 self.u 0 # 控制输出 self.b0 b0 # 系统增益估计值 self.beta1 2 * w0 # 观测器带宽参数 self.beta2 w0 ** 2 self.dt dt def update(self, y, target): # 状态观测器核心方程 e y - self.z1 self.z1 (self.z2 self.beta1 * e) * self.dt self.z2 (self.beta2 * e) * self.dt # 控制器计算 u0 (target - self.z2) / self.b0 self.u u0 - self.z1 / self.b0 return self.u重点看状态观测器那两行微分方程这相当于给系统装了个X光机。beta参数决定观测器反应速度实际调试时建议从系统带宽的3-5倍开始试。dt记得要和实际控制周期匹配否则数值积分会飘。粒子群调参实战调w0和b0最头疼上智能算法from pyswarm import pso def tune_parameters(system_model): def cost_func(params): w0, b0 params controller LADRC2(w0, b0, dt0.01) # 运行仿真计算ISE指标 ise simulate(system_model, controller) return ise # 参数边界w0∈[1,100], b0∈[0.1,10] lb [1, 0.1] ub [100, 10] xopt, _ pso(cost_func, lb, ub, swarmsize20, maxiter50) return xopt这里用了pyswarm库设置20个粒子迭代50次。注意代价函数里要封装被控对象的仿真过程ISE指标可以根据实际情况换成IAE或者其他。实测在电机控制场景下这样调参比手动试快三倍不止。实测踩坑记录最近在四旋翼姿态控制项目用了这个框架几个经验值观测器带宽w0别超过采样频率的1/5否则数值不稳定b0初始值取系统稳态增益的倒数能加快收敛粒子群迭代时加个参数对数变换搜索效率更高遇到过最邪门的情况某款空心杯电机b0调到0.8时突然震荡后来发现是PWM分辨率不够导致的非线性。所以智能算法不是万能的物理瓶颈还得靠硬件解决。二阶线性自抗扰控制器L_ADRC2支持算法已封装调试简单支持粒子群调参另外的。代码仓库里给了无人机姿态控制demo直接改电机模型就能复现。自抗扰这玩意儿在强扰动场合确实比PID顶用特别是做无人机抗风实验时跟踪误差小了40%左右。下次试试结合强化学习在线调参应该更有意思。