导入新资产#
NVIDIA Omniverse 依赖于通用场景描述(USD)文件格式来导入和导出资产。USD 是由皮克斯动画工作室开发的开源文件格式。这是一种针对大规模、复杂数据集进行优化的场景描述格式。虽然这种格式在电影和动画行业广泛使用,但在机器人社区中并不常见。
为此,NVIDIA 开发了各种导入器,允许您将其他文件格式的资产导入到 USD 中。这些导入器作为 Omniverse Kit 的扩展可用:
URDF 导入器 - 从 URDF 文件导入资产。
MJCF 导入器 - 从 MJCF 文件导入资产。
资产导入器 - 从各种文件格式(包括 OBJ、FBX、STL 和 glTF)导入资产。
NVIDIA 建议的工作流程是使用上述导入器将资产转换为其 USD 表示形式。一旦资产以 USD 格式存在,您可以使用 Omniverse Kit 对资产进行编辑,并将其导出到其他文件格式。
用于大规模仿真中使用资产的重要注意事项是确保它们是 实例化 格式。这允许资产有效地加载到内存中,并在场景中多次使用。否则,资产将多次加载到内存中,可能导致性能问题。有关实例化资产的更多详细信息,请查看 Isaac Sim 文档 。
使用 URDF 导入器#
Isaac Sim 默认包含 URDF 和 MJCF 导入器。这些导入器支持将资产导入为实例化资产的选项。通过选择此选项,导入器将创建两个 USD 文件:一个用于所有网格数据,一个用于所有非网格数据(例如关节、刚体等)。网格数据文件中的 prims 在非网格数据文件中被引用。这样,网格数据(通常很庞大)只需加载到内存中一次,并在场景中多次使用。
要从 GUI 使用这些导入器,请分别查看 MJCF 导入器 和 URDF 导入器 的文档。
要从 Python 脚本中使用 URDF 导入器,我们包含了一个名为 convert_urdf.py
的实用工具。在内部,此脚本创建了一个 UrdfConverterCfg
的实例,然后将其传递给 UrdfConverter
类。配置类指定了导入器的默认值。重要的设置包括 :
fix_base
- 是否修正机器人的基座。这取决于您是否拥有浮动基座还是固定基座的机器人。make_instanceable
- 是否创建实例化资产。通常情况下,应该将其设置为True
。merge_fixed_joints
- 是否合并固定关节。通常情况下,应将其设置为True
以减少资产复杂性。default_drive_type
- 关节的驱动类型。我们建议始终设置为"none"
。这允许使用执行器模型更改驱动配置。default_drive_stiffness
- 关节的驱动刚度。我们建议始终设置为0.0
。这允许使用执行器模型更改驱动配置。default_drive_damping
- 关节的驱动阻尼。类似于刚度,我们建议始终将其设置为0.0
。
示例用法#
在此示例中,我们使用了 ANYmal-D 机器人的经过处理的 URDF 文件。要检查经过处理的 URDF,请查看文件 anymal.urdf 。经过处理的 URDF 与原始 URDF 之间的主要区别在于:
我们从 URDF 中移除了
<gazebo>
标记。此标记不受 URDF 导入器支持。我们从 URDF 中移除了
<transmission>
标记。此标记不受 URDF 导入器支持。我们从 URDF 中移除了各种碰撞体,以减少资产的复杂性。
我们将所有关节的阻尼和摩擦参数改为
0.0
。这确保在没有 PhysX 添加额外阻尼的情况下,我们可以对关节进行努力控制。我们向固定关节添加了
<dont_collapse>
标记。这确保导入器不会合并这些固定关节。
以下显示了克隆存储库并运行转换器的步骤:
# create a directory to clone
mkdir ~/git && cd ~/git
# clone a repository with URDF files
git clone git@github.com:isaac-orbit/anymal_d_simple_description.git
# go to top of the repository
cd IsaacLab
# run the converter
./isaaclab.sh -p source/standalone/tools/convert_urdf.py \
~/git/anymal_d_simple_description/urdf/anymal.urdf \
source/extensions/omni.isaac.lab_assets/data/Robots/ANYbotics/anymal_d.usd \
--merge-joints \
--make-instanceable
执行上述脚本将在 source/extensions/omni.isaac.lab_assets/data/Robots/ANYbotics/
目录内创建两个 USD 文件:
anymal_d.usd
- 这是主资产文件。它包含所有非网格数据。Props/instanceable_assets.usd
- 这是网格数据文件。
备注
自 Isaac Sim 2023.1.1 起,URDF 导入器的行为已更改,它将网格数据存储在主资产文件中,即使设置了 --make-instanceable
标志。这意味着 Props/instanceable_assets.usd
文件已创建,但不再使用。
您可以在打开的窗口上按播放按钮来查看场景中的资产。如果一切正常,资产应该 “折叠” 。如果发生爆炸,那可能是由于 URDF 中存在自我碰撞。
要以无头模式运行脚本,可以添加 --headless
标志。这将不会打开 GUI,并在完成转换后退出脚本。
使用网格导入器#
Omniverse Kit 包括使用 ASSIMP 库导入各种网格格式的资产的网格转换器工具(例如 OBJ、FBX、STL、glTF 等)。资产转换器工具作为 Omniverse Kit 的扩展提供。请查看 资产转换器 文档了解更多详细信息。然而,与 Isaac Sim 的 URDF 和 MJCF 导入器不同,资产转换器工具不支持创建实例化资产。这意味着如果在场景中多次使用资产,则资产将多次加载到内存中。
因此,我们包含一个名为 convert_mesh.py
的实用工具,它使用资产转换器工具导入资产,然后将其转换为实例化资产。在内部,此脚本创建了一个 MeshConverterCfg
的实例,然后将其传递给 MeshConverter
类。由于网格文件不包含任何物理信息,配置类接受不同的物理属性(如质量、碰撞形状等)作为输入。请查看 MeshConverterCfg
的文档了解更多详细信息。
示例用法#
我们使用一个立方体的 OBJ 文件来演示网格转换器的用法。以下显示了克隆存储库并运行转换器的步骤:
# create a directory to clone
mkdir ~/git && cd ~/git
# clone a repository with URDF files
git clone git@github.com:NVIDIA-Omniverse/IsaacGymEnvs.git
# go to top of the repository
cd IsaacLab
# run the converter
./isaaclab.sh -p source/standalone/tools/convert_mesh.py \
~/git/IsaacGymEnvs/assets/trifinger/objects/meshes/cube_multicolor.obj \
source/extensions/omni.isaac.lab_assets/data/Props/CubeMultiColor/cube_multicolor.usd \
--make-instanceable \
--collision-approximation convexDecomposition \
--mass 1.0
与 URDF 转换器类似,执行上述脚本将在 source/extensions/omni.isaac.lab_assets/data/Props/CubeMultiColor/
目录内创建两个 USD 文件。此外,如果您在打开的窗口上按播放按钮,您应该能看到资产在重力的影响下落下。
如果您不设置
--mass
标志,则不会向资产添加刚体属性。它将作为静态资产导入。如果您还未设置
--collision-approximation
标志,则资产也不会有任何碰撞器属性,并且将作为视觉资产导入。