机器人正运动学实例——PUMA560机械臂(附Matlab机器人工具箱建模代码)

机器人正运动学实例——PUMA560机械臂(附Matlab机器人工具箱建模代码)

前言

前面文章讲到了机器人正运动学的基本方法,这篇文章就是以实际案例来记录如何进行运动学正解、运动空间分析等(包括利用Matlab机器人工具箱来实现),本文案例是PUMA560六自由度机械臂。

一、方法回顾

①进行正运动学的基础是分析机器人的机构原理,第一步是建立连杆坐标系(使用右手法则,并尽可能让更多参数为0,简化运动方程);

②描述连杆与关节参数,进行连杆变换建立D-H参数表(是改进的D-H法);

③建立正运动学方程

至此,列写正运动学方程即完成了正运动学的描述,也就是通过不同已知的关节变量最终得到的是机器人末端相对于基坐标系的运动

二、PUMA560机械臂正运动学分析

1. 绘制机构原理图并建立坐标系

PUMA560机械臂是6R的机械臂,也就是只有六个转动,最后的三转自由度集中在了末端,三轴相交。可以对其构建机构原理图如下:

坐标系的Z轴指向旋转关节轴向,坐标系建立符合右手法则

连杆{1}系为了方便描述与{0}系重合,因此{1}系相对于{0}系就只有绕Z轴的转动;其他坐标系建立如上图所示。

2. 建立D-H参数表

建立了坐标系,再根据已知的长度等参数,可以根据上面提到的描述连杆参数的方法,列写D-H参数表如下:

注:括号中代表了上图位姿下,该变量的数值(注意正负号)。

开始我不太明白为何运动学分析前一定要列写这个参数表,在写齐次变换矩阵时候,我一边写一边分析不就好了吗?

这里引用哈工大一个师兄的
知乎回答,大概意思就是D-H参数作用主要不是为了下面齐次变换矩阵,而是建立关节物理模型和空间位置姿态之间的关系。(可能有些抽象,感兴趣可以深入学一学)

个人认为D-H参数表可以很清楚的说明连杆重要的四类参数(而欧式变换需要至少6个参数),对于建立正运动学模型有重要意义。

3. 正运动学方程推导+Matlab求解

① 推导的理论基础

这里我们需要建立{6}系对于{0}系的变换矩阵,也就是进行下面的推导:

同时,连杆变换中讲到了通用的子变换情况,齐次变换矩阵为:

注意:这里的矩阵变换通式是用的改进型的D-H法,因此下面的mtlab都是用的改进型。


② 具体过程

让我们来列写各个子变换,结合上面通式与D-H表,也可以很容易列写

_{1}^{0}\textrm{}T

~

_{6}^{5}\textrm{}T

当然我写的下面matlab程序可以由D-H参数表与变换通式,直接输出各个子变换的值~

_{1}^{0}\textrm{}T=\begin{bmatrix} c_{1} & -s_{1} & 0& 0\\ s_{1}& c_{1} & 0 & 0\\ 0& 0 & 1 & 0\\ 0 & 0& 0 & 1 \end{bmatrix}

     

_{2}^{1}\textrm{}T=\begin{bmatrix} c_{2} & -s_{2} & 0& 0\\ 0& 0 &1 & d_{2}\\ -s_{2}& -c_{2} & 0 & 0\\ 0 & 0& 0 & 1 \end{bmatrix}

     

_{3}^{2}\textrm{}T=\begin{bmatrix} \ c_{3} & -s_{3} & 0 & a_2 \\ \ s_{3} & c_{3} & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}
_{4}^{3}\textrm{}T=\begin{bmatrix} c_{4} & -s_{4} & 0 & a_3 \\ 0& 0 & 1 & d_4 \\ -s_4 & -c_4 & 0 & 0\\ 0 & 0& 0 & 1 \end{bmatrix}

     

_{5}^{4}\textrm{}T=\begin{bmatrix} c_{5} & -s_{5} & 0& 0\\ 0& 0 &-1 & 0\\ s_{5}& c_{5} & 0 & 0\\ 0 & 0& 0 & 1 \end{bmatrix}

     

