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
有关更多信息,请参阅插件概述页面。
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号