机器人正运动学实例——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

微信小程序如何优雅地跳转外部链接?WebView + 复制方案实战

在做小程序开发的过程中,我们经常会遇到这样一个需求: 👉 用户在小程序里点开一个课程/资料,需要跳转到公司内部的学习系统或者外部网站。 问题来了: * 小程序禁止直接用 <a> 标签跳转外部网页 * 也不能像浏览器里那样用 window.open * 那么,怎么实现呢? 这篇文章我会结合实际项目,聊聊 两种常见方案: 1. 业务域名 + WebView 打开外部链接 2. 不在业务域名里的 → 自动复制链接 1️⃣ 背景:小程序的安全限制 微信对小程序的外部链接有严格限制: * 只能通过 <WebView /> 组件来加载 H5 页面。 * 这个 H5 的域名,必须提前在 小程序后台 → 开发设置 → 业务域名 配置。 * 没配置的域名,一律打不开。 所以,解决问题的第一步就是搞清楚: 👉 目标链接的域名是否可控、

Java+Leaflet:湖南省道路长度WebGIS的构建与实践

Java+Leaflet:湖南省道路长度WebGIS的构建与实践

目录 前言 一、基础空间数据简介 1、涉及相关表 2、省域道路长度检索 二、Java后台实现 1、道路视图对象 2、Mapper空间检索查询 3、控制API实现 三、WebGIS界面实现 1、里程图例及初始化 2、各地市信息展示 四、成果展示 1、总体展示 2、分区域说明 五、总结 前言         在当今数字化时代,地理信息系统(GIS)技术在各个领域都发挥着至关重要的作用。它不仅为城市规划、交通管理、环境保护等提供了强大的技术支持,也为公众获取地理信息提供了便捷的途径。湖南省作为中国中部地区的重要省份,拥有复杂的地理环境和庞大的交通网络。如何高效地管理和展示湖南省的道路长度信息,对于交通规划、物流运输以及公众出行都具有极其重要的意义。因此,我们开展了基于Java和Leaflet的湖南省道路长度WebGIS系统的构建与实践研究。         湖南省地处中国中部,交通网络密集且复杂。随着经济的快速发展和城市化进程的加快,湖南省的道路建设不断推进,

WebMCP:浏览器AI交互新范式_20260213114222

一、WebMCP是什么 1. 基本定义 WebMCP(Web Model Context Protocol)是Google与Microsoft在W3C框架下联合推动的浏览器原生Web API,Chrome 146已推出早期预览版本,核心目标是让网页主动将自身能力封装为结构化工具,供AI Agent直接调用,解决当前Agent操作网页的稳定性与效率问题。 2. 核心思想 把交互从UI层搬到语义层:不再依赖按钮点击、坐标定位或DOM解析,而是让网页直接暴露"提交请假"“搜索航班”“加入购物车"等业务动作,形成结构化工具契约,Agent按契约调用而非"猜UI”。 3. 关键特性 * 双轨API设计:声明式API(HTML表单属性)+ 命令式API(JavaScript注册),兼顾易用性与灵活性 * 浏览器内运行:纯客户端实现,网页本身就是"工具服务器",天然继承用户登录态与权限上下文 * 结构化上下文:

AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

Claude API - AWS Kiro 账号池管理 | OpenAI 兼容代理服务 项目地址在wget 里面 web页面访问把后缀.git删掉即可 效果图 AWS Kiro 账号池管理系统 - 将 Amazon Q Developer (Kiro) API 转换为 OpenAI 兼容格式的企业级 Go 代理服务。支持多账号池管理、OIDC 自动认证、令牌自动刷新、流式响应、完整的 Web 管理控制台。 关键词: AWS Kiro, Amazon Q Developer, Claude API, OpenAI Proxy, 账号池管理, OIDC 认证, Go