上节我们知道,机器人仿真就是用软件来模拟硬件的特性,那么我们必须要告诉仿真平台机器人各个关节的物理属性,比如:
所以这节课小鱼就带你将物理信息写入到urdf中,让机器人在gazebo中显示出来。
一般来说有碰撞
和内参
两个就够了,但是因为小鱼之前的偷懒,还要加一个摩擦力配置。
碰撞描述是物体的用于碰撞检测的包围形状。内参用于描述物体的质量,惯性矩阵。link的摩擦力。
在机器人仿真中,我们要对物体之前是否接触,是否发生碰撞做检测,常用的检测方法比如包围盒,判断两个物体的包围盒是否相交来快速判断物体是否发生碰撞。
在URDF中,我们可以可以在link标签下添加collison子标签来对物体的形状进行描述。
collision可以包含的子标签如下:
material
,可选的,描述碰撞几何体的材料(这个设置可以在gazebo仿真时通过view选项看到碰撞包围体的形状)一个完整的collision标签实例如下:
<collision>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
<material name="blue">
<color rgba="0.1 0.1 1.0 0.5" />
</material>
</collision>
旋转惯量矩阵是用于描述物体的惯性的,在做动力学仿真的时候,这些参数尤为重要。
在URDF中我们可以通过在link下添加inertial子标签,为link添加惯性参数的描述。
intertial标签包含的子标签如下:
一个完整的inertial标签示例如下:
<inertial>
<mass value="0.2"/>
<inertia ixx="0.0122666" ixy="0" ixz="0" iyy="0.0122666" iyz="0" izz="0.02"/>
</inertial>
关于intertial的属性设置,不是随意设置的,常见的几何体我们可以通过公式进行计算。计算方法可以看小鱼的这篇文章-URDF仿真惯性参数不知道怎么配?快收藏,常见几何物体URDF分享。
比如我们上一章节的fishbot的轮子和车体,都是实心圆柱,可以采用下面的公式进行计算:
注意:这个矩阵是一个对称矩阵,所以只需要通过其上三角即可描述完整描述这个矩阵,所以在URDF中只需要填写六个数字即可。 实心圆柱体的惯性矩阵:半径为r,高度为h,质量为m 的实心圆柱体 形状:
矩阵:
在Fishbot的URDF中,前面的支撑轮主要起支撑作用,因为我们将其使用fixed标签固定到了base_link上,所以它无法转动。
哪该怎么办呢?小鱼教你一个取巧的办法,我们可以要把这个轮子的摩擦力设置为0,让它直接在地上滑动即可,
如何设置呢?6行代码放到URDF中:
<gazebo reference="caster_link">
<mu1 value="0.0"/>
<mu2 value="0.0"/>
<kp value="1000000.0" />
<kd value="10.0" />
</gazebo>
其中mu1,mu2代表摩擦力,kp,kd代表刚性系数。
利用上面的方法公式,为我们的fishbot哥哥link添加好物理属性,完成后的base_link如下:
<!-- base link -->
<link name="base_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
<material name="blue">
<color rgba="0.1 0.1 1.0 0.5" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
<material name="blue">
<color rgba="0.1 0.1 1.0 0.5" />
</material>
</collision>
<inertial>
<mass value="0.2"/>
<inertia ixx="0.0122666" ixy="0" ixz="0" iyy="0.0122666" iyz="0" izz="0.02"/>
</inertial>
</link>
完全添加好的机器人URDF模型小鱼已经放到了这里:fishbot_gazebo.urdf
可以将小鱼配置好的模型下载到src/c/urdf
文件夹下,等下我们要用gazebo将该模型显示出来。