URDF物理参数解释及生成

3381
10
2020年2月22日 19时55分

在学习了古月学院中的《如何从Solidworks导出URDF模型》课程后,对从Solidworks导出URDF模型有了一定的了解。但是对URDF文件中的参数还不甚了解,尤其是物理属性相关的参数,于是自己去网上搜集了一些资料,得到一些结论,现在和大家分享一下。

小车介绍

首先给大家展示下我画的一个简易小车的模型,如下图。简易小车由一个底盘和四个轮子组成,底盘通过四个车轴与四个轮子连接在一起。其中底盘和车轮均为对称设计,保证了重心均在几何中心处,以方便展示。使用的软件为Solidworks2018版及sw_urdf_exporter插件。

 

URDF物理参数解释及生成插图

 

其中,定义底盘底面为base_link坐标系的xoy平面,底面中点为坐标原点,小车正方向为x轴正方向建立右手系;各个车轮坐标系原点为各个车轮内侧平面圆心,x轴与base_link坐标系x轴对齐,y轴与车轴平齐(与base_link坐标系y轴对齐或相向)建立右手系;车轮的旋转轴分别为对应的转轴轴线。示意图如下:

 

URDF物理参数解释及生成插图(1)

URDF物理参数解释

首先,我们通过《如何从Solidworks导出URDF模型》课程学习了如何导出URDF文件。导出后我们便得到了一个完整的工程文件夹,在urdf子文件夹中便可以找的我们的URDF文件。

 

 

打开URDF文件,我们可以看到其大致结构为:base_link → wheel_lf_link → wheel_lf_joint → wheel_lb_link → wheel_lb_joint → …可见除base_link外,其余link皆为link和joint配置文件组成。而base_link也与其他部分link部分配置文件相同,只因为他是最基本的部分,所以只有向他连接的link,故没有joint。因此我便以左前轮(wheel_lf_link)为例子来做相关说明。截取wheel_lf_link及wheel_lf_joint如下:

 

URDF物理参数解释及生成插图(3)
(注:图中注释为非标准注释,仅仅为解释对应含义,请勿在URDF文件中添加类似注释。)

 

我们重点关注link中的物理参数部分(inertial标签下内容)及joint部分。

 

inertial标签下为惯性相关参数,其下包括origin、mass、inertia三部分。其中origin部分为惯性参考系相对于本坐标系(wheel_lf_link坐标系)的姿态,惯性参考系的原点即为重心,坐标轴一般默认与本坐标系对齐(rpy参数均为0):

<origin
  xyz="0 0.0125 0"
  rpy="0 0 0" />

mass标签下为质量参数,即本link下全部零件(左前轮)的总质量,单位为千克:

<mass
  value="0.09763481" />

inertia标签下为本link下零件在本坐标系下的惯性张量,单位为千克*平方米:

<inertia
  ixx="3.51383610148207E-05"
  ixy="0"
  ixz="0"
  iyy="6.01064294059595E-05"
  iyz="0"
  izz="3.51383610148207E-05" />

joint标签下为关节相关参数,其下包括name、type、origin、parent、child、axis六部分。其中name为关节名称,type为关节类型:

<joint
  name="wheel_lf_joint"
  type="continuous">

origin为子link坐标系相对于父link坐标系的坐标变换,包括xyz和rpy六个数据:

<origin
  xyz="0.0625 0.05 0.014"
  rpy="0 0 0" />

parent为父link名称,child为子link名称;

<parent
  link="base_link" />
<child
  link="wheel_lf_link" />

axis为基准轴在本坐标系中的姿态:

<axis
  xyz="0 1 0" />

URDF参数生成

通过几次实验发现,直接使用插件生成的URDF中的参数有时是错误的,就需要我们自己进行调整,那么正确的参数要怎么生成呢?其实这些参数就是Solidworks自己计算得到的,可以直接在软件中看到。

 

inertial标签相关参数

首先,在Solidworks左上角的工具栏中选择“评估”→“质量属性”,即可打开“质量属性”属性框。

 

URDF物理参数解释及生成插图(4)

 

