加载资产#

机器人、刚体物体、静态网格:你放进场景里的几乎所有东西,都来自通过 morph 加载的资产文件。morph 把实体的几何形状与它的初始位姿组合在一起,你把它作为第一个参数传给 scene.add_entity(...)。本页介绍支持的格式、所有格式通用的位姿与缩放选项,以及 Genesis World 如何查找资产文件。

支持的格式#

Morph

格式

用途

gs.morphs.MJCF

.xml

MuJoCo 机器人与场景模型

gs.morphs.URDF

.urdf、.xacro

机器人描述文件(.xacro 会自动预处理)

gs.morphs.Mesh

.obj、.stl、.dae、.glb、.gltf

非关节网格

gs.morphs.USD

.usd、.usda、.usdc、.usdz

Universal Scene Description stage

形状基元,包括 gs.morphs.Plane、Box、Cylinder、Sphere、Terrain 和 Drone,都不需要文件。第一次加载可参考 Hello, Genesis World 教程,USD stage 见 USD 导入,网格预处理见 网格处理。

franka = scene.add_entity(
    gs.morphs.MJCF(file="xml/franka_emika_panda/panda.xml"),
)
mug = scene.add_entity(
    gs.morphs.Mesh(file="meshes/mug.obj", scale=0.1),
)

位姿与缩放#

每个 morph 都接受初始位姿和缩放,因此添加实体之后你很少还需要再移动它:

scene.add_entity(
    gs.morphs.URDF(
        file="urdf/go2/urdf/go2.urdf",
        pos=(0, 0, 0.4),        # meters, world frame
        euler=(0, 0, 90),       # extrinsic x-y-z, degrees (SciPy convention)
        scale=1.0,
    ),
)
  • pos 是位置,单位为米,位于右手系、Z 轴朝上的世界坐标系中。

  • euler 用外旋 x-y-z 角度设置朝向,单位为度;quat 则改用 (w, x, y, z) 的标量在前的四元数来设置。两者只能设其一,不要同时设置。

  • scale 是统一缩放因子。gs.morphs.Mesh 还接受按轴分别指定的 (sx, sy, sz) 元组。

坐标系、旋转和单位的完整约定见 约定。

关节体基座:固定还是自由#

MJCF 文件会指定把机器人基座连接到世界的关节,因此其基座是固定还是浮动由模型设定决定。URDF 则不然:除非你把它固定,否则它的基座是自由的(通过一个 6 自由度关节连接到世界)。gs.morphs.Mesh 也是如此。

# Bolt the robot's base to the world.
arm = scene.add_entity(gs.morphs.URDF(file="urdf/panda_bullet/panda.urdf", fixed=True))

对于关节体模型,有两个 URDF 选项会影响性能和控制:

  • merge_fixed_links(默认 True)会把通过固定关节相连的连杆合并成一个刚体,从而更快。如果你需要某个被合并的连杆仍可被寻址,例如用 逆运动学 驱动的末端执行器坐标系,就把它列在 links_to_keep 中。

文件路径如何解析#

morph 的 file 可以是绝对路径,也可以是相对路径。相对路径会先基于你当前的工作目录解析;如果在那里找不到,再基于 Genesis World 自带的资产目录(genesis/assets)解析。正因如此,file="xml/franka_emika_panda/panda.xml" 无需任何路径配置就能加载随包发布的 Franka 模型。

Note

对于 MJCF 和 URDF,你也可以不传路径,而是直接把内联 XML 内容作为 file 传入。能够按 XML 解析的字符串会被直接使用,并跳过路径解析。

另请参阅#

  • Morph:完整的 morph 参考,包含每种格式的所有选项。

  • 导入 USD 资产:导入 USD stage。

  • 网格处理:凸分解、减面以及其他网格预处理操作。