Isaac Sim知识小解(1):USD和Prim
1. USD
USD 是 Isaac Sim 文件的数据格式,诸如 .obj 或者 .glb 等内容相似,只不过其管理了更多的内容,包括光照、物理等属性,换句话说,事实上 USD 里保存 Prim 的结构以及全部的属性信息。
USD 在 GenManip 项目中的实际作用:
-
场景模板——预构建的静态世界
GenManip 运行加载预先制作好 USD 场景文件 ,直接生成仿真数据
-
物体库——独立的 USD 资产
-
机器人模型——USD 中的 Articulation
机器人的 URDF 模型会被转换为 USD 格式,在 USD 中表现为 Articulation (铰接体):一种带有关节层级结构的 Prim,例如 Franka 机器人。
USD 文件的三种格式
| 格式 | 特点 | 使用场景 |
|---|---|---|
| .usda | 纯文本(ASCII),人类可读 | 开发调试、版本管理、GenManip 场景模板 |
| .usdc | 二进制,体积小,加载快 | 发布、大规模场景 |
| .usd | 可以是文本或二进制,不可读 | 场景组装入口 |
Genmanip框架中:场景文件格式是.usda,资产文件格式是.usd
添加 USD
在 Isaac Sim 中,每一次的程序运行会打开某种实例,从意义的角度来说,可以称之为 Scene,也就是一个场景,而从定义上来说,我们称为一个 Stage。
把物体注册为一个 prim 并且添加到 Stage 中
from omni.isaac.core.prims import XFormPrim
from omni.isaac.core.utils.stage import add_reference_to_stage
def add_usd_to_world(
asset_path: str,
prim_path: str,
name: str,
translation: Optional[Sequence[float]] = None,
orientation: Optional[Sequence[float]] = None,
scale: Optional[Sequence[float]] = None,
):
reference = add_reference_to_stage(usd_path=asset_path, prim_path=prim_path)
prim_path = str(reference.GetPrimPath())
prim = XFormPrim(
prim_path,
name=name,
translation=translation,
orientation=orientation,
scale=scale,
)
usd_prim = prim.prim
if not usd_prim.IsValid():
print(f"Prim at path {prim_path} is not valid.")
return prim
通过 add_reference_to_stage 来将 物体USD 添加到 Stage 中,路径是prim_path
2. Prim
概念: Prim 是 USD 中的 基本单元 ,可以说:在 Isaac Sim 中,万物皆 Prim。Isaac Sim 的本质是对于物理世界的模拟,其中的关键在于模拟物理世界中的各种元素,例如物体、光照、纹理等,这些东西都可以用 Prim 来替代,并且进一步延伸XFormPrim、RigidPrim 或者 Shader。Prim 可以有各种属性(位置、缩放、材质等),也可以有子 Prim
常见的 Prim 类型:
- XFormPrim :带有变换(位置、旋转、缩放)的基础 Prim,作为其他 Prim 的 父节点 ,定义局部坐标系
- Mesh:带有几何网格的 Prim
- Light:光源
- Camera:相机
- Material: 材质
注意:在 USD 中,并不是所有 Prim 都有 “位置、旋转、缩放” 这些空间属(例如,Material: 材质)。USD 本身提供的是 C++ 层面的底层 API,直接操作起来比较繁琐,Isaac Sim 的 XFormPrim 继承自 Prim 基类,在此基础上专门增加了空间变换相关的方法,把这些底层操作包装成了 Python 友好的接口
prim_path
一个 Stage 下面包括若干的 Prim,这些 Prim 以树状结构组织,每一个 Prim 作为一个结点,因此对于任何一个 Prim,可以使用其递归父结点的名称来表示其路径,例如 /World/_base/robot3 表示的是在 World 下面的_base的robot3机器人
在 Isaac Sim 中,所有的 Prim 的 prim_path 都是唯一的,因此可以通过 prim_path 来访问任何一个 Prim
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)