ROS机器人项目开发11例(原书第2版)
上QQ阅读APP看书,第一时间看更新

3.5.3 机器人底座建模

至此我们已经具备了构建机器人底座所需的所有信息,下面我们开始进行机器人建模。我们构建的机器人模型如图3.4所示。

图3.4 我们的移动机械臂模型

在开始使用URDF为机器人建模之前,需要先了解一些基础知识。可以使用几何标记来定义标准形状(如圆柱体、球体和长方体),但不能使用几何标签来对复杂的几何体建模或设置其样式。这些工作可以使用第三方软件来完成,例如:复杂的计算机辅助设计(Computer Aided Design,CAD)软件,如Creo或Solidworks;开源建模工具,如Blender、FreeCAD和Meshlab。完成建模后,可以将其作为网格元素导入。本书中的模型是由这样的开源建模工具完成建模的,并作为网格元素导入到了URDF中。此外,有时如果在建模时编写了过多的XML标记,则会给我们带来麻烦,使得在构建复杂的机器人时迷失方向。因此,我们将使用宏定义的方式进行建模,宏在URDF中被称为xacro(http://wiki.ros.org/xacro),这将有助于简化代码并避免标记重复。

我们的机器人底座模型主要使用以下标记:

·<xacro>:帮助定义宏以供重用。

·<link>:包含机器人的几何表示和可视化信息。

·<inertial>:包含连杆的质量和惯性矩。

·<joint>:包含具有约束定义的连杆之间的连接。

·<Gazebo>:包含在Gazebo和ROS之间建立连接的插件以及模拟属性。

我们的机器人底座模型包含一个底盘和四个轮子,如图3.5所示,读者可以查看相应的连杆元素的信息。

图3.5 机器人底座模型的连杆与坐标信息

底盘名为base_link,可以在其中心看到坐标系。轮子(或wheel_frames)相对于底座连杆base_link框架放置。如图3.5所示,模型遵循右手坐标系。现在,可以确定机器人的前进方向将始终朝向x轴,旋转方向围绕z轴。另外,请注意,轮子相对于其参考系绕y轴旋转(将在后面的代码中看到此参考系)。

1.初始化工作空间

我们需要做的就是为机器人模型定义类似<link>和<joint>网格的标记。网格文件可以从https://github.com/PacktPublishing/ROS-Robotics-Projects-SecondEdition/tree/master/chapter_3_ws/src/robot_description/meshes获取。

按照以下步骤初始化工作空间:

1)创建ROS工作空间,添加我们的文件。在新建的终端窗口中使用以下命令生成功能包:

2)使用以下命令创建文件夹:

3)复制从前述网址下载的网格文件,并粘贴到网格文件夹中。然后,使用以下命令进入urdf文件夹,并创建名为robot_base.urdf.xacro的文件:

4)初始化XML版本标记以及<robot>标记,稍后将按照后面的内容一步步地将下载得到的源码复制进来:

至此,我们完成了工作空间的初始化,下面定义连杆组件。

2.定义连杆组件

目前我们已经完成了机器人模型的部分构建,接下来将定义底盘连杆的代码复制到<robot>标记下(即两个<robot>标记之间):

连杆元素定义代码定义了机器人的几何特征以及可视化信息,上述代码定义的是机器人底盘,我们称之为base_link。

标签很简单。如果读者想要深入学习相关内容,可以访问http://wiki.ros.org/urdf/XML/link

我们需要将四个轮子连接到base_link。为了便于定义,我们将通过xacro来实现同一段轮子模型代码的复用,复用时将对其进行重命名,以实现对四个轮子的区分。首先创建一个名为robot_essentials.xacro的文件,然后定义标准的宏,以便对轮子模型进行复用:

至此,我们在上述文件中创建了一个轮子的通用宏。现在需要做的是在自己的机器人模型文件robot_base.urdf.xacro中调用该宏文件,具体如下所示:

通过上述操作,读者能够用很少的代码通过宏的形式实现对相同连杆元素模型代码的复用。下面将定义关节组件。

如果读者想要深入学习xacro的相关内容,可以访问http://wiki.ros.org/xacro

3.定义关节组件

如图3.5所示,作为关节组件的轮子仅与机器人底盘相连接,因此轮子连接至base_link,并且绕各自坐标系中的y轴旋转。鉴于此,我们可以使用连续型的关节组件。同时,由于四个轮子是相同的,因此我们将作为轮子的关节组件以xacro的形式定义在robot_essentials.xacro文件中:

可以看到,在原来的代码块中,只有很少的原始代码以及名称需要进行修改。由此,在robot_base.urdf.xacro文件中,我们可以对轮子关节组件进行如下定义:

至此,我们已经完成了机器人底座的模型构建,下面我们通过可视化工具rviz来看一下构建的模型是否和预期一致。具体操作为在新建的终端窗口中执行以下命令:

添加机器人模型,并在“Global”选项中将“Fixed Frame”设置为base_link。如果一切顺利的话,读者将能够在可视化界面中看到我们构建的机器人底座模型。可以通过将gui参数设置为true来启动滑块控制器,进而通过拖动滑块来移动底座上的轮子。

下面我们介绍如何进行机器人底座模拟。