生成 URDF 模型
本教程介绍如何在 Gazebo Sim 中生成 URDF 模型。 URDF 文件通常用于在 ROS 中表示机器人模型。 SDF 可以描述包含多个机器人模型的世界,而 URDF 只能描述单个机器人模型。 有关 URDF 的更多信息,请参阅 https://wiki.ros.org/urdf。
获取 URDF 文件
Section titled “获取 URDF 文件”本教程假设你已经有一个想要加载到 Gazebo Sim 中的 URDF 文件。如果你正在寻找可用的 URDF 文件,可以使用预处理好的 rrbot.urdf。rrbot 机器人模型来自 gazebo_ros_demos 软件包。你也可以使用 https://wiki.ros.org/urdf/Examples 中列出的示例之一。
如果你有机器人模型的 xacro 表示,可以使用 xacro 软件包将 xacro 文件转换为 URDF 文件,详情请参阅 此教程。
生成 URDF
Section titled “生成 URDF”要在 Gazebo Sim 中生成 URDF 模型,需要先启动一个世界,然后使用世界的 create 服务,该服务使用 EntityFactory 消息类型。
首先在 Gazebo Sim 中启动一个空世界:
gz sim empty.sdf你应该会看到如下窗口:

在另一个终端中,运行 gz service -l 获取可用服务列表。查找 create 服务。你应该在列表中看到此服务:
/world/empty/create可以通过运行 gz service -is /world/empty/create 来确认这是要使用的服务。该命令会显示服务的请求和响应消息类型:
gz.msgs.EntityFactory, gz.msgs.Boolean现在已找到请求类型为 EntityFactory 的服务,接下来调用此服务并将 URDF 文件传递给请求消息,即可将 URDF 文件所表示的机器人生成到 Gazebo Sim 世界中。具体做法是将 URDF 文件路径填入 EntityFactory 请求消息的 sdf_file_name 字段。然后,libsdformat 库会在内部将 URDF 文件转换为 SDF 表示,并加载到正在运行的世界中。
以下命令将 URDF 文件 model.urdf 作为名为 urdf_model 的模型生成到 Gazebo Sim 世界中:
gz service -s /world/empty/create --reqtype gz.msgs.EntityFactory --reptype gz.msgs.Boolean --timeout 1000 --req 'sdf_filename: "/path/to/model.urdf", name: "urdf_model"'如果 model.urdf 是 gazebo_ros_demos 软件包中 rrbot.urdf 的 URDF 表示,那么执行上述服务调用后,仿真器应该如下所示:

现在可以播放仿真,确认加载的 URDF 模型按预期运行:
