数字液压缸位置系统控制策略【附程序】
✨ 长期致力于数字液压缸、控制策略、切换控制、自抗扰控制、滑模变结构控制、自适应控制、神经网络控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅ 如需沟通交流,点击《获取方式》
(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_inputs=2, n_centers=15, lr=0.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, dim=2) / (2 * self.sigma**2))
out = torch.matmul(rbf, self.W) # (batch, 1)
return out
class NeuralSMC_ADRC:
""神经网络滑模自抗扰控制器""
def __init__(self, wo=100, wc=50, b0=100):
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_dot=0
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, dtype=torch.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

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)