Skip to content

生成 URDF 模型

本教程介绍如何在 Gazebo Sim 中生成 URDF 模型。 URDF 文件通常用于在 ROS 中表示机器人模型。 SDF 可以描述包含多个机器人模型的世界,而 URDF 只能描述单个机器人模型。 有关 URDF 的更多信息,请参阅 https://wiki.ros.org/urdf。

本教程假设你已经有一个想要加载到 Gazebo Sim 中的 URDF 文件。如果你正在寻找可用的 URDF 文件,可以使用预处理好的 rrbot.urdf。rrbot 机器人模型来自 gazebo_ros_demos 软件包。你也可以使用 https://wiki.ros.org/urdf/Examples 中列出的示例之一。

如果你有机器人模型的 xacro 表示,可以使用 xacro 软件包将 xacro 文件转换为 URDF 文件,详情请参阅 此教程。

要在 Gazebo Sim 中生成 URDF 模型,需要先启动一个世界,然后使用世界的 create 服务,该服务使用 EntityFactory 消息类型。

首先在 Gazebo Sim 中启动一个空世界:

Terminal window
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 世界中:

Terminal window
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 模型

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

URDF 机械臂下落