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

郑重提示:为了记录自己在学习过程中遇到的问题,所以记录了这篇博客。。在后面学习的过程中发现之前这篇博客记录的导出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的过程以及相应需要注意什么已经讲解完毕了,非常匠心了。

猜你喜欢

转载自blog.csdn.net/shdhckcjc/article/details/129331111