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

小车介绍

首先给大家展示下我画的一个简易小车的模型,如下图。简易小车由一个底盘和四个轮子组成,底盘通过四个车轴与四个轮子连接在一起。其中底盘和车轮均为对称设计,保证了重心均在几何中心处,以方便展示。使用的软件为Solidworks2018版及sw_urdf_exporter插件。     其中,定义底盘底面为base_link坐标系的xoy平面,底面中点为坐标原点,小车正方向为x轴正方向建立右手系;各个车轮坐标系原点为各个车轮内侧平面圆心,x轴与base_link坐标系x轴对齐,y轴与车轴平齐(与base_link坐标系y轴对齐或相向)建立右手系;车轮的旋转轴分别为对应的转轴轴线。示意图如下:  

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如下:   [caption id="" align="aligncenter" width="700"] (注:图中注释为非标准注释,仅仅为解释对应含义,请勿在URDF文件中添加类似注释。)[/caption]   我们重点关注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左上角的工具栏中选择“评估”→“质量属性”,即可打开“质量属性”属性框。     打开“质量属性”属性框后,将①选项框中的零件改为本link下零件(右键可删除多余零件,在模型中点击对应零件可添加),再将②选项框切换为对应坐标系。同时需要点击③“选项”打开“质量/剖面属性选项”,修改单位设置为“使用自定义设定”并将单位均改为标准单位,分别为:米、千克、米^3。“小数位数”改为8 位(最高8位)。点击确定后即可在“质量属性”属性框中看到相关参数。其中,参数④即为mass对应数值,参数⑤即为origin对应数值,参数⑥即为inertia对应数值。    

joint标签相关参数

同样的,在Solidworks左上角的工具栏中选择“评估”→“测量”,即可打开“测量”属性框。     打开“测量”属性框后,如上图标注,先点击“单位/精度”,和前文设置“质量/剖面属性选项”一样,将单位设置成“米”,小数点位数改为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模型了。   第一次发文章分享,可能会有些错误或者用词不准确的地方,如有发现,请大家在评论区指出,一起学习进步,谢谢。