ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

从DH建模到轨迹规划:手把手用Matlab实现UR5机械臂运动学与仿真

从DH建模到轨迹规划:手把手用Matlab实现UR5机械臂运动学与仿真 简介本资源面向机器人控制方向的本科生、研究生及工程实践者聚焦UR5机械臂核心运动控制问题系统实现正逆运动学建模、三次与五次多项式轨迹规划对比以及基于PID的位置闭环控制。资源共12个文件含7个MATLAB函数如forwardmotion.m、inversemotion.m、cubicmotion.m、quinticmotion.m等、3个Simulink控制模型PIDcontrol.slx、adapativePIDcontrol.slx、calculatingcontrol.slx及README说明文档总大小仅115KB轻量易读、结构清晰便于分模块学习与调试。已有239人学习下载覆盖从理论推导到仿真验证的完整链路不仅提供可直接运行的正逆解算代码与两种插值轨迹生成逻辑还集成Simulink PID控制器模型支持参数调节与响应对比帮助读者深入理解轨迹平滑性、加速度约束对实际控制效果的影响以及运动学—规划—控制三者的协同机制。1. 项目背景与核心价值最近在实验室带着几个师弟做机械臂相关的课题发现很多同学在入门时面对UR5这类经典协作机械臂的正逆运动学推导和轨迹规划实现总感觉隔着一层纱。网上的资料要么是纯理论公式堆砌看得人头晕要么是直接调用ROS或第三方工具箱成了“调包侠”底层原理一概不知。等到需要自己设计轨迹或者排查奇异点时就完全抓瞎了。这个项目就是想把UR5从DH参数建模到正逆运动学的手算与编程验证再到最基础的三次、五次多项式轨迹规划用Matlab从头到尾“盘”一遍。目的很明确让你不仅能写出代码更能清楚每一行代码背后的几何意义和物理含义真正理解机械臂是如何“思考”和“运动”的。无论是做算法仿真、控制器设计还是为后续的视觉伺服、力控打基础这套扎实的底层运动学与规划能力都是不可或缺的。2. UR5机械臂建模与正运动学实现正运动学解决的是“已知各个关节角度求末端执行器位姿”的问题。这是所有机械臂控制的起点。2.1 建立UR5的DH参数表UR系列机械臂以其出色的重复定位精度和开放的接口著称UR5是其经典型号。我们首先需要为其建立运动学模型最常用的就是Denavit-HartenbergDH参数法。这里采用标准DH参数建模。根据UR5的机械结构我们可以得到其DH参数表如下关节iα_{i-1} (rad)a_{i-1} (mm)d_i (mm)θ_i (rad)10089.2θ12-π/2-4250θ230-3920θ34-π/20109.3θ45π/2094.75θ56-π/2082.5θ6注意不同资料中UR5的DH参数可能存在微小差异这通常源于坐标系原点定义的细微差别比如定义在关节轴线交点还是连杆末端只要模型一致即可。上表是一种广泛使用的版本。参数中的负号体现了UR5部分关节轴的特殊偏置关系。参数解读与建模心得α_{i-1}连杆扭角指的是从Z_{i-1}轴绕X_{i-1}轴旋转到Z_i轴的角度。UR5的关节2、4、6都存在-90°或90°的偏置这直接体现在α参数上。a_{i-1}连杆长度沿着X_{i-1}轴从Z_{i-1}轴到Z_i轴的距离。UR5的连杆2和3较长425mm和392mm这决定了其工作空间的大小。d_i连杆偏距沿着Z_i轴从X_{i-1}轴到X_i轴的距离。关节1、4、6存在明显的偏置量。θ_i关节角绕Z_i轴从X_{i-1}轴旋转到X_i轴的角度。对于旋转关节这就是我们的控制变量。建立DH表后每个相邻连杆间的变换矩阵 ^{i-1}T_i 就可以由四个参数唯一确定其通用形式为 ^{i-1}T_i Rot_X(α_{i-1}) * Trans_X(a_{i-1}) * Trans_Z(d_i) * Rot_Z(θ_i) 展开后是一个4x4的齐次变换矩阵。2.2 正运动学计算与Matlab实现正运动学即是计算从基座标系{0}到末端坐标系{6}的变换矩阵 ^0T_6 ^0T_6 ^0T_1 * ^1T_2 * ^2T_3 * ^3T_4 * ^4T_5 * ^5T_6在Matlab中我们可以避免直接进行繁琐的符号运算而是采用数值计算的方式。核心是编写一个函数输入6个关节角单位可以是度或弧度但内部计算需统一输出末端位姿位置和欧拉角/旋转矩阵。function [T, pose] ur5_forward_kinematics(theta) % UR5正运动学计算 % 输入theta - 1x6的关节角度向量单位弧度 % 输出T - 4x4齐次变换矩阵表示末端在基坐标系下的位姿 % pose - 1x6向量[x, y, z, roll, pitch, yaw] (ZYX欧拉角)单位米和弧度 % DH参数 (单位米弧度) a [0, -0.425, -0.392, 0, 0, 0]; alpha [0, -pi/2, 0, -pi/2, pi/2, -pi/2]; d [0.0892, 0, 0, 0.1093, 0.09475, 0.0825]; theta theta(:); % 确保是列向量 T eye(4); for i 1:6 ct cos(theta(i)); st sin(theta(i)); ca cos(alpha(i)); sa sin(alpha(i)); % 计算当前连杆变换矩阵 A_i [ ct, -st*ca, st*sa, a(i)*ct; st, ct*ca, -ct*sa, a(i)*st; 0, sa, ca, d(i); 0, 0, 0, 1]; T T * A_i; % 连续相乘得到最终变换 end % 从变换矩阵T中提取位置 position T(1:3, 4); % 提取旋转矩阵并转换为ZYX欧拉角Roll-Pitch-Yaw R T(1:3, 1:3); pitch atan2(-R(3,1), sqrt(R(1,1)^2 R(2,1)^2)); if abs(pitch - pi/2) 1e-6 yaw 0; roll atan2(R(1,2), R(2,2)); elseif abs(pitch pi/2) 1e-6 yaw 0; roll -atan2(R(1,2), R(2,2)); else yaw atan2(R(2,1)/cos(pitch), R(1,1)/cos(pitch)); roll atan2(R(3,2)/cos(pitch), R(3,3)/cos(pitch)); end pose [position; roll; pitch; yaw]; end实现细节与验证单位统一代码内部将DH参数从毫米转换为米这是机器人学中更常用的单位便于与后续的轨迹规划速度、加速度统一。奇异点处理在从旋转矩阵到欧拉角的转换中当Pitch角接近±90°时万向节锁上面的代码进行了简单处理。在实际应用中可能需要根据任务选择更稳定的姿态表示方法如四元数。验证方法选取几组特殊的关节角进行验证。例如当所有关节角为0时末端位置应大致在基座正前方偏上的某个点。更可靠的验证是与官方UR模型或成熟的机器人工具箱如Peter Corke的Robotics Toolbox的计算结果进行对比。3. UR5逆运动学求解与数值验证逆运动学是正运动学的反问题“给定末端位姿求解所有可能的关节角组合”。对于UR5这样的六轴串联机械臂理论上存在最多8组解对应机械臂的不同“构型”。3.1 逆运动学求解思路UR5满足Pieper准则最后三个关节轴相交于一点这大大简化了逆解求解。通常采用几何法与代数法相结合的方法求解关节1, 2, 3利用腕部中心点即关节4、5、6轴线的交点的位置只与前三个关节有关的特性将问题简化为一个三连杆平面臂的逆运动学问题通过几何关系求解θ1, θ2, θ3。求解关节4, 5, 6在已知前三个关节角的基础上可以计算出坐标系{3}到{6}的相对旋转。关节4,5,6构成了一个球腕其逆解是标准的ZYZ欧拉角求解问题可以相对独立地解出θ4, θ5, θ6。由于推导过程涉及大量三角函数和符号运算这里不展开全部公式但会说明在Matlab中实现的关键步骤和注意事项。3.2 Matlab逆运动学实现与多解处理在Matlab中我们可以基于上述思路编写数值求解函数。一个健壮的逆运动学函数应该能返回所有可能的解最多8组。function all_theta_solutions ur5_inverse_kinematics(T_desired) % UR5逆运动学求解返回所有可能解 % 输入T_desired - 期望的4x4末端齐次变换矩阵 % 输出all_theta_solutions - 一个8x6的矩阵每一行是一组关节角解弧度无效解用NaN填充 % 提取DH参数 a [0, -0.425, -0.392, 0, 0, 0]; d [0.0892, 0, 0, 0.1093, 0.09475, 0.0825]; % 计算腕部中心点坐标 P_06 T_desired(1:3, 4); % 末端位置 R_06 T_desired(1:3, 1:3); % 末端旋转矩阵 % 腕部中心点相对于末端坐标系{6}的偏移沿Z6方向d6 P_05 P_06 - R_06 * [0; 0; d(6)]; xc P_05(1); yc P_05(2); zc P_05(3); % --- 求解θ1 --- % 存在两种可能θ1 和 θ1 pi theta1_1 atan2(yc, xc); theta1_2 atan2(-yc, -xc); % 注意atan2返回值在[-pi, pi]需要根据实际情况调整到连续范围 % --- 求解θ3 --- % 对于每组θ1计算对应的中间变量再利用余弦定理求解θ3 % 公式涉及D (xc^2yc^2(zc-d1)^2 - a2^2 - a3^2) / (2*a2*a3) % theta3 atan2(sqrt(1-D^2), D) 或 atan2(-sqrt(1-D^2), D) 肘部向上/向下 % 这里省略具体计算代码但会判断D是否在[-1,1]之间否则无解。 % --- 求解θ2 --- % 在已知θ1和θ3后可以通过几何关系解出θ2。 % --- 求解θ4, θ5, θ6 (球腕) --- % 在得到前三个关节角(θ1, θ2, θ3)后可以计算变换矩阵^0T_3。 % 则 ^3R_6 (^0R_3)^T * R_06 % 然后从^3R_6中提取出等效的ZYZ欧拉角即可得到θ4, θ5, θ6。 % 注意θ5可能接近0时存在奇异此时θ4和θ6有无穷多解通常固定其中一个。 % 将上述求解过程封装对θ1的两种可能、θ3的两种可能肘部上下进行组合。 % 最终生成最多8组解。 all_theta_solutions zeros(8, 6); % 预分配 solution_count 0; % ... (具体的求解循环和判断逻辑) % 对于无解的分支用NaN填充该行。 end避坑指南与多解选择解的合法性校验求出的关节角必须在校验后才是有效解。校验包括关节限位UR5每个关节都有运动范围例如θ1: ±360°, θ2: ±360°等。解出的角度必须落在限位内。自碰撞检查某些解可能导致机械臂与自身或环境发生碰撞需要根据具体模型进行判断。奇异点规避当腕部中心点位于关节1的轴线上时或当θ5接近0时机械臂处于奇异位形逆解不稳定或有无穷多解。程序中需要检测并处理。多解选择策略得到多组解后如何选择常用策略有最近解选择与当前关节角度欧氏距离最小的一组解使运动最平滑。优化指标选择使某个性能指标最优的解如关节力矩最小、避免奇异等。人工指定构型明确指定“左手/右手”、“肘部向上/向下”、“腕部是否翻转”等构型标志从符合标志的解中选取。3.3 正逆运动学闭环验证这是检验你代码正确性的黄金标准。思路是随机生成或在关节限位内采样一组关节角theta_original用正运动学计算出末端位姿T再用逆运动学函数从T求解关节角theta_solved。比较theta_original和theta_solved考虑关节角周期性和多解性。在数值精度允许的误差内如1e-6它们应该相等。% 正逆运动学闭环验证示例 theta_rand (rand(1,6)-0.5)*2*pi; % 生成随机关节角 [T, ~] ur5_forward_kinematics(theta_rand); all_solutions ur5_inverse_kinematics(T); % 从所有解中寻找与原始角度最接近的解考虑2π周期 theta_original_mod mod(theta_rand pi, 2*pi) - pi; % 映射到[-pi, pi] min_error inf; best_solution []; for i 1:size(all_solutions, 1) if any(isnan(all_solutions(i, :))) continue; end sol_mod mod(all_solutions(i, :) pi, 2*pi) - pi; error norm(sol_mod - theta_original_mod); if error min_error min_error error; best_solution sol_mod; end end fprintf(原始关节角: %s\n, mat2str(theta_original_mod, 3)); fprintf(逆解关节角: %s\n, mat2str(best_solution, 3)); fprintf(误差范数: %e\n, min_error);如果误差在可接受范围如1e-5说明你的正逆运动学代码基本正确。4. 关节空间轨迹规划三次与五次多项式轨迹规划的目的是生成一条从起点到终点的、时间上平滑的运动路径。在关节空间规划中我们直接规划每个关节的角度随时间变化的函数 θ(t)。多项式插值是最基础的方法。4.1 三次多项式插值原理与实现对于单个关节给定起点角度 θ0、终点角度 θf以及起点和终点的速度通常设为0规划时间 tf。我们需要求解一个三次多项式 θ(t) a0 a1t a2t^2 a3*t^3 使其满足四个边界条件 θ(0) θ0, θ(tf) θf, θ(0) v0 (通常为0), θ(tf) vf (通常为0)代入边界条件可以得到一个线性方程组解出系数 a0, a1, a2, a3 a0 θ0 a1 v0 a2 (3*(θf - θ0) - (2*v0 vf)tf) / tf^2 a3 (-2(θf - θ0) (v0 vf)*tf) / tf^3Matlab实现function [q, qd, qdd] cubic_traj(q0, qf, t, tf, v0, vf) % 三次多项式轨迹规划 % 输入q0, qf - 起点和终点位置 % t - 时间向量或单个时间点 % tf - 总时间 % v0, vf - 起点和终点速度默认0 % 输出q, qd, qdd - 位置、速度、加速度 if nargin 6, vf 0; end if nargin 5, v0 0; end % 计算多项式系数 a0 q0; a1 v0; a2 (3*(qf - q0) - (2*v0 vf)*tf) / tf^2; a3 (-2*(qf - q0) (v0 vf)*tf) / tf^3; % 计算轨迹 tau t / tf; % 归一化时间 q a0 a1*t a2*t.^2 a3*t.^3; qd a1 2*a2*t 3*a3*t.^2; qdd 2*a2 6*a3*t; end特点与局限优点计算简单能保证起点和终点的位置和速度连续。缺点加速度在起点和终点不连续是一个阶跃跳变。在实际电机控制中这可能导致冲击jerk影响运动平稳性和寿命。4.2 五次多项式插值原理与实现为了获得更平滑的运动我们可以引入对起点和终点加速度的约束。这就需要五次多项式 θ(t) a0 a1t a2t^2 a3t^3 a4t^4 a5*t^5 六个边界条件为 θ(0)θ0, θ(tf)θf, θ(0)v0, θ(tf)vf, θ(0)a0, θ(tf)af解这个线性方程组得到系数 a0 θ0 a1 v0 a2 a0 / 2 a3 (20*(θf-θ0) - (8vf12v0)tf - (3a0-af)tf^2) / (2tf^3) a4 (30*(θ0-θf) (14vf16v0)tf (3a0-2af)tf^2) / (2tf^4) a5 (12(θf-θ0) - 6*(vfv0)*tf - (af-a0)tf^2) / (2tf^5)Matlab实现function [q, qd, qdd, qddd] quintic_traj(q0, qf, t, tf, v0, vf, a0, af) % 五次多项式轨迹规划 % 输入q0, qf - 起点和终点位置 % t - 时间向量或单个时间点 % tf - 总时间 % v0, vf - 起点和终点速度 % a0, af - 起点和终点加速度 % 输出q, qd, qdd, qddd - 位置、速度、加速度、加加速度(Jerk) if nargin 8, af 0; end if nargin 7, a0 0; end if nargin 6, vf 0; end if nargin 5, v0 0; end % 计算多项式系数 a0_coeff q0; a1 v0; a2 a0 / 2; a3 (20*(qf - q0) - (8*vf 12*v0)*tf - (3*a0 - af)*tf^2) / (2*tf^3); a4 (30*(q0 - qf) (14*vf 16*v0)*tf (3*a0 - 2*af)*tf^2) / (2*tf^4); a5 (12*(qf - q0) - 6*(vf v0)*tf - (af - a0)*tf^2) / (2*tf^5); % 计算轨迹 q a0_coeff a1*t a2*t.^2 a3*t.^3 a4*t.^4 a5*t.^5; qd a1 2*a2*t 3*a3*t.^2 4*a4*t.^3 5*a5*t.^4; qdd 2*a2 6*a3*t 12*a4*t.^2 20*a5*t.^3; qddd 6*a3 24*a4*t 60*a5*t.^2; % 加加速度 end特点与优势优点位置、速度、加速度在起点和终点都连续且可控。运动更加平滑对机械系统的冲击更小。缺点计算量稍大且高阶多项式在长距离或长时间规划时可能产生超出关节限位的“过冲”现象。5. 轨迹规划对比分析与Matlab仿真现在我们将三次和五次多项式应用于UR5的六个关节进行完整的轨迹规划仿真并对比其性能。5.1 仿真场景设置假设我们让UR5末端从初始位姿pose_start运动到目标位姿pose_goal。路径点生成首先利用逆运动学分别计算出起点和终点对应的关节角向量q_start和q_goal从多解中选择合适的一组。关节独立规划对每个关节 i分别用三次和五次多项式规划从q_start(i)到q_goal(i)的轨迹。总时间tf设为5秒起点和终点速度、加速度均设为0。轨迹生成以固定时间间隔如0.01s采样得到离散的关节角度序列。正运动学验证将规划出的关节角序列代入正运动学函数得到末端执行器的笛卡尔空间轨迹可视化检查是否平滑、有无奇异。5.2 Matlab仿真代码框架%% 1. 定义起点和终点笛卡尔空间 % 假设起点为初始位置终点在X方向移动0.5米 T_start eye(4); T_goal T_start; T_goal(1,4) 0.5; % X方向平移0.5米 %% 2. 逆运动学求解起点和终点关节角 q_start_solutions ur5_inverse_kinematics(T_start); q_goal_solutions ur5_inverse_kinematics(T_goal); % 这里需要编写一个函数从多解中根据某种策略如最近解、无奇异解选择一组 q_start select_configuration(q_start_solutions, [0,0,0,0,0,0]); % 假设选择接近零位的解 q_goal select_configuration(q_goal_solutions, q_start); % 选择与起点构型最接近的解 %% 3. 轨迹规划参数 tf 5; % 总时间5秒 dt 0.01; % 采样时间 t 0:dt:tf; N length(t); % 初始化存储数组 q_cubic zeros(N, 6); qd_cubic zeros(N, 6); qdd_cubic zeros(N, 6); q_quintic zeros(N, 6); qd_quintic zeros(N, 6); qdd_quintic zeros(N, 6); qddd_quintic zeros(N, 6); %% 4. 对每个关节进行规划 for j 1:6 [q_cubic(:,j), qd_cubic(:,j), qdd_cubic(:,j)] cubic_traj(q_start(j), q_goal(j), t, tf, 0, 0); [q_quintic(:,j), qd_quintic(:,j), qdd_quintic(:,j), qddd_quintic(:,j)] quintic_traj(q_start(j), q_goal(j), t, tf, 0, 0, 0, 0); end %% 5. 正运动学验证与可视化 pos_cubic zeros(N, 3); pos_quintic zeros(N, 3); for k 1:N T_cubic ur5_forward_kinematics(q_cubic(k, :)); pos_cubic(k, :) T_cubic(1:3, 4); T_quintic ur5_forward_kinematics(q_quintic(k, :)); pos_quintic(k, :) T_quintic(1:3, 4); end %% 6. 绘图对比 figure(Position, [100, 100, 1200, 800]); % 子图1关节1的角度、速度、加速度对比 subplot(3,2,1); plot(t, q_cubic(:,1), b-, LineWidth, 1.5); hold on; plot(t, q_quintic(:,1), r--, LineWidth, 1.5); ylabel(关节1角度 (rad)); legend(三次, 五次); grid on; subplot(3,2,3); plot(t, qd_cubic(:,1), b-, LineWidth, 1.5); hold on; plot(t, qd_quintic(:,1), r--, LineWidth, 1.5); ylabel(关节1速度 (rad/s)); grid on; subplot(3,2,5); plot(t, qdd_cubic(:,1), b-, LineWidth, 1.5); hold on; plot(t, qdd_quintic(:,1), r--, LineWidth, 1.5); xlabel(时间 (s)); ylabel(关节1加速度 (rad/s^2)); grid on; % 子图2末端执行器在XYZ方向的轨迹 subplot(3,2,2); plot3(pos_cubic(:,1), pos_cubic(:,2), pos_cubic(:,3), b-, LineWidth, 2); hold on; plot3(pos_quintic(:,1), pos_quintic(:,2), pos_quintic(:,3), r--, LineWidth, 2); plot3(pos_cubic(1,1), pos_cubic(1,2), pos_cubic(1,3), go, MarkerSize, 10, MarkerFaceColor, g); plot3(pos_cubic(end,1), pos_cubic(end,2), pos_cubic(end,3), ro, MarkerSize, 10, MarkerFaceColor, r); xlabel(X (m)); ylabel(Y (m)); zlabel(Z (m)); title(末端轨迹对比); legend(三次, 五次, 起点, 终点); grid on; view(3); % 子图3加加速度对比仅五次多项式有定义 subplot(3,2,4); plot(t, qddd_quintic(:,1), r-, LineWidth, 1.5); xlabel(时间 (s)); ylabel(关节1加加速度 (rad/s^3)); title(五次多项式加加速度); grid on; % 子图4关节空间最大速度/加速度对比条形图 subplot(3,2,6); max_vel_cubic max(abs(qd_cubic), [], 1); max_vel_quintic max(abs(qd_quintic), [], 1); max_acc_cubic max(abs(qdd_cubic), [], 1); max_acc_quintic max(abs(qdd_quintic), [], 1); bar_data [max_vel_cubic; max_vel_quintic; max_acc_cubic; max_acc_quintic]; bar_handle bar(bar_data); set(gca, XTickLabel, {关节1,关节2,关节3,关节4,关节5,关节6}); ylabel(极值); legend(三次-速度,五次-速度,三次-加速度,五次-加速度); title(各关节运动极值对比); grid on;5.3 关键对比与结果分析运行上述仿真代码我们可以从多个维度对比三次和五次多项式平滑性最核心区别加速度曲线三次多项式的加速度在起点和终点是不连续的从0瞬间跳变到某个值再跳变回0在图中表现为折线的尖角。而五次多项式的加速度曲线是连续且平滑的抛物线在起点和终点都为零。加加速度Jerk三次多项式的加加速度在起点和终点是无穷大 Dirac δ 函数这在实际物理系统中无法实现会导致冲击。五次多项式的加加速度是连续的线性函数最大值有限对机械系统更友好。运动极值最大速度对于相同的运动时间和距离五次多项式规划出的最大速度通常会更高。这是因为为了满足加速度连续的约束它需要“提前加速”和“提前减速”导致中间段的速度更高。最大加速度五次多项式的最大加速度通常更小。因为它平滑了加速度曲线避免了三次多项式在起点/终点的瞬时高加速度。计算复杂度五次多项式的系数计算稍复杂但以现代处理器的能力这点开销微乎其微。主要的考量在于平滑性带来的收益。末端轨迹在关节空间规划中末端在笛卡尔空间的轨迹是不可控的。无论是三次还是五次其末端路径都是一条复杂的空间曲线且两者路径并不相同。这是因为每个关节的运动规律不同合成后的末端路径自然不同。如果需要精确的末端直线或圆弧轨迹必须在笛卡尔空间进行规划然后通过逆运动学转换到关节空间。选型建议使用三次多项式当对运动平滑性要求不高或者执行机构如步进电机本身对加加速度不敏感且希望计算最简单时。使用五次多项式绝大多数工业应用场景的首选。它能有效减少机械冲击、振动和噪音提高定位精度和设备寿命。对于高速、高精度或负载较大的机械臂五次或更高阶如七次多项式几乎是必须的。进阶考虑如果还对加加速度有约束限制其最大值则需要使用七次或更高阶多项式或者采用S曲线Trapezoidal, S-Curve速度规划后者在工业控制器中更为常见。6. 从仿真到实践的注意事项把Matlab里的漂亮曲线变成现实中机械臂的稳定运动中间还有不少坑要踩。关节限位与奇异性检查规划出的整条轨迹上的每一个点都需要用正运动学验证末端位姿并用逆运动学或直接检查关节角验证是否始终在关节限位内且远离奇异位形。特别是当轨迹经过工作空间边界时。轨迹离散化与实时性规划出的连续轨迹需要离散化为时间序列发送给控制器。采样周期需要与控制器周期匹配。太慢会丢失细节太快可能给控制器带来负担。同时规划算法本身的计算时间必须远小于采样周期。速度与加速度的前馈高级的运动控制器不仅需要位置指令还需要速度、甚至加速度的前馈指令以提高跟踪精度。多项式规划能天然提供这些信息。与底层控制器的接口实际控制器如UR的URScript, ROS的joint_trajectory_controller通常有特定的指令格式。你需要将规划好的位置、速度、加速度序列按照要求的时间戳打包发送。在线重规划与扰动处理上述是离线轨迹规划。在实际中如果遇到障碍或目标移动需要在线重规划。这时就要考虑算法的实时性以及新旧轨迹如何平滑衔接的问题。在我自己的项目里最开始用三次多项式电机启停时总能听到“哐”的一声。换成五次多项式后声音变得柔和多了长期运行下来轴承的磨损迹象也明显减轻。这一个小小的改变背后是对运动本质理解的深化。轨迹规划不是数学游戏它直接关系到设备的物理寿命和运动品质。理解了三、五次多项式的区别你就拿到了优化机械臂运动性能的第一把钥匙。后续无论是做更复杂的样条曲线规划、还是考虑动力学的轨迹优化这个基础都至关重要。本文还有配套的精品资源点击获取
返回列表