神经网络滑模实现机械臂轨迹跟踪控制:原理、仿真与参数整定

📅 发布时间:2026/9/18 22:21:10
神经网络滑模实现机械臂轨迹跟踪控制:原理、仿真与参数整定
简介一份基于神经网络滑模的机械臂轨迹跟踪控制方法学术论文PDF源自《计算机工程与设计》2019年第7期面向机器人控制领域的研究人员、硕博研究生及从事运动控制开发的工程师。论文针对机械臂轨迹跟踪中建模误差与外界干扰导致控制性能下降的问题提出改进的自适应神经滑模控制方法。该方法利用神经网络非线性映射能力在线学习不确定性上界输出作为滑模控制器的动态补偿项并以Lyapunov函数推导权值更新律保证系统全局稳定同时引入遗传算法优化网络基函数中心和基宽有效提升收敛速度。全文涵盖机械臂动力学建模、控制器设计、稳定性证明与双关节机械臂仿真验证可帮助读者快速掌握智能滑模控制与轨迹跟踪算法的完整设计思路。资源为1个PDF文件共1.41MB便于全文阅读与打印已有195人学习下载对深入学习智能滑模控制与机械臂轨迹跟踪具有直接参考价值。1. 基于神经网络滑模的机械臂轨迹跟踪控制方法解决的是什么问题六轴工业机械臂在做高速轨迹跟踪时最头疼的不是动力学方程复杂而是模型根本不准连杆质量、质心位置、摩擦力矩、负载变化这些参数在出厂标定后和实际运行时有明显偏差。滑模控制本来是处理这种不确定性的利器但传统滑模有个代价——为了抵抗不确定性切换增益必须足够大结果就是控制量高频抖振关节减速器磨损快、末端精度反而上不去。神经网络滑模的思路是把这两件事合并滑模负责保证鲁棒性神经网络负责在线逼近模型不确定性从而把切换增益降下来。对于做机械臂控制算法验证、机器人系统集成、或者刚开始接触先进控制方法的工程师来说这篇标题对应的技术路线本质上是一套不依赖精确模型就能完成轨迹跟踪的控制器设计方案。2. 滑模控制与神经网络的结合点模型不确定性到底去哪了2.1 动力学模型中的不确定项是什么机械臂的动力学方程一般写成如下形式M(q)q̈ C(q, q̇)q̇ G(q) τ_f(q̇) τ_d τ其中 M(q) 是惯性矩阵C(q, q̇) 是科氏力/离心力项G(q) 是重力项τ_f 是摩擦力矩τ_d 是外界扰动。名义模型只能给出 M0(q)、C0(q, q̇)、G0(q) 的估计值而真实值和估计值之间的偏差就构成了不确定项F(q, q̇, q̈) ΔM(q)q̈ ΔC(q, q̇)q̇ ΔG(q) τ_f τ_d这个 F 是轨迹跟踪误差的主要来源。机械臂在低速时重力项占主导高速时科氏力和惯性力矩占主导摩擦力在低速换向时表现出明显的非线性这些叠加起来让固定参数的前馈控制器很难全工况工作。2.2 滑模面定义的误差动态方程定义跟踪误差 e q_d - q其中 q_d 是期望轨迹。滑模面通常取为s ė λe2.3 神经网络在这里的具体角色上述滑模控制律如果直接实施等效控制项里必须包含 F而 F 恰恰是未知的。这正是神经网络需要填补的位置。常见做法是使用一个前馈神经网络来逼近 F网络的输入取为机械臂的关节位置和速度信号。这里有一个在设计时容易混淆的点神经网络逼近的对象到底是什么。有的文章里网络去拟合不确定项有的去拟合理想控制律的整体输出。前者在结构上更清晰因为不确定项的定义是从动力学方程中直接剥离出来的物理含义明确仿真时也方便做对比。后者在实现上更简单因为不需要单独计算名义模型的各项但网络需要更大的隐层容量才能拟合包含动力学主部在内的复合函数。2.3.1 自适应律与权重更新神经网络的权重更新不是用梯度下降加数据集离线训练而是在线自适应律理论来源是Lyapunov稳定性分析。这里需要构建一个包含跟踪误差和权重误差的Lyapunov函数通过设计权重更新律使这个函数的导数负定从而保证闭环系统的稳定性。具体来说如果网络输出为F̂(q, q̇) Ŵᵀ φ(q, q̇)其中 Ŵ 是权重估计矩阵φ 是基函数向量那么典型的更新律为Ŵ̇ Γ φ(q, q̇) sᵀΓ 是一个正定的学习率矩阵。这个更新律的意义在于误差大时权重调整速度快误差趋近零时权重趋于稳定。这样的设计把神经网络的在线学习过程变成了一个闭环自适应问题与离线训练有本质区别。3. 用 MATLAB/Simulink 搭建神经网络滑模轨迹跟踪控制仿真3.1 仿真系统的整体框架要在仿真中验证神经网络滑模控制的效果需要一个完整的闭环结构。在 Simulink 中通常按以下几个模块搭建模块作用典型参数轨迹生成器输出期望关节位置、速度、加速度五次多项式规划控制器神经网络滑模控制律输出关节力矩λ20k15机械臂动力学模型被控对象的非线性动力学方程二连杆模型扰动模块模拟模型不确定性和外部干扰正弦扰动参数偏差其中轨迹生成器要同时给出位置、速度、加速度三个信号因为控制律需要这些信号的实时值。在实际工程中轨迹通常由上层运动规划器给出但在控制算法验证阶段用多项式插值生成的平滑轨迹效果最好便于对比不同控制器的跟踪性能。3.2 二连杆机械臂的核心动力学代码function tau neural_sliding_controller(q, q_dot, q_d, q_dot_d, q_ddot_d) % 控制器输入关节位置、速度、期望轨迹及期望加速度 % 控制器输出关节力矩指令 tau % 名义模型参数不精确的估计值 m1 1.0; m2 0.8; l1 1.0; l2 0.8; % 计算名义惯性矩阵 M0 M11 (m1m2)*l1^2 m2*l2^2 2*m2*l1*l2*cos(q(2)); M12 m2*l2^2 m2*l1*l2*cos(q(2)); M21 M12; M22 m2*l2^2; M0 [M11, M12; M21, M22]; % 计算名义科氏力矩阵 C0 h -m2*l1*l2*sin(q(2)); C0 [h*q_dot(2), h*(q_dot(1)q_dot(2)); -h*q_dot(1), 0]; % 滑模面 s e_dot lambda*e e q_d - q; e_dot q_dot_d - q_dot; lambda 20; s e_dot lambda*e; % 神经网络逼近不确定性使用 RBF 基函数 % 网络输入误差及其变化率、期望速度、实际速度 z [e; e_dot; q_dot]; % RBF 中心点取为 0 sigma 1.0; phi exp(-sum(z.^2)/(2*sigma^2)); % 在线权重更新 Gamma 0.05; W_hat W_hat Gamma * phi * s; % 自适应律 % 控制律等效控制 切换控制 神经网络补偿 q_ref_ddot q_ddot_d lambda*e_dot; tau_eq M0 * q_ref_ddot C0*q_dot; tau_nn W_hat * phi; tau_sw k * tanh(s/epsilon); tau tau_eq - tau_nn tau_sw; end这段代码里有一个值得注意的细节切换项使用了 tanh(s/ε) 而不是 sign(s)。直接用 sign 函数时切换项会在滑模面两侧产生高频切换仿真求解器步长被迫缩小而且得到的控制力矩曲线呈现锯齿形。tanh 函数则对切换做了平滑处理ε 越小tanh 越接近 sign但抖振越明显。实际调参数时先把 ε 设大一点跑通再逐步减小。代码中用到的 lambda 决定了滑模面的收敛速度lambda 越大跟踪误差收敛越快但噪声放大也越严重。k 是切换增益它需要大于神经网络逼近误差的上界否则系统在滑模面上无法保持稳定。这个上界很难精确知道通常在仿真中以试错方式确定在真实系统中则根据执行器饱和限制来反推。提示神经网络权重 W_hat 在代码里需要作为持久变量存储每次采样周期更新一次。在 Simulink 中用 MATLAB Function 模块时需要用 persistent 声明。3.3 RBF 网络隐藏层神经元个数怎么定神经网络部分最常被问的一个问题隐藏层神经元个数到底选几个。这个没有解析解实际操作时按这个思路来网络结构逼近精度计算量适用场景5-10个节点一般低二连杆仿真验证10-20个节点较好中等三到六轴机械臂20个以上节点好高模型不确定性大、工况复杂神经元个数太少网络逼近不了复杂的不确定项函数滑模切换项被迫承担更多补偿工作抖振随之而来个数太多权重更新的计算量增大而且容易出现参数漂移——权重持续增长但跟踪性能并没有明显提升。在仿真中试网络规模时可以观察权重范数的变化趋势如果训练一段时间后权重仍然单调增长不收敛说明网络容量偏大且自适应增益偏高。3.4 MATLAB 脚本实现完整闭环仿真% 主仿真脚本二连杆机械臂神经网络滑模控制 clear; clc; close all; % 仿真参数 dt 0.001; % 采样周期 1ms T_end 5; % 仿真时长 5s t 0:dt:T_end; N length(t); % 期望轨迹五阶多项式插值 q1_d zeros(1, N); q2_d zeros(1, N); q1_dd zeros(1, N); q2_dd zeros(1, N); q1_ddot_d zeros(1, N); q2_ddot_d zeros(1, N); % 初始与目标位置 q0 [0; 0]; qf [pi/2; pi/3]; T_f 2.0; % 运动时间 for i 1:N if t(i) T_f tau_t t(i) / T_f; % 五次多项式位置、速度、加速度 q1_d(i) q0(1) (qf(1)-q0(1)) * (10*tau_t^3 - 15*tau_t^4 6*tau_t^5); q1_dd(i) (qf(1)-q0(1)) * (30*tau_t^2 - 60*tau_t^3 30*tau_t^4) / T_f; q1_ddot_d(i) (qf(1)-q0(1)) * (60*tau_t - 180*tau_t^2 120*tau_t^3) / T_f^2; % 关节2同理 else q1_d(i) qf(1); q1_dd(i) 0; q1_ddot_d(i) 0; end end % 状态初始化 q [q0(1); q0(2)]; q_dot [0; 0]; W_hat zeros(4, 2); % RBF网络权重矩阵 % 仿真循环 for i 1:N % 计算期望信号取当前时刻 q_d_i [q1_d(i); q2_d(i)]; % 期望位置 q_dot_d_i [q1_dd(i); q2_dd(i)]; % 期望速度 q_ddot_d_i [q1_ddot_d(i); q2_ddot_d(i)]; % 期望加速度 % 调用控制器 [tau, W_hat] controller(q, q_dot, q_d_i, q_dot_d_i, q_ddot_d_i, W_hat); % 真实动力学模型包含参数偏差计算加速度 q_ddot real_dynamics(q, q_dot, tau); % 欧拉积分更新状态 q_dot q_dot q_ddot * dt; q q q_dot * dt; % 存储结果 q1_his(i) q(1); q2_his(i) q(2); tau1_his(i) tau(1); tau2_his(i) tau(2); end % 绘制跟踪结果 figure(1); subplot(2,1,1); plot(t, q1_d, r--, t, q1_his, b-, LineWidth, 1.5); legend(期望轨迹, 实际轨迹); title(关节1 轨迹跟踪对比); xlabel(时间 t/s); ylabel(角度 rad); subplot(2,1,2); plot(t, (q1_d - q1_his)*180/pi, k-, LineWidth, 1.5); title(关节1 跟踪误差度); xlabel(时间 t/s); ylabel(误差 deg);在使用这个脚本时需要注意real_dynamics 函数内部故意加入了与名义模型不同的参数值以模拟模型不确定性。具体操作时可以让真实参数比名义参数大 10%~20%或者修改摩擦系数这样对比效果更明显。仿真完成后观察误差曲线是否在滑模面到达后收敛到零附近的小邻域内以及控制力矩是否存在高频振荡。4. 神经网络滑模控制器参数整定的三个关键与抖振抑制技巧4.1 滑模面的 λ 和切换增益 k 怎么配这两个参数是控制器中最敏感的部分它们的取值逻辑完全不同。λ 决定误差收敛速度k 决定对不确定性的抵抗能力。在实际整定中一般先把 λ 固定在经验值 λ15~50然后从小到大调整 k直到跟踪误差满足要求。k 过大时控制力矩幅值明显增大末端执行器在高速运动段会出现可感知的振动k 过小时跟踪误差会在滑模面上出现稳态偏差表现为误差曲线不归零而是围绕一个小幅值波动。提示在仿真中判断 k 是否合适不要只看误差曲线还要看控制力矩曲线。力矩在进入稳态后如果仍有明显的周期性脉动说明 k 相对不确定性来说偏大需要配合神经网络的补偿效果一起调。4.2 神经网络学习率 Γ 对收敛速度的影响学习率 Γ 控制权重更新的步长它是这里最需要耐心调试的参数。Γ 过小权重收敛速度慢前几百毫秒跟踪误差主要靠滑模项扛切换增益被迫加大Γ 过大权重更新出现振荡控制力矩出现不规则的毛刺严重时系统失稳。实践中观察到Γ 合适时神经网络的逼近误差项实际不确定性与网络估计之差在前 0.5 秒内明显下降对应的切换项幅值也随之自然减小。这正是神经网络滑模相比传统滑模的优势所在加入网络后切换增益 k 可以比纯滑模小 30%~60%抖振幅度显著降低。4.3 边界层厚度 ε 与抖振的取舍在 3.2 节的控制器代码中切换项用 tanh(s/ε) 代替了 sign(s)这是消除抖振最关键的一个工程处理。ε 越小控制精度越高但抖振越强ε 越大控制越平顺但稳态误差越大。一个实用的折中是采用变边界层策略在误差 0.1 rad 时用 ε0.5误差 0.1 rad 时切到 ε0.1。之所以这样设计是因为误差大时不需要精确补偿切换先保证稳定收敛误差接近零时增大切换增益比重消除稳态误差。变边界层策略在 MATLAB 里实现时只需增加一个判断语句但效果比固定 ε 好很多。5. 从二连杆到六轴机械臂轨迹跟踪方法的迁移技巧5.1 自由度增加时的维度问题和计算量控制二连杆验证完成后往六轴工业机械臂迁移时第一个遇到的瓶颈是计算量。六自由度机械臂的惯性矩阵是 6×6 的每个元素都包含复杂的三角函数组合实时计算逆动态模型本身就有不小的开销再叠加神经网络的在线推理和权重更新控制周期可能从 1ms 拉长到 3ms 以上。一个常见的简化方式是不直接用完整的神经网络逼近整个不确定项向量而是把多关节耦合产生的交叉项当作扰动神经网络的输入只取每个关节自身的误差和速度信号输出也只对应本关节的补偿力矩。这种对角化处理牺牲了部分耦合补偿精度但大幅减少了网络维度和权重数量是工程实践中值得优先尝试的折中。如果跟踪精度要求更高则保留耦合输入但要把网络更新频率从每个控制周期降为每 2~3 个周期一次或者把神经网络计算分散到多核实时系统上。5.2 关节摩擦补偿的实际效果真实机械臂系统中摩擦是轨迹跟踪误差的主要来源尤其在做正弦轨迹跟踪时关节在速度过零点的位置会出现明显的误差尖峰。纯滑模控制对摩擦的处理方式是增大切换增益强行压制代价就是过零点的力矩跳变。把标题中的方法用在真实机械臂上时比较可行的实验路径是先离线测出各关节的库仑摩擦和粘性摩擦系数作为初始估计让神经网络去逼近剩余的未建模摩擦部分。这样做的好处是网络承担的逼近任务变轻权重收敛速度更快在线调整压力小。在 ROS 里做真实机械臂验证时可以用自带摩擦模型的 Gazebo 仿真环境做半实物验证先将参数在 URDF 中配置好再接入实际的控制器节点。5.3 计算量对比与适用场景总结控制方法精度抖振程度计算复杂度对模型依赖传统 PID中低极低弱传统滑模中高高低中神经网络滑模高低中低自适应滑模中高中中低对于一轴或二轴系统用 PID 加上重力前馈就够了用神经网络滑模属于开发周期长但收益有限四轴以上的串联机械臂在高速运动或负载变化明显的场景下用这个方法能明显看到轨迹跟踪精度的提升。如果实际部署时算力受限可以将神经网络训练好后的权重固定下来作为前馈补偿器不再做在线更新此时网络就退化为一个静态的非线性函数逼近器计算开销降到最低这在嵌入式控制板或 PLC 平台上比较适用。本文还有配套的精品资源点击获取