在学习了古月学院中的《如何从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如下:
<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模型了。 第一次发文章分享,可能会有些错误或者用词不准确的地方,如有发现,请大家在评论区指出,一起学习进步,谢谢。