当前位置: 首页 > news >正文

第六章、Isaacsim中的资产(usd)

第六章、Isaacsim中的资产(usd)

0 前言

官方文档:https://docs.isaacsim.omniverse.nvidia.com/latest/omniverse_usd/open_usd.html
在Isaac sim 中通过通用场景描述(universal scene description USD)来描述机器人及场景。
USD提供文本格式可编辑的.usda,二进制编码格式的.usd等。

1 Hello World

在isaaac-sim文件夹下新建一个usd_test文件夹,并在文件夹下创建一个hello_world.py,将下述代码copy到文件中:

from pxr import Usd, UsdGeom

stage = Usd.Stage.CreateNew('你的地址/isaac-sim/usd_test/HelloWorld.usda')
xformPrim = UsdGeom.Xform.Define(stage, '/hello')
spherePrim = UsdGeom.Sphere.Define(stage, '/hello/world')
# generic_spherePrim = stage.DefinePrim('/hello/world_generic', 'Sphere')
stage.GetRootLayer().Save()

运行上述代码会在指定的'你的地址/isaac-sim/usd_test生成'HelloWorld.usda'
打开vcscode,安装USD Language扩展并在/isaac-sim/.vscode/settings.json文件最后添加

"files.associations":{
        "*.usda": "usd",
        "*.usd": "usd"
    }

此时打开usd_test/HelloWorld.usda文件,可以高亮显示:
在这里插入图片描述
类型(Type):在 USD 中,Prim(基本元素) 是场景中的基本单位,每个 Prim 都有一个明确的 类型(Type),决定了它的功能和行为。(例如 Sphere 会有半径属性)

  • Xform 类型:表示一个包含 变换(Transform) 的容器(例如平移、旋转、缩放)。
  • Sphere 类型:表示一个球体几何体(属于 UsdGeom 模块的几何类型)。

组合(Composition):USD 的 组合机制 允许 Prim 嵌套其他 Prim,形成层级结构。每个子 Prim 是独立的实体,具有自己的属性和类型。

# 创建父级 Xform
parent_prim = stage.DefinePrim("/group", "Xform")

# 嵌套子 Sphere
child_prim = stage.DefinePrim("/group/sphere", "Sphere")

内省(Introspection):内省 指在运行时动态检查或创建 Prim 的类型和属性。通过 DefinePrim 直接指定模式名称即可创建对应类型的 Prim。

from pxr import Usd, UsdGeom

# 创建 Stage
stage = Usd.Stage.CreateInMemory()

# 动态创建 Sphere 类型的 Prim
generic_sphere_prim = stage.DefinePrim("/hello/world_generic", "Sphere")

# 设置 Sphere 的半径属性
sphere = UsdGeom.Sphere(generic_sphere_prim)
sphere.GetRadiusAttr().Set(5.0)

命名空间:USD 的类型通过 命名空间(Namespaces) 组织,例如 Xform 和 Sphere 属于 UsdGeom 命名空间,专门用于几何相关类型。

from pxr import UsdGeom  # 导入几何相关类型

# 创建 Xform 和 Sphere
xform = UsdGeom.Xform.Define(stage, "/xform")
sphere = UsdGeom.Sphere.Define(stage, "/xform/sphere")

2 在isaac sim场景中加载usda

打开isaac sim通过vscode与isaac sim交互运行代码加载usda模型

import omni
omni.usd.get_context().open_stage("/home/gxy/isaac-sim/usd_test/HelloWorld.usda")

在这里插入图片描述

3 查看和修改对象的属性

查看:

from pxr import Usd, Vt
stage = Usd.Stage.Open('/path/to/HelloWorld.usda')
xform = stage.GetPrimAtPath('/hello')
sphere = stage.GetPrimAtPath('/hello/world')
print(xform.GetPropertyNames())
print(sphere.GetPropertyNames())

修改:可以看到球体的半径从 1.0 减小到 0.5,但它也会在控制台中打印这些值。

radiusAttr = sphere.GetAttribute('radius')
print(radiusAttr.Get())
radiusAttr.Set(0.50)
print(radiusAttr.Get())

在这里插入图片描述修改材质等细节见官网:https://openusd-org.translate.goog/release/tut_usd_tutorials.html?_x_tr_sl=auto&_x_tr_tl=zh-CN&_x_tr_hl=en&_x_tr_pto=wapp

4 USD 中的单位系统

USD 通过 Stage 的元数据(Metadata) 定义场景的全局单位。这些单位会影响所有几何变换、物理属性(如质量、速度)和动画时间轴的计算。
在这里插入图片描述

在 USD 文件的开头,通常会声明单位:

#usda 1.0
(
    metersPerUnit = 1.0       # 距离单位:1.0 表示米
    timeCodesPerSecond = 24   # 时间单位:每秒 24 帧(用于动画)
    upAxis = "Z"              # 坐标系的上方向轴(Isaac Sim 默认是 Z-up)
)

更多细节见:https://docs.isaacsim.omniverse.nvidia.com/latest/reference_material/reference_conventions.html#isaac-sim-conventions

http://www.dtcms.com/a/106551.html

相关文章:

  • 【嵌入式系统设计师】知识点:第1章 计算机系统基础知识
  • 方案精读:IPD业务流程体系构建(中)【附全文阅读】
  • 介绍一点metric self-join和复合索引笔记
  • 数组中两个字符串的最小距离
  • 【深度学习量化交易19】行情数据获取方式比测(1)——基于miniQMT的量化交易回测系统开发实记
  • CCF CSP 第34次(2024.06)(2_矩阵重塑(其二)_C++)(二维矩阵 -> 一维矩阵 -> 二维矩阵)
  • 【万字总结】前端全方位性能优化指南(九)——FSP(First Screen Paint)像素级分析、RUM+合成监控、Lighthouse CI
  • 蓝桥杯C++基础算法-最大公约数
  • 论文阅读:基于增强通用深度图像水印的混合篡改定位技术 OmniGuard
  • 电池自动点焊机:智能制造的得力助手|深圳比斯特自动化
  • 普通链式二叉树(习题版)
  • 脑影像分析软件推荐| SimTB
  • WireShark安装
  • BigMusic来了:火山引擎AI音乐模型的技术革新与应用实践
  • MySQL 错误 报错:Table ‘performance_schema.session_variables’ Doesn’t Exist
  • Doris:打破 SQL 方言壁垒,构建统一数据查询生态
  • TensorFlow 字符串操作
  • Uubuntu20.04复现SA-ConvONet步骤
  • 【2025】物联网发展趋势介绍
  • 制造业数字化转型:智能招聘系统破解蓝领用工匹配难题?
  • MySQL学习笔记集--简单介绍以及下载途径
  • EdgeOne Pages 上线「DeepSeek R1 模板」,1分钟快速部署对话型 AI 类网站
  • MySQL表的增删改查(进阶)
  • 应华为 AI 医疗军团之战,各方动态和反应
  • 【C#】.net core 6.0 依赖注入常见问题之一,在构造函数使用的类,都需要注入到容器里,否则会提示如下报错,让DeepSeek找找原因,看看效果
  • 绿盟1面-流量篇
  • GitHub与Gitee各是什么?它们的区别与联系是什么?
  • DeepSeek-R1 API:多场景赋能的智能语言模型
  • 1.4 基于模拟退火改进蛇算法优化VGG13SE网络超参数的故障诊断模型
  • 程序化广告行业(52/89):程序化创意深度剖析