< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-Gazebo仿真的构成要素

ROS2与Gazebo11入门教程-Gazebo仿真的构成要素

说明:

  • 介绍运行的Gazebo仿真中的各个构成要素

世界文件

  • 仿真世界描述文件包含仿真中的所有元素,包括机器人、灯光、传感器和静态对象。世界文件使用SDF(仿真描述格式)进行格式化,并且通常具有.world扩展名。

  • Gazebo服务器(gzserver)会读取世界文件以生成并填充仿真世界。

  • 安装Gazebo时附带了许多示例仿真世界。这些世界文件安装在<install_path>/share/gazebo-/worlds中(例如,对于安装在Ubuntu系统上的Gazebo 11,其世界文件安装在/usr/share/gazebo-11/worlds目录中);您还可以在源代码中看到这些世界文件。

模型文件

  • 模型文件与世界文件使用相同的SDF格式,但应该只包含一个 ... </ model>标签。模型文件的目的在于方便模型重用和简化世界文件。一旦某个模型文件创建后,就可以使用以下SDF语法将其包含在某个世界文件中:
<include>

<uri>model://model_file_name</uri>

</include>
  • 在线模型数据库中提供了许多模型(在早期版本中,Gazebo会附带一些示例模型)。假设运行Gazebo时已连接Internet,则可以从数据库中插入任何模型,并且必要的内容将会在运行时下载。

环境变量

Gazebo使用许多环境变量来定位文件和建立服务器与客户端之间的通信。适用于大多数情况的默认值会被编译进Gazebo软件中。这意味着您无需设置任何环境变量。

Gazebo包括以下环境变量:

  • GAZEBO_MODEL_PATH:用冒号分隔的目录集合,Gazebo将会在这些目录中搜索模型;

  • GAZEBO_RESOURCE_PATH:用冒号分隔的目录集合,Gazebo将会在这些目录中搜索其他资源,例如世界文件和媒体文件;

  • GAZEBO_MASTER_URI:Gazebo主机的URI,该变量指定了Gazebo服务器启动的IP和端口,并告知客户端要连接到的地址;

  • GAZEBO_PLUGIN_PATH:用冒号分隔的目录集合,Gazebo在运行时将会在这些目录中搜索插件共享库;

  • GAZEBO_MODEL_DATABASE_URI:在线模型数据库的URI,Gazebo将会从该链接地址下载模型。

这些环境变量的默认值也会包含在shell脚本中:

source <install_path>/share/gazebo/setup.sh

如果要修改Gazebo的行为(例如,扩展其搜索模型的路径),则应该首先对上面列出的Shell脚本进行source,然后修改该脚本设置的环境变量。

Gazebo 8及更高版本的新环境变量

Gazebo的某些部分已过渡到使用Ignition Transport库进行进程间通信,而不是内置的Gazebo Transport库。诸如标记(markers)和绘图实用程序等某些功能正在使用Ignition Transport库,并且可能会受到以下环境变量的影响:

  • IGN_PARTITION:所有Ignition Transport节点的分区(partition)名称。

  • IGN_IP:与GAZEBO_MASTER_URI类似,但此变量用于Ignition Transport。

  • IGN_VERBOSE:显示来自Ignition Transport的调试信息。

Gazebo服务器

服务器是Gazebo的主力军和核心。服务器解析命令行上给出的世界描述文件,然后使用某个物理引擎和传感器引擎仿真该世界。

可以使用以下命令启动服务器。请注意,服务器不包含任何图形界面;这意味着服务器是无头运行的。

gzserver <world_filename>

上面命令中的<world_filename>可以是:

  • 当前目录下的某个世界文件名,
  • 某个绝对路径下的世界文件名,
  • GAZEBO_RESOURCE_PATH中某个路径下的世界文件名,
  • Gazebo世界文件安装默认目录中的某个世界文件名,即worlds/<world_name>,其中<world_name>是与Gazebo一起安装的某个世界文件名

例如,要使用与Gazebo一起安装的empty_sky.world,请使用以下命令:

gzserver worlds/empty_sky.world

Gazebo客户端

Gazebo图形客户端会连接到正在运行的gzserver并可视化各个仿真元素。图形客户端还是一个允许修改正在运行的仿真的工具。

使用以下命令来运行Gazebo图形客户端:

gzclient

服务器+图形客户端合一

命令gazebo会将Gazebo服务器和客户端合并到一个可执行文件中。可以不用先运行gzserver worlds/empty.world然后再运行gzclient,而是直接运行以下命令:

gazebo worlds/empty_sky.world

插件

插件提供了一种与Gazebo进行交互的简单便捷机制。插件可以在命令行中加载,或者在SDF文件中指定(请参见SDF格式)。

Gazebo会先加载命令行上指定的插件,然后再加载SDF文件中指定的插件。有些插件由服务器加载,例如影响物理属性的插件,而其他插件则由图形客户端加载以方便自定义GUI的生成。

通过命令行加载一个系统插件的示例如下:

gzserver -s <plugin_filename>

标志-s表示它是一个系统插件,而<plugin_filename>是在GAZEBO_PLUGIN_PATH中发现的某个共享库名称。例如,要加载Gazebo安装随带的RestWebPlugin,请运行以下命令:

gzserver --verbose -s libRestWebPlugin.so

Gazebo图形客户端使用相同的机制,支持的命令行标志包括:

  • Gazebo 7和更早版本:使用-g标志加载GUI插件

  • Gazebo 8和更高版本:使用--gui-client-plugin标志加载GUI插件

例如,要在Gazebo 11中加载TimerGUIPlugin,请运行以下命令:

gzclient --gui-client-plugin libTimerGUIPlugin.so

有关更多信息,请参阅插件概述页面。

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程