_{6}^{5}\textrm{}T=\begin{bmatrix} \ c_{6} & -s_{6} & 0 & 0 \\ \ 0 & 0 & 1 & 0 \\ -s_6 & -c_6 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

对上述矩阵相乘可以用Matlab运算(比较快):

clc; clear; %以下为正运动学求解过程 %声明变量 syms theata1 theata2 theata3 theata4 theata5 theata6 a2 a3 d2 d4; % %代入参数值 % theata1=0; theata2=0; theata3=-pi/2; theata4=0; theata5=0; theata6=0; % a2=400; a3=10; d2=120; d4=400; %D-H参数表 DH=[0 0 0 theata1; -pi/2 0 d2 theata2; 0 a2 0 theata3; -pi/2 a3 d4 theata4; pi/2 0 0 theata5; -pi/2 0 0 theata6]; t=1; %齐次变换 for i=1:6 T0 = [cos(DH(i,4)) -sin(DH(i,4)) 0 DH(i,2); sin(DH(i,4))*cos(DH(i,1)) cos(DH(i,4))*cos(DH(i,1)) -sin(DH(i,1)) -DH(i,3)*sin(DH(i,1)); sin(DH(i,4))*sin(DH(i,1)) cos(DH(i,4))*sin(DH(i,1)) cos(DH(i,1)) DH(i,3)*cos(DH(i,1)); 0 0 0 1 ] t = t*T0 end 

上述代码实际上就是利用了一个for循环,来计算

_{1}^{0}\textrm{}T

~

_{6}^{5}\textrm{}T

矩阵并输出到

T_{0}

中;之后为了计算矩阵相乘,就引入了T,每计算一个子变换就乘进去一个,最终得到的T结果就是

_{6}^{0}\textrm{}T


如果已知了theata1~theata6的关节变量值,可以在DH参数表下面写明对应数值,这样就可以计算出对应的齐次变换矩阵真值了~

比如,上面代码代入参数值取消注释后运行代码,可以输出这个参数值下的齐次变换矩阵,可以看到末端相对基座标的位置信息:

% theata1=0; theata2=0; theata3=-pi/2; theata4=0; theata5=0; theata6=0; % a2=400; a3=10; d2=120; d4=400;

也就是代表了机械臂末端在基坐标系下的位置是:x=800,y=120,z=10。

三、Matlab正运动仿真——机器人工具箱

接下来是利用matlab里的工具箱进行机械臂的建模,这一步骤就是可以很便捷的对各个关节进行参数设置,就能够直观看出末端的位置角度信息。

下面是整体的建模代码:

clc; clear; %定义连杆的D-H参数 %连杆偏移 d1 = 0; d2 = 120; d3 = 0; d4 = 400; d5 = 0; d6 = 0; %连杆长度 a1 = 0; a2 = 0; a3 = 400; a4 = 10; a5 = 0; a6 = 0; %连杆扭角 alpha1 = 0; alpha2 = -pi/2; alpha3 = 0; alpha4 = -pi/2; alpha5 = pi/2; alpha6 = -pi/2; %建立机器人模型 % theta d a alpha L1=Link([0 d1 a1 alpha1 ],'modified'); L2=Link([0 d2 a2 alpha2 ],'modified'); L3=Link([0 d3 a3 alpha3 ],'modified'); L4=Link([0 d4 a4 alpha4 ],'modified'); L5=Link([0 d5 a5 alpha5 ],'modified'); L6=Link([0 d6 a6 alpha6 ],'modified'); %限制机器人的关节空间 L1.qlim = [(-165/180)*pi,(165/180)*pi]; L2.qlim = [(-150/180)*pi, (60/180)*pi]; L3.qlim = [(-150/180)*pi, (90/180)*pi]; L4.qlim = [(-180/180)*pi,(180/180)*pi]; L5.qlim = [(-115/180)*pi,(115/180)*pi]; L6.qlim = [(-360/180)*pi,(360/180)*pi]; %连接连杆,机器人取名为myrobot robot=SerialLink([L1 L2 L3 L4 L5 L6],'name','6Rrobot'); robot.base = transl(0 ,0 ,660.4); %基坐标系进行平移 robot.display(); %打印出机器人D-H参数表 robot.teach(); %展示机器人模型 %调整坐标轴长度 ax = gca; ax.XLim = [-1000, 1000]; ax.YLim = [-1000, 1000]; ax.ZLim = [-1000, 1500]; hold on; 

