郑重提示:为了记录自己在学习过程中遇到的问题,所以记录了这篇博客。。在后面学习的过程中发现之前这篇博客记录的导出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仿真的时候不能有中文,会报警告的,不符合命名规范。你保存成什么名字,那这个机器人就是什么名字,修改起来很烦。
保存的文件如下:
文章来源:https://www.toymoban.com/news/detail-451426.html
好了,从设置坐标系到导出URDF的过程以及相应需要注意什么已经讲解完毕了,非常匠心了。文章来源地址https://www.toymoban.com/news/detail-451426.html
到了这里,关于SolidWorks导出机械臂的URDF模型各个关节坐标系设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!