郑重提示:为了记录自己在学习过程中遇到的问题,所以记录了这篇博客。。在后面学习的过程中发现之前这篇博客记录的导出URDF模型坐标系设置方法存在一些问题,不好写DH参数表,,更更要命的是,好些朋友都收藏了这篇博客,为了不误导大家,再次对以下内容做出修改,并给出DH参数表。该方法是目前为止,我认为最好理解的一种建立坐标系方法----感觉上属于标准DH参数表建立方法的分支


再多说一句,大家都知道,建立坐标系的方法不是唯一的,分为标准DH参数和修正DH参数,采用标准DH参数建立方法只适用于“链式”机械臂,也就是我用到的这种串联机械臂,假使用于并联机械臂则会产生歧义。什么是并联机械臂呢?如下图这种闭环机械臂。采用修正DH参数方法的话,虽然不会产生歧义,但是非常不好理解。所以如下内容是我能想到的一种最好理解的应用与 于“链式”机械臂的坐标系建立方法

并联机械臂


小提示:我建立机械臂的目的是想在Ubuntu中使用Gazebo进行仿真,在仿真过程中遇到的很多问题也愿意和大家分享比如颤抖,上天,倒地啥的。不多说,进入正题

机械臂模型下载

首先下载模型,我使用的模型是ABB-IRB2600-20这款机械臂,可以在官网上下载,给出官网连接如下:https://new.abb.com/products/robotics/zh/robots/paint-robots/irb-52大家可以复制打开这个连接,然后下载这款机械臂。

我下载好并装配好的机械臂如下:

对了,大家下载好的机械臂没有夹爪,这个夹爪是我自己画,并装配上去的,因为我要仿真抓取。

建立坐标系,首先要求大家规范一点,自己别把自己搞乱了:

Link代表骨骼,就是每一个部分。joint代表关节,就是两个关节的组合。举个栗子,大家想象自己的腿,就可以写成,Link_小腿,Link_大腿,组合成joint_膝盖。这就很有印象了吧!

为了理解,特意修改了机械臂每一个部分的取名,大家可以不用修改里面模型的名字,我只是给大家规范一下:

大家下载的机械臂只有从其中的base_link到link6这七个部分,既从底座到末端法兰盘,从link7_1往后都是我自己添加的夹爪。

哪里是base_link呢?如下图:

右下角就是base_link(蓝色底座),大家可能会问,难道我是傻子,不知道这里是base_link吗?我特意说这里,是因为后面在Gazebo仿真的时候需要把base_link和世界坐标系固定,否则你的机械臂会飞起来或者整体倒在地上(原因之一),当然固定了坐标系机械臂也不一定能支棱起来,但这部分必须要。

建立坐标系三步走,先点,再线,后坐标系

第一步:点在哪里呢?以base_link为栗子:如下:

这个点很好找吧?装配的时候就将底座放在了原点位置,我给它取名叫做base_link_point。这里简单!

第二步:线在哪里?这个线叫做轴线,是为了下一个Link建立的旋转轴线,如下图:

这根轴是不是就是下一个关节Link1旋转所围绕的轴线?没错,我给他取名为axis1,大家可能要问了,为什么不叫axis_base_link呢?因为base_link是固定的不需要轴,还有,我前面提到的,建立轴线是为了给下一个Link建立轴线。

第三步:坐标系在哪里?如下图

我们选中刚刚建立的base_link_point这个点,然后点击Solidworks的顶部的插入--参考几何体--坐标系,建立坐标系。注意:建立的这个坐标系有两点要求

第一:Z轴要和旋转轴重合,一定要重合,必须重合。但是Base_link不一样,因为它是固定的,它没有旋转轴,所以我们让它的Z轴朝上。这里可能还看不出来,大家感受不到,我在下一个栗子,大家可能有所感受。

第二:X轴“垂直”且“相交”于  “上一个Link”的  旋转轴,这话是不是很绕?不要紧。这里也看不出来,因为Base_link是固定的,自己自己没有旋转轴,所以让X轴朝前,我们看下个例子。


小提示:注意,axis1是Link1的旋转轴,不是Base_link的,所以上图坐标系cordinate0和原点坐标系相同。

这样,两个轴被规定了方向,那么第三根轴Y轴就会自己确定。第三根轴是怎么确定的呢?,根据右手坐标系,看下图:

