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

3.4.2 Gazebo及ROS机器人模型格式设定

正如我们所知,Gazebo是一个支持ROS的物理模拟引擎,它也可以在没有ROS的情况下独立运行。在Gazebo中创建的大多数模型都符合一种称为模拟描述格式(Simulation Description Format,SDF)的XML格式。ROS则有不同的方法来表示机器人模型:以一种称为通用机器人描述格式(Universal Robotic Description Format,URDF)的XML格式定义。对用户而言,虽然Gazebo和ROS下的机器人模型格式不同,但无须过多担心,因为如果模型是用URDF创建的,则虽然文件中有一些额外的XML标记,但是Gazebo可以很容易地理解它们——URDF文件能够在Gazebo的保护下自动转换成SDF。但是如果模型是在SDF中定义的,则在引入某些基于ROS的特性时则可能会存在一些问题。

目前有多种基于SDF的插件能够在ROS下工作或者向ROS发送消息,但这些插件仅限于少数传感器和控制器。我们在安装ROS-1 Melodic Morenia的同时安装了Gazebo 9。尽管我们有最新版本的Gazebo和ROS(截至撰写本书时),但大多数ros_controllers仍然不支持SDF,需要我们创建自定义的控制器来与SDF一同工作。鉴于此,我们将以URDF格式创建机器人模型,并允许Gazebo的内置API(URDF2SDF:http://osrf-distributions.s3.amazonaws.com/sdformat/api/6.0.0/classsdf_1_1URDF2SDF.html)完成转换工作,生成Gazebo支持的格式。

为了实现ROS与Gazebo的集成,我们需要在两者之间建立一定的依赖关系,并将ROS消息转换为Gazebo可接受的信息。我们还需要一个框架实现准实时的机器人控制器,实现对机器人运动的控制。前者构成了gazebo_ros_pkgs包,它是一堆ROS包的封装,用于帮助Gazebo理解ROS消息和服务;后者构成了ros_control和ros_controller包,提供机器人关节和执行器空间转换处理以及基于现有控制器对位置、速度以及力的控制处理功能。读者可以通过以下命令安装上述所需的功能包:

由于已经定义了抽象层,因此我们将使用ros_control的hardware_interface::RobotHW类,此外我们将使用ros_controllers的joint_trajectory_controller和diff_drive_controller来分别实现对机械臂和机器人底座的控制。

读者可以从http://www.theoj.org/joss-papers/joss.00456/10.21105.joss.00456.pdf了解更多关于ros_control和ros_controllers的信息。

至此,读者已经了解了移动机械臂构建的基础内容,下面我们开始构建机器人底座。