之后可以输出下面的结果,图中我修改了转轴3的角度:

可以和上面旋转矩阵直接求解的结果(x=800,y=120,z=10)对比,发现机器人的z位置为什么是670.4呢?这是因为建系时为了方便列写后续参数,没有将底座的高度考虑进来。我在上面代码中写了这样一句:

robot.base = transl(0 ,0 ,660.4); %基坐标系进行平移

就是将基坐标系平移,这句命令将基坐标系向Z方向平移了660.4个单位,也就是PUMA560机器人图中的基座高度,因此这两个解出来实际是一样的。

四、PUMA560工作空间可视化

上面讲到了如何进行这个机器人的建模和正运动学解算,下面我们来具体求一下这个机器人的工作空间到底是多大呢,而工作空间算出来就可以知道,我们设计的机器人能不能满足工作环境的需要了~

只需要在上面正解的代码后面,加下面的代码即可:

% 计算工作空间 num = 10000; % 采样点数,点数越多越精确但计算时间越长 q = zeros(num, 3); % 提前声明这样的位置矩阵 % 计算每个关节构型对应的末端执行器位置 for i = 1:num q1=L1.qlim(1)+ rand * (L1.qlim(2)-L1.qlim(1)) ; q2=L2.qlim(1)+ rand * (L1.qlim(2)-L1.qlim(1)) ; q3=L3.qlim(1)+ rand * (L1.qlim(2)-L1.qlim(1)) ; q4=L4.qlim(1)+ rand * (L1.qlim(2)-L1.qlim(1)) ; q5=L5.qlim(1)+ rand * (L1.qlim(2)-L1.qlim(1)) ; q6=L6.qlim(1)+ rand * (L1.qlim(2)-L1.qlim(1)) ; q= [q1 q2 q3 q4 q5 q6]; T = robot.fkine(q); p(i,:) = transl(T); end % 可视化工作空间 scatter3(p(:,1), p(:,2), p(:,3), 10, 'b', '.');

这是最终的工作空间结果图:


总结

本文主要针对PUMA560这种六自由度机械臂,进行了正运动学分析,其中为了方便计算旋转矩阵利用到了matlab工具;之后利用matlab机器人工具箱,进行了机械臂的建模,这一结果也可以用于正运动学的解算;最后对其工作空间进行了可视化分析~   以上过程的基础是机构自由度、连杆参数、齐次变换等,在我专栏中都有介绍,如有需要可以查阅~

本人也在不断学习过程中,如有不足之处,还望批评指正~

Read more

ROS新手必看:5分钟搞定rqt工具箱核心插件配置(附无人机调试实战)

ROS实战:从零到一掌握rqt工具箱,打造你的机器人数据可视化中枢 如果你刚开始接触ROS,面对海量的节点、话题和消息数据,是不是感觉像在黑暗中摸索?命令行里的文本输出虽然精确,但缺乏直观性,调试一个简单的PID参数可能都要反复重启节点、查看日志,效率低下。这正是rqt工具箱设计的初衷——为ROS开发者提供一套基于Qt的图形化“瑞士军刀”,将复杂的数据流变成一目了然的图表和图形界面。 我记得第一次用rqt_plot可视化无人机角速度数据时,那种“原来如此”的顿悟感。不再需要去解析冗长的命令行数字,期望值与实际值的曲线对比直接在屏幕上展开,超调、震荡、响应延迟变得肉眼可见。rqt不仅仅是几个工具,它更像是一个可自由拼装的工作台,你可以把计算图、参数配置、数据曲线、日志信息全部整合在一个窗口里,形成专属的调试仪表盘。本文将带你超越基础的“点击操作”,深入理解rqt的插件化架构,并结合作者真实的无人机调试经验,展示如何高效配置核心插件,解决常见的“灰色加号”等棘手问题,最终让你能灵活运用rqt应对各种机器人开发场景。 1. 重新认识rqt:不止于工具集,而是可视化框架 很多人把rq