伸出右手,那么x轴就是四根手指的指向,z轴就是大拇指的指向,然后四指稍微弯一个九十度就是y轴的指向了,是不是超级好理解?这时要候抬杠的可能问了,四指往外翻呢?如果你能弯成90度,那我就承认我错了。


我们举第二个栗子,因为Base_link这个栗子大家可能觉得,不就是这样吗?这么多废话。我废话的原因是想让大家建立这么个概念。

我们快速跳过Link1的坐标系和旋转轴:如下

Link1的坐标系和Base_link的坐标系类似 ,注意这个Z轴和axis1是重合的,同时上图cordinate1的X轴是垂直且相交于base_link自己的旋转轴,但是base_link又没有自己的旋转轴啊!所以我们又让x轴朝前。-----------这个cordinate1的x轴本来要“垂直且相交”与上一个Link,也就是base_link的旋转轴,但是base_link自己没有旋转轴,所以就让x轴统一朝向前方了

 注意Link1确定的旋转轴axis2是给Link2准备的旋转轴

分割线---------------------------------------------------------

栗子:Link2坐标系栗子,注意是Link2,不是Link1,Link1坐标系和Base_Link一样,如分割线以上所述。

第一步:点在哪里?如下图

估计讲到这里大家就蒙圈了,这个点为什么在这里?你这样想----后面我们要在这个点上建立坐标系,同时满足Z轴重合与旋转轴axis2,同时X轴垂直且相交与axis1轴,你没看错,X轴垂直相交于上一个Link也就是Link1的旋转轴axis1,那这个点是不是应该在这里?--------有简洁方法确定这个点吗?有嘞!首先像上图左边红线一样建立一个基准面把机械臂分成两半,那么点link2_point就是axis2和红线基准面的交点。

不知道点在哪里是吗?那先想在这个点上建立坐标系的Z轴是不是必须和旋转轴线重合?那这个点就必须在这个  “旋转轴”  线上是不是?link2_point在axis2上,具体在旋转轴线上哪里呢?那我问你在哪里才能让X轴垂直且相交于上一个旋转轴呢?

我知道讲到这里你看不懂是吧?我也不想的,要不坚持一下再往后看看,我尽量讲清楚一点哈!再往下看看你绝对能懂!

第二步,线在哪里?

注意这里的线是为了给下一个关节建立的,和本关节没太大关系,如下图:

看到了吧?就这个很小的圆柱的轴线,我给他取名叫做axis3,大家估计傻了,这个关节叫做Link2,你给这个旋转轴叫做axis3?没错,我说了,这是给下一个关节Link3准备的

第三步:坐标系在哪里?

选中Link2_point,然后点击顶部的插入--参考几何体--坐标系,建立坐标系。这个时候,坐标系的方向就有说法了,如下图:

我说了,坐标系有两点要注意:

第一,Z轴要和旋转轴重合,可以看到这个cordinate2的Z轴和axis2是不是重合了?不清楚axis2往前翻。这是Link1为Link2准备的axis2.---Z轴要和旋转轴重合,我们再统一让它朝向右边

第二:X轴“垂直”且“相交”于  “上一个Link”的  旋转轴,也就是X轴垂直且相交与axis1,看上图,你是不是突然就“提壶灌顶”了?终于明白为什么要建一个红色基准面再来确定link2_point这个点了吧?注意X轴不仅要垂直,还要延长线相交于上一个旋转轴


举例到这里了,大家应该非常清楚坐标系的建立规则了吧?一定要记住这三步走战略,先点,后线最后坐标,以及我说的两点方向注意。

其他关节的坐标系我也贴出来给大家看吧!怕你们不清楚:

Link3的坐标系:

蓝色这个部分就是Link3,它的坐标系就是cordinate3,看到Z轴了吧?和它的旋转轴axis3是重合的,X轴则垂直相交于上一个旋转轴axis2----延长线垂直相交

讲到这里你应该都懂了吧?----坐标系cordinate3的坐标点Link3_point就是axis3和红色基准面的交点,-----建立到最后你会发现,所有坐标系都在红色基准面上

Link4坐标系:

这个Link4的Z轴大家肯定没异议了吧?这个X轴垂直且相交于axis3

到这里,建立坐标系的规则全部给大家讲解完毕了,如果有问题,可以在下面问,或者我建立的有问题,欢迎大家指出。

给出DH参数表如下:


导出URDF模型

上半部分完成了坐标系的建立,后面就可以导出URDF模型了,大家一定要像我这样建立坐标系,然后给每一个坐标系取容易分辨的名字,否则,自己就晕死了,比如:

