加载资产#
机器人、刚体物体、静态网格:你放进场景里的几乎所有东西,都来自通过 morph 加载的资产文件。morph 把实体的几何形状与它的初始位姿组合在一起,你把它作为第一个参数传给 scene.add_entity(...)。本页介绍支持的格式、所有格式通用的位姿与缩放选项,以及 Genesis World 如何查找资产文件。
支持的格式#
Morph |
格式 |
用途 |
|---|---|---|
|
MuJoCo 机器人与场景模型 |
|
|
机器人描述文件( |
|
|
非关节网格 |
|
|
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 解析的字符串会被直接使用,并跳过路径解析。