使用 ROS 2 生成模型
Gazebo 会在启动时加载所提供的 world 文件中包含的所有模型。此外,还可以随时生成新模型。为此,提供了以下基于 ROS 的机制:
使用 ros_gz_sim 包自带的 launch 文件生成模型
Section titled “使用 ros_gz_sim 包自带的 launch 文件生成模型”ros_gz_sim 包提供了一个名为 gz_spawn_model.launch.py 的 launch 文件,用于向正在运行的仿真中生成新模型。示例:
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 文件生成模型
Section titled “从自定义 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 文件的示例命令:
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 集成。