Base_link,Link+123456,cordinate+0123456,axis+123456这样,为了方便后面不出错。

给大家看我自己的:

然后点击Export as URDF如下:

大家可能发现自己没有这个,别急,因为你没安装这个插件,你可以自己搜索这个插件的安装文章,很多的!我这里就不举例了。

初步给大家看我的,这是我建立好的,大家的肯定啥都没有,别急,看后面

首先在Link Name这里给第一个Link取名字,第一个肯定叫做base_link

然后Global Origin Cordinate System就是你为每一个关节Link建立的坐标系,第一个我建立的是Cordinate0

然后Link Components就是说哪一个部分是base_link,你在右边模型中点击底座,将它加进去。

Number of child links就是和base_link连接的关节有几个,肯定只有一个啦!你点一下框里的上升三角形加1,那么最下面加粗的base_link后面就会多出一行。


然后点击左下角base_link衍生出来的哪一行,出现类似的页面

和上一个页面不同的是,它多了joint Name,Reference Axis和joint Type这三个。

首先Link Name肯定写link1了,是输入,不是选,规范一点。

然后Joint Name 肯定就输入joint1了

Reference Cordinate System肯定就是cordinate1,你自己建立的Link1的坐标系

Reference Axis就是这个关节绕哪根轴旋转,选择我们建立好的axis1

joint Type有好几种,这个revolute就是有限制的圆周运动

然后Link Components就在右边模型中直接选择Link1,可以点击右边的模型树,或者直接在模型中选择。

Number of child links框的上三角形点一下就又可以继续添加下一个关节了。

后面每一个关节的选择我想大家应该就清楚了,这个Joint Type是每一个关节的类型,因为都是绕轴的旋转,可以都选择revolute,这是有限制旋转角度的,后面可以调节。其他类型大家可以搜索一下它的意思,有无限制角度的旋转,平移,一个平面上的旋转平移等类型,但机械臂主要是revolute类型的。


设置完成之后,点击Preview and Export

会出现这个界面

可以点击每一个joint查看一下是否设置正确

注意:

大家看到我Limit这里是设置了参数的,因为我们选择的joint Type类型是revolute,所以这个lower是旋转角度的下限,upper是旋转角度的上限,effort是扭矩的大小,velocity是转动速度。

注意点:

第一:lower或者upper是弧度制,大家一开始不知道自己机械臂每一个关节旋转多少角度,所以lower可以填写-3.14,然后upper可以填写3.14意思是360度全方位旋转,无限制,具体多少需要借助RViz里面的可视化工具粗略查看,我这里是查看后设置的。

第二:这个effort一定要填写数值,一定,一定。如果你写0,那么意味着机械臂各个转矩没有限制力的大小,那么无限大,这会在后面的仿真过程中造成抖动,剧烈抖动。当然,这是问题的其中之一,还有其他原因。

第三:velocity也要填写数字,它缺少了会造成什么影响,我现在还没发现。可以填写1

以上三点千万小心,尤其是effort。泪啊!


然后点击Next,会出现如下界面,这里面有两个造成机械臂在仿真中发生剧烈抖动,以及瘫倒在地上的原因,由于篇幅原因,方法我就不细说了。后面也可以修改的

点击:Export URDF and Meshs,保存起来就行了,别点错了。

对了,名字千万不要取中文,因为在Ubuntu虚拟机+ROS仿真的时候不能有中文,会报警告的,不符合命名规范。你保存成什么名字,那这个机器人就是什么名字,修改起来很烦

保存的文件如下:


好了,从设置坐标系到导出URDF的过程以及相应需要注意什么已经讲解完毕了,非常匠心了。

