数字液压缸位置系统控制策略【附程序】
✨ 长期致力于数字液压缸、控制策略、切换控制、自抗扰控制、滑模变结构控制、自适应控制、神经网络控制研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1双闭环数字液压缸非线性建模与切换自抗扰控制策略建立了包含伺服电机、反馈机构、非对称液压缸和非线性液压弹簧的完整数学模型。伺服电机模型考虑电磁转矩和负载转矩平衡反馈机构采用非线性弹簧模型刚度随位移变化对称四边滑阀控制非对称液压缸时引入压力不对称补偿系数。液压缸的摩擦力采用LuGre模型参数包括静摩擦系数零点一、库伦摩擦系数零点零五、粘性摩擦系数零点零一。将高阶状态方程通过自抗扰控制思想降阶为二阶积分串联形式总扰动包含模型不确定性和外部干扰。提出了切换自抗扰控制策略设计多个线性扩张状态观测器每个观测器对应不同的参数区间使用多Lyapunov函数方法和最小Lyapunov函数切换规则进行切换。在MATLAB/Simulink中搭建仿真模型阶跃响应测试表明切换自抗扰控制的调节时间为零点二秒无超调而传统PID调节时间为零点六秒且有百分之十五超调。实验验证结果与仿真一致切换自抗扰控制的位置跟踪误差小于零点零五毫米。2滑模自抗扰控制与神经网络滑模自抗扰控制为了减少自抗扰控制器的调节参数数量标准自抗扰有十一个参数将滑模变结构控制与自抗扰融合提出滑模自抗扰控制策略。使用滑模面代替非线性状态误差反馈只需调节滑模增益和边界层厚度两个参数。为进一步削弱抖振引入指数趋近律并在边界层内用饱和函数代替符号函数。在此基础上结合径向基神经网络逼近非线性函数设计了神经网络滑模自抗扰控制器。RBF网络输入为跟踪误差和误差导数输出为滑模控制律的补偿项网络隐层节点数为十五学习率零点零一。通过Lyapunov方法推导了权值自适应律。仿真对比滑模自抗扰控制调节时间零点一五秒但稳态误差为零点零二毫米全局快速终端滑模自抗扰响应更快零点一秒但系统产生自持振荡振幅零点零一毫米神经网络滑模自抗扰同时实现了快速响应零点一二秒和高精度稳态误差零点零零五毫米且无振荡。3神经网络模型参考自适应抗扰控制策略将模型参考自适应控制与自抗扰结合设计了模型参考自适应抗扰控制器。参考模型选取理想二阶系统自然频率二十赫兹阻尼比零点八。自适应律基于Lyapunov函数推导调整控制器参数使实际输出跟踪参考模型输出。引入非线性反馈项补偿残余扰动但非线性函数形式难以确定因此使用RBF神经网络逼近该非线性项。神经网络模型参考自适应抗扰控制器的结构包含状态观测器估计总扰动、神经网络补偿器、参考模型和自适应律。在指令信号为正弦跟踪频率一赫兹幅值十毫米时神经网络模型参考自适应抗扰控制的跟踪误差均方根为零点零零八毫米而标准自抗扰为零点零二毫米。在突加外负载一百牛干扰下该控制器恢复时间零点一秒其他控制器均超过零点三秒。实验验证了所提控制策略在不同指令信号下均能保持高鲁棒性和高精度。import numpy as np import torch import torch.nn as nn class RBFNN_Adaptive(nn.Module): 径向基神经网络用于滑模自抗扰控制补偿 def __init__(self, n_inputs2, n_centers15, lr0.01): super().__init__() self.n_centers n_centers self.centers nn.Parameter(torch.randn(n_centers, n_inputs) * 0.5) self.sigma nn.Parameter(torch.ones(n_centers) * 0.5) self.W nn.Parameter(torch.randn(n_centers, 1) * 0.01) self.lr lr def forward(self, x): # x: (batch, n_inputs) diff x.unsqueeze(1) - self.centers.unsqueeze(0) # (batch, n_centers, n_inputs) rbf torch.exp(-torch.sum(diff**2, dim2) / (2 * self.sigma**2)) out torch.matmul(rbf, self.W) # (batch, 1) return out class NeuralSMC_ADRC: 神经网络滑模自抗扰控制器 def __init__(self, wo100, wc50, b0100): self.eso ESO(wo, b0) # 扩张状态观测器 self.rbf RBFNN_Adaptive() self.smc_gain 50.0 self.phi 0.01 # 边界层 def sliding_surface(self, e, edot): return edot self.smc_gain * e def control_law(self, r, y, ydot): e r - y edot -ydot # 假设r_dot0 s self.sliding_surface(e, edot) # 观测器估计总扰动 z1, z2, z3 self.eso.update(y, self.u_prev) # RBF补偿 x_input np.array([[e, edot]]) x_tensor torch.tensor(x_input, dtypetorch.float32) comp self.rbf(x_tensor).detach().numpy()[0,0] # 等效控制 切换控制 扰动补偿 u_eq (self.smc_gain * edot) / self.eso.b0 u_sw self.phi * np.tanh(s/self.phi) # 连续化切换 u u_eq u_sw (z3 - comp)/self.eso.b0 self.u_prev u # 自适应更新RBF权值 (简化在线学习) loss s**2 # 模拟梯度更新 (实际应用中在线) return u class ESO: 扩张状态观测器 def __init__(self, wo, b0): self.beta1 3 * wo self.beta2 3 * wo**2 self.beta3 wo**3 self.b0 b0 self.z1 0.0 self.z2 0.0 self.z3 0.0 self.dt 0.001 def update(self, y, u): e self.z1 - y self.z1 (self.z2 - self.beta1 * e) * self.dt self.z2 (self.z3 - self.beta2 * e self.b0 * u) * self.dt self.z3 (-self.beta3 * e) * self.dt return self.z1, self.z2, self.z3