news 2026/9/18 22:21:09

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
神经网络滑模实现机械臂轨迹跟踪控制:原理、仿真与参数整定

简介:一份基于神经网络滑模的机械臂轨迹跟踪控制方法学术论文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 = ė + λe

2.3 神经网络在这里的具体角色

上述滑模控制律如果直接实施,等效控制项里必须包含 F,而 F 恰恰是未知的。这正是神经网络需要填补的位置。常见做法是,使用一个前馈神经网络来逼近 F,网络的输入取为机械臂的关节位置和速度信号。

这里有一个在设计时容易混淆的点:神经网络逼近的对象到底是什么。有的文章里网络去拟合不确定项,有的去拟合理想控制律的整体输出。前者在结构上更清晰,因为不确定项的定义是从动力学方程中直接剥离出来的,物理含义明确,仿真时也方便做对比。后者在实现上更简单,因为不需要单独计算名义模型的各项,但网络需要更大的隐层容量才能拟合包含动力学主部在内的复合函数。

2.3.1 自适应律与权重更新

神经网络的权重更新不是用梯度下降加数据集离线训练,而是在线自适应律,理论来源是Lyapunov稳定性分析。这里需要构建一个包含跟踪误差和权重误差的Lyapunov函数,通过设计权重更新律使这个函数的导数负定,从而保证闭环系统的稳定性。具体来说,如果网络输出为:

F̂(q, q̇) = Ŵᵀ φ(q, q̇)

其中 Ŵ 是权重估计矩阵,φ 是基函数向量,那么典型的更新律为:

Ŵ̇ = Γ φ(q, q̇) sᵀ

Γ 是一个正定的学习率矩阵。这个更新律的意义在于:误差大时权重调整速度快,误差趋近零时权重趋于稳定。这样的设计把神经网络的在线学习过程变成了一个闭环自适应问题,与离线训练有本质区别。

3. 用 MATLAB/Simulink 搭建神经网络滑模轨迹跟踪控制仿真

3.1 仿真系统的整体框架

要在仿真中验证神经网络滑模控制的效果,需要一个完整的闭环结构。在 Simulink 中,通常按以下几个模块搭建:

模块作用典型参数
轨迹生成器输出期望关节位置、速度、加速度五次多项式规划
控制器神经网络滑模控制律,输出关节力矩λ=20,k=15
机械臂动力学模型被控对象的非线性动力学方程二连杆模型
扰动模块模拟模型不确定性和外部干扰正弦扰动+参数偏差

其中轨迹生成器要同时给出位置、速度、加速度三个信号,因为控制律需要这些信号的实时值。在实际工程中,轨迹通常由上层运动规划器给出,但在控制算法验证阶段,用多项式插值生成的平滑轨迹效果最好,便于对比不同控制器的跟踪性能。

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 = (m1+m2)*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 平台上比较适用。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 22:20:25

IDEA中Git回退全攻略:从Reset到Revert,安全撤销提交与强制推送

说实话&#xff0c;用 IDEA 做 Git 提交和推送&#xff0c;很多人都会——但"提交推送之后发现搞砸了&#xff0c;怎么安全回退"这件事&#xff0c;能一次讲清楚的人不多。我见过太多开发者在远程仓库上点错按钮之后手足无措&#xff0c;要么硬着头皮写反向代码&…

作者头像 李华
网站建设 2026/9/18 22:16:51

把Codex 的 SKILL 调用改到 TaoToken,再让 improve-animations 扫代码

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 22:15:10

AI Dev Kit DBSQL技能:SQL最佳实践、AI函数与地理空间排序详解

AI Dev Kit DBSQL技能&#xff1a;SQL最佳实践、AI函数与地理空间排序详解 【免费下载链接】ai-dev-kit Databricks Toolkit for Coding Agents provided by Field Engineering 项目地址: https://gitcode.com/GitHub_Trending/ai/ai-dev-kit AI Dev Kit 是 Databricks …

作者头像 李华
网站建设 2026/9/18 22:14:38

分层有限状态机HFSM实战:解决游戏AI状态爆炸问题

我在项目里第一次把AI写崩&#xff0c;是在一个普通近战怪身上。当时状态表看起来不多&#xff1a;待机、巡逻、追击、攻击、受击、死亡&#xff0c;六个状态&#xff0c;文档上写得很清楚。但“不多”是写在纸面上的&#xff0c;真正跑起来就发现完全不是那么回事&#xff1a;…

作者头像 李华
网站建设 2026/9/18 22:14:02

PyCharm 从安装到配置:解释器、虚拟环境与调试实战指南

作为天天和代码打交道的开发者&#xff0c;我太清楚一个好的开发环境有多重要了。很多初学者刚开始学Python&#xff0c;用记事本写几行print还好&#xff0c;一旦代码量上来、要封装模块、要调试、要管理第三方库&#xff0c;瞬间就乱了。这时候&#xff0c;PyCharm这类集成开…

作者头像 李华