Skip to content

使用 ROS 2 生成模型

Gazebo 会在启动时加载所提供的 world 文件中包含的所有模型。此外,还可以随时生成新模型。为此,提供了以下基于 ROS 的机制:

使用 ros_gz_sim 包自带的 launch 文件生成模型

Section titled “使用 ros_gz_sim 包自带的 launch 文件生成模型”

ros_gz_sim 包提供了一个名为 gz_spawn_model.launch.py 的 launch 文件,用于向正在运行的仿真中生成新模型。示例:

Terminal window
ros2 launch ros_gz_sim gz_spawn_model.launch.py world:=empty file:=$(ros2 pkg prefix --share ros_gz_sim_demos)/models/vehicle/model.sdf entity_name:=my_vehicle x:=5.0 y:=5.0 z:=0.5

查看 源代码中的这一段,了解该 launch 文件接受的所有参数。

也可以从自定义 launch 文件中生成模型。为此提供了 <gz_spawn_model/> 标签,可在 XML 或 YAML launch 文件中使用。此时,参数通过标签内的属性传入。示例:

<launch>
<arg name="world" default="" />
<arg name="file" default="" />
<arg name="model_string" default="" />
<arg name="topic" default="" />
<arg name="entity_name" default="" />
<arg name="allow_renaming" default="False" />
<arg name="x" default="" />
<arg name="y" default="" />
<arg name="z" default="" />
<arg name="roll" default="" />
<arg name="pitch" default="" />
<arg name="yaw" default="" />
<gz_spawn_model
world="$(var world)"
file="$(var file)"
model_string="$(var model_string)"
topic="$(var topic)"
entity_name="$(var entity_name)"
allow_renaming="$(var allow_renaming)"
x="$(var x)"
y="$(var y)"
z="$(var z)"
roll="$(var roll)"
pitch="$(var pitch)"
yaw="$(var yaw)">
</gz_spawn_model>
</launch>

此时,<gz_spawn_model> 的参数从命令行读取。这只是其中一种方式——也可以硬编码部分值,或者根本不使用全部参数。

在启动 ros_gz_bridge 的同时生成模型

Section titled “在启动 ros_gz_bridge 的同时生成模型”

XML 示例 launch 文件可在 此处 查看。 Python 示例 launch 文件可在 此处 查看。

直接从终端使用这些 launch 文件的示例命令:

Terminal window
ros2 launch ros_gz_sim ros_gz_spawn_model.launch.py world:=empty file:=$(ros2 pkg prefix --share ros_gz_sim_demos)/models/vehicle/model.sdf entity_name:=my_vehicle x:=5.0 y:=5.0 z:=0.5 bridge_name:=ros_gz_bridge config_file:=<path_to_your_YAML_file>

关于 ros_gz_bridge 的更多信息,请参阅 ROS 2 集成。