4.5 Gazebo仿真环境

仿真/模拟(Simulation)泛指基于实验或训练的目的,以及原本的系统、事务或流程,建立一个模型以表征其关键特性或者行为/功能,予以系统化与公式化,以便对关键特征进行模拟。当所研究的系统造价昂贵、实验的危险性大或需要很长时间才能了解系统参数变化所引起的后果时,仿真是一种特别有效的研究手段,目前已经广泛应用于电气、机械、化工、水力、热力、经济、生态、管理等领域。

Gazebo是一个功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的还有其具备开源免费的特性。虽然Gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境,以可视化的方式进行显示。

4.5.1 Gazebo的特点

Gazebo是一个优秀的开源物理仿真环境,它具备如下特点:

1)动力学仿真:支持多种高性能的物理引擎,如ODE、Bullet、SimBody、DART等。

2)三维可视化环境:支持显示逼真的三维环境,包括光线、纹理、影子。

3)传感器仿真:支持传感器数据的仿真,同时可以仿真传感器噪声。

4)可扩展插件:用户可以定制化开发插件以扩展Gazebo的功能,满足个性化的需求。

5)多种机器人模型:官方提供PR2、Pioneer2 DX、TurtleBot等机器人模型,当然也可以使用自己创建的机器人模型。

6)TCP/IP传输:Gazebo的后台仿真处理和前台图形显示可以通过网络通信实现远程仿真。

7)云仿真:Gazebo仿真可以在Amazon、Softlayer等云端运行,也可以在自己搭建的云服务器上运行。

8)终端工具:用户可以使用Gazebo提供的命令行工具在终端实现仿真控制。

Gazebo的社区维护非常积极,自2013年以来几乎每年都会有较大的版本变化。如图4-23所示,可以看到Gazebo的版本迭代,以及近几个ROS版本对应的Gazebo版本。

Gazebo的版本变化虽然较大,但是兼容性保持得比较好,Indigo中2.2版本的机器人仿真模型在Kinetic的7.0版本中运行依然不会有问题。

4.5.2 安装并运行Gazebo

与rviz一样,如果已经安装了桌面完整版的ROS,那么可以直接跳过这一步,否则,请使用以下命令进行安装:


$ sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control

安装完成后,在终端中使用如下命令启动ROS和Gazebo:


$ roscore
$ rosrun gazebo_ros gazebo

Gazebo启动成功后的界面如图4-24所示。

图4-23 Gazebo的版本迭代

图4-24 Gazebo启动成功后的主界面

主界面中主要包含以下几个部分。

·0:3D视图区。

·1:工具栏。

·2:模型列表。

·3:模型属性项。

·4:时间显示区。

验证Gazebo是否与ROS系统成功连接,可以查看ROS的话题列表:


$ rostopic list

如果连接成功,应该可以看到Gazebo发布/订阅的如下话题列表:


/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state

当然,还有Gazebo提供的服务列表:


$ rosservice list
/gazebo/apply_body_wrench
/gazebo/apply_joint_effort
/gazebo/clear_body_wrenches
/gazebo/clear_joint_forces
/gazebo/delete_model
/gazebo/get_joint_properties
/gazebo/get_link_properties
/gazebo/get_link_state
/gazebo/get_loggers
/gazebo/get_model_properties
/gazebo/get_model_state
/gazebo/get_physics_properties
/gazebo/get_world_properties
/gazebo/pause_physics
/gazebo/reset_simulation
/gazebo/reset_world
/gazebo/set_joint_properties
/gazebo/set_link_properties
/gazebo/set_link_state
/gazebo/set_logger_level
/gazebo/set_model_configuration
/gazebo/set_model_state
/gazebo/set_parameters
/gazebo/set_physics_properties
/gazebo/spawn_gazebo_model
/gazebo/spawn_sdf_model
/gazebo/spawn_urdf_model
/gazebo/unpause_physics
/rosout/get_loggers
/rosout/set_logger_level

4.5.3 构建仿真环境

在仿真之前需要构建一个仿真环境。Gazebo中有两种创建仿真环境的方法。

1.直接插入模型

在Gazebo左侧的模型列表中,有一个insert选项罗列了所有可使用的模型。选择需要使用的模型,放置在主显示区中(见图4-25),就可以在仿真环境中添加机器人和外部物体等仿真实例。

图4-25 在Gazebo中直接插入仿真模型

模型的加载需要连接国外网站,为了保证模型顺利加载,可以提前将模型文件下载并放置到本地路径~/.gazebo/models下,模型文件的下载地址:https://bitbucket.org/osrf/gazebo_models/downloads/

2.Building Editor

第二种方法是使用Gazebo提供的Building Editor工具手动绘制地图。在Gazebo菜单栏中选择Edit→Building Editor,可以打开如图4-26所示的Building Editor界面。选择左侧的绘制选项,然后在上侧窗口中使用鼠标绘制,下侧窗口中即可实时显示绘制的仿真环境。

模型创建完成后就可以加载机器人模型并进行仿真了,我们在后续的学习过程中会详细学习机器人仿真的过程,这里先对Gazebo有一个整体的认识即可。

图4-26 使用Building Editor工具创建仿真环境