医疗送药机器人“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用

医疗送药机器人“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用

一、引言 1.1 研究背景与意义 在医疗体系中,高效精准的药品配送是保障医疗服务质量和患者安全的关键环节。随着医疗技术的不断进步和医疗需求的日益增长,传统的人工送药方式逐渐暴露出诸多弊端,如配送效率低下、易受人为因素干扰导致错误率上升、人力成本高昂等。特别是在大型综合医院,科室众多、布局复杂,药品配送路径长且需经过多个区域,这使得人工送药的难度和工作量大幅增加,进而影响医疗服务的及时性和准确性。 医疗送药机器人的出现为解决这些问题提供了新的途径。它能够在医院复杂的环境中自主导航,按照预设的路径和时间准确地将药品送达指定地点,极大地提高了药品配送的效率和准确性。通过自动化的配送流程,送药机器人可有效减少人为因素造成的错误,如拿错药、送错药等情况,从而保障患者的用药安全。同时,送药机器人的应用还能将药师和护士从繁琐的药品配送工作中解放出来,使其能够将更多的时间和精力投入到临床药学服务和患者护理工作中,提高医疗服务的整体质量。 “空间拓扑优化 + 动态算法决策 + 多级容错控制” 三重链式编程技术的提出,为医疗送药机器人性能的进一步提升带来了革命性的突破。空间拓扑优化技术能够对医院的

低代码+AI:中小企业数字化转型的“加速器”实践

低代码+AI:中小企业数字化转型的“加速器”实践

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕人工智能这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * 低代码+AI:中小企业数字化转型的“加速器”实践 低代码+AI:中小企业数字化转型的“加速器”实践 🌍 在存量博弈与增量重塑交织的商业环境中,中小企业正面临着前所未有的生存压力:人力成本持续攀升、客户需求日益碎片化、合规要求不断加码、数据孤岛层层叠加。传统IT建设模式动辄数十万起步的定制开发、长达数月的交付周期、以及后期难以维护的“黑盒系统”,往往让中小企业在数字化浪潮中望而却步。然而,技术演进的轨迹从不等待观望者。当低代码(Low-Code)的敏捷构建能力与大语言模型(AI)的认知推理能力深度耦合,一种全新的数字化范式正在悄然成型。它不再依赖重金投入的专职研发团队,也不再受限于僵化的业务流程框架,而是以“低门槛+高智能”的组合拳,为中小企业提供了一条可负担、可扩展、可进化的转型捷

Vivado完整license文件获取与配置指南

本文还有配套的精品资源,点击获取 简介:Vivado是由Xilinx开发的FPGA和SoC设计综合工具,支持Verilog、VHDL等硬件描述语言,提供高级综合、仿真、IP集成等功能。本资源包“Vivado_的license文件.zip”包含用于解锁Vivado完整功能的许可证文件。介绍了许可证服务器配置、.lic文件管理、浮动与固定许可证区别、激活流程、更新与诊断等核心内容。适用于FPGA开发者、嵌入式系统工程师及学习者,帮助其合法配置Vivado环境,提升开发效率和项目执行能力。 1. Vivado工具与FPGA开发环境概述 Xilinx Vivado设计套件是面向FPGA和SoC开发的集成化软件平台,广泛应用于通信、工业控制、人工智能、嵌入式视觉等多个高科技领域。其核心功能包括项目创建、综合、实现、仿真、调试及系统级集成,支持从设计输入到硬件验证的全流程开发。 Vivado不仅提供了图形化界面(GUI)便于初学者快速上手,还支持Tcl脚本自动化操作,满足高级用户的大规模工程管理需求。其模块化架构设计使得开发者可以灵活选择所需功能组件,如HLS(高层次综合)、IP In