打开“质量属性”属性框后,将①选项框中的零件改为本link下零件(右键可删除多余零件,在模型中点击对应零件可添加),再将②选项框切换为对应坐标系。同时需要点击③“选项”打开“质量/剖面属性选项”,修改单位设置为“使用自定义设定”并将单位均改为标准单位,分别为:米、千克、米^3。“小数位数”改为8 位(最高8位)。点击确定后即可在“质量属性”属性框中看到相关参数。其中,参数④即为mass对应数值,参数⑤即为origin对应数值,参数⑥即为inertia对应数值

 

URDF物理参数解释及生成插图(5)

 

joint标签相关参数

同样的,在Solidworks左上角的工具栏中选择“评估”→“测量”,即可打开“测量”属性框。

 

URDF物理参数解释及生成插图(6)

 

打开“测量”属性框后,如上图标注,先点击“单位/精度”,和前文设置“质量/剖面属性选项”一样,将单位设置成“米”,小数点位数改为8位;再勾选上“显示XYZ测量”;后将 “XYZ相对于”修改为父link所在坐标系,即base_link坐标系。再先后点击左边文件树中的“base_link”坐标系和wheel_lf_link的坐标原点“2”,便会在图示中显示出图示信息。红绿蓝三色框分别对应XYZ坐标长度,参考坐标框为毫米下坐标,有正负号,综合二者便能得到子link坐标系原点相对于父link坐标系的坐标。

 

前文提到,在建立坐标系时就固定了各个坐标系之间的相对姿态,所以坐标变换中的角度信息皆可直接根据图示得到。全局X轴皆一致,角度变换就仅为绕X轴旋转,即只改变横滚角,r角度会变,py角度皆不会改变。
同时,按照前文建立坐标的方法,所有的转轴都与y轴重合,所以四个车轮的axis在对应坐标系的坐标轴上的分量均为0 1 0,简化了参数数据。

 

至此,我们便获得了一个轮子的全部物理相关参数,另外的轮子在参数上应该和第一个轮子保持对称。有时,导出的模型在gazebo中会晃动或者运动不正确,多半就是物理相关参数有误或者参数不对称的问题,此时你便可以直接手动修改URDF文件以优化gazebo模型了

 

第一次发文章分享,可能会有些错误或者用词不准确的地方,如有发现,请大家在评论区指出,一起学习进步,谢谢。

 

发表评论

后才能评论

评论列表(10条)

  • 年糕 2020年10月18日 下午9:32

    那你在ros导入小车之后,需要将fixed frame设置成base_link才能显示小车,但键盘控制小车得有odom坐标,那这个坐标该如何生成呢

  • 是吧哈哈哈 2020年8月28日 下午12:53

    您好,我想问一下base-link需要重新计算质量属性和测量属性吗?谢谢!

    • 是吧哈哈哈 回复 是吧哈哈哈 2020年8月28日 下午12:54

      我重新计算base-link之后在gazebo显示小车会出错

    • 谦墨 回复 是吧哈哈哈 2020年8月29日 上午9:21

      连接上有问题大概率是关节有问题,运动上有问题应该是物理参数的问题,你可以朝着大方向改下

    • 是吧哈哈哈 回复 谦墨 2020年9月10日 上午8:48

      好的,我每次改完之后我的轮子就会扩大一圈,底板变成弯的,不重新计算的话它就是好的,那我到底是重新计算还是不重新计算呢?

    • 谦墨 回复 是吧哈哈哈 2020年9月10日 上午10:04

      gazebo里的参数大致可以分为两部分,一部分是用来显示外形的,一部分是配置物理参数的,两者是互不影响的

    • 是吧哈哈哈 回复 谦墨 2020年9月13日 下午1:53

      好的,谢谢,可能是我的设计的问题吧

  • 安好 2020年5月6日 上午11:57

    你好 请问你这个小车是在solidworks中自己画的么 我现在研究的小车模型是stl文件格式 比较复杂 因为没有基础 自己画不了 把文件导入到solidworks中就成一块一块的了 不知道怎么像你这个一样选中整体 组装到一起 有什么方法解决么

    • 谦墨 回复 安好 2020年7月9日 下午4:25

      网上有些特征提取软件,可以将stl文件识别为可编辑的各个零件,然后再用solidworks进行装配就可以了(对不起刚看到评论

  • 古月 2020年2月23日 上午11:14

    很棒的解析,很多小伙伴不太清楚如何设置URDF的参数,可以参考这篇