SolidWorks导出机械臂的URDF模型各个关节坐标系设置相关推荐

  1. ros melodic控制真实机械臂之urdf模型生成

    目录 一.solidworks及sw_urdf_repoter插件安装 二.在solidworks中为机械臂模型加入坐标系 三.用插件导出urdf模型 四.在ros中验证导出的模型是否成功 如果需要控 ...

  2. ROS下dobot(magician)机械臂的URDF模型 有兴趣的可以下载来玩

    大家好,看到很多人想玩ROS来控制Dobot,我这里有一个URDF模型分享给大家.下载链接https://download.csdn.net/download/qq_42145185/10818360 ...

  3. Threejs实现机械臂运动,机械臂dae格式模型,模型下载

    1,介绍 该示例使用的是 r95版本Three.js库. 主要实现功能:引入机械臂dae格式模型,模拟机械臂运动.效果图如下: 2,动画主要说明 1,引入机械臂模型,附模型下载地址如下 2,使用Twe ...

  4. “winform+opengl+freeglut“实现导入两关节机械臂的obj模型,并进行旋转、平移等操作

    开发环境:vs2019 开发工具:C++.OpenGL 工具库:freeglut 窗口:winform 主要实现:将OpenGL绘图窗口嵌入Winform窗口,在OpenGL窗口中导入事先准备好的ob ...

  5. 对于STM32F103三轴机械臂控制器进行基本功能测试-关节角度读取

    ➤01 机械臂调试 1.简介 对 基于STM32对于三轴机械臂控制器设计 中对应的控制电路读取肩部和肘部两个 角度编码器 ST-3806-15-RS 数据进行调试. 2.接口电路1 ▲ 角度读取的相关 ...

  6. 做机械臂导航遇到的问题1:solidworks在生成urdf文件时崩溃的一种解决方法

    笔者机械专业出身,刚刚接触ROS的机械臂导航,面临的第一个问题就是生成机械臂的urdf文件,当然方法很多,可以自己用代码来生成,这对于非计算机专业的我来说挑战很大,我更倾向于用solidworks借助 ...

  7. 机械臂urdf模型修改及功能包配置

    目录 一.前清提要 二.操作过程 1.转夹爪stl为urdf模型,得到夹爪包命名为GripperURDF 2.将夹爪包移到工作空间下,查看其是否完整,符合要求 3.将夹爪urdf包和机械臂urdf包合 ...

  8. Dofbot机械臂从零部署笔记(1)——ROS之创建URDF模型、配置Moveit和MotionPlanning

    文章目录 从零部署之创建URDF模型 0 创建新工作空间 1 创建URDF模型测试功能包 2 dofbot机械臂的urdf模型 3 meshes 4 launch文件 5 编译并运行 6 运行效果 7 ...

  9. ROS笔记(27) 机械臂的组装

    ROS笔记(27) 机械臂的组装 1. 机械臂模型 2. 声明模型的宏 3. 创建机械臂模型 4. 加入Gazebo属性 5. 显示机械臂模型 1. 机械臂模型 这里就是用模拟的一个六轴机械臂--HH ...

最新文章

  1. jquery mobie导致超链接不可用
  2. k8s-harbor安装
  3. 冲刺One之站立会议8 /2015-5-21
  4. 查看mysql数据库的主机_MySQL查看或显示数据库(SHOW DATABASES语句)
  5. EChart.js 简单入门
  6. VS IISExpress REST DELETE 405 Method Not Allowed
  7. 【Linux】一步一步学Linux——tput命令(232)
  8. AttributeError: ‘str‘ object has no attribute ‘copy
  9. 什么是spooling技术 他有哪几部分组成_气调保鲜冷库有哪几部分组成?
  10. zz 传苹果平板电脑的UI界面将具备“快速学习”功能
  11. PHP 结构控制 if else / switch / while / do while
  12. 谈谈 Delphi 的类型与指针[2]
  13. Java实现杨辉三角形
  14. redis---sds(简单动态字符串)详解
  15. Elasticsearch-Kibana 8.3.2 集群安装搭建-Linux
  16. opencv学习日记——娜扎小姐姐与猫咪的图像融合,超美哈哈哈
  17. AI 大数据在数据隐私保护下如何普惠共享?CCF TF「联邦学习」研讨会给出了答案
  18. JQuery实现简易音乐播放器
  19. 微信营销和微博营销有什么不同
  20. Android给图像添加相框、圆形圆角显示图片、图像合成知识

热门文章

  1. 解决ios的https双向认证不能抓包问题
  2. pureftpd mysql 失败_PureFtpd 连接数据库错误
  3. 有库存数量报警和提示功能的进销存软件是怎样的
  4. 测试%x %X %#x %#X的用法
  5. 解释型语言与编译型语言的异同
  6. 解决CentOS无法识别网卡问题
  7. matlab randperm函数
  8. 解决win10机械硬盘占用100%的方法(个人亲测有效)
  9. dijikstra(先预处理)+dfs,relocation truncated to fit
  10. nuwa android,Nuwa软件-Nuwa(女娲)安卓版下载v1.0.5