NVIDIA Omniverse™ Extension 开发秘籍:Python/C++ 实战,附完整代码

NVIDIA Omniverse™ Extension 开发秘籍:Python/C++ 实战,附完整代码

 

科学季 2025
收录于 · Omniverse
8 人赞同了该文章
开篇福利:
 
广告
【限量领取】参与问卷,抽多功能数码包!
 

NVIDIA Omniverse™ 是一个模块化平台,使用高级 API 和微服务来构建由 OpenUSD 和 NVIDIA RTX™ 提供支持的 3D 应用。OpenUSD 功能强大的 3D 框架与 NVIDIA RTX 用于视觉渲染和模拟的实时光线追踪相结合,使开发者能够为各行各业构建可扩展的解决方案。

NVIDIA Omniverse 的开发支持 Python 和 C++ 两种语言。Python 开发效率高,因此 Omniverse 的主要开发以 Python 为主。而 C++ 开发则可以通过著名的开源框架 Pybind11 封装好后提供 Python 接口。

1 开发环境准备

1.1 Visual Studio code

推荐使用 Visual Studio Code 开发,有条件的可以使用 Cursor 等 AI 开发工具,或者结合 GPT、Deepseek 等辅助开发。

Visual Studio code 下载:

1.2 Omniverse Kit template

有 2 种部署方式:可以选择自己搭建,或者通过网盘下载打包文件,具体步骤参照:

2 创建 Omniverse Extension

2.1 在Kit App template(重命名为 Kit107.3)目录下,以 Windows 为例,在命令行模式下运行:

repo template new

2.2 选择 Extension:

2.3 然后再选择 Python UI Extension:

2.4 输入 Extension 的名字“nv.hello_world”,显示窗口的名字“Hello world”

2.5 相同目录下运行 repo launch 打开 NVIDIA Omniverse™ USD Composer,点击 Developer -- Extension(如下图所示),打开刚才创建的 Hello world

2.6 点击上图的 VS Code 按钮, VS code 就会把整个用户创建的 Extension 目录打开。找到创建的 nv\hello_world 目录下面的 Extension.py

每个 Extension.py 对应每个插件的入口文件,其中会默认创建 on_startup 和 on_shutdown 这 2 个函数:

def on_startup(self, _ext_id):

 

def on_shutdown(self):

3 Extension Debug 开发调试

调试是确保程序运行正常的必要环境,Omniverse 支持 VS Code Live debug 调试和打印 Log debug 调试两种方式,下面将展开介绍这两种 debug 调试方式。

3.1 VSCode Live Debug 调试

VS Code 调试可以根据断点设置实时查看各种变量。

3.1.1 点击菜单 Run -- Start Debugging:

3.1.2 点击 Omniverse 窗口中插件窗口的“Add”按钮,此时可以看到断点被触发:

3.2 打印 Log debug 调试

在很多情况下并不适合断点调试,比如和时序相关的很多 Bug 或者触发条件很复杂的情况,这时候需要打印 Log 来进行调试。

许多开发者用 Python 默认的 print 函数来进行打印调试,这里推荐用 Omniverse 封装好的函数。

在 Omniverse Kit 开发中,可以用 carb.log_infocarb.log_warncarb.log_error。这 3 个在“console”窗口进行分类且会对应不同的颜色。

3.2.1 首先在代码中 import carb .然后在代码中分别在三个不同的函数中填入 carb.log_infocarb.log_warn 和carb.log_error

* 注意此处每个 log 都填入了 [NV_Hello_World] 这样做的目的是在“Console”窗口查看对应的 Extension 时,过滤掉其他 Extension 不相关的信息。在开发过程中制定好某些规范,可让开发调试更有效率。

3.2.2 在“Console”窗口中,点击不同的颜色可以区别显示不同类别的 Log,过滤窗口过滤掉非本 Extension 的调试信息。

4 用 Pybind11 结合 C++ 开发 Omniverse Extension

pybind11 是现阶段流行的一个 C++ 结合 Python 的开发框架,本质是一个轻量级的头文件库,用来把 C++ 接口封装以后暴露给 Python 使用。

这样在 Omniverse Extension 开发中,既可以满足 Python 快速开发 UI 的便捷需求,又可以利用 C++ 高效对接许多底层硬件工业设备,比如 SDI 视频采集卡。

*这里不建议用 Omniverse 自带的 C++ Extension 去开发:因为 C++ 版本的在编写 Omniverse UI 方面便捷性不足,在 Omniverse Extension 级别的开发还是以 Python 为主。

4.1 开发环境安装

要开发 Pybind11 程序,需要 Pybind11 文件库和 Python3.11 运行环境。也可以直接用 Omniverse 自带的 Python 运行环境,目前是 3.11 版本,在 Omniverse 安装目录下面的 ..\_build\windows-x86_64\release\kit\python\

下载 Pybind11 开发库:

首先我们在 Github 上下载:

git clone  到本地目录。

下载 Python 运行环境并安装:

下载 Visual Studio 开发环境:

4.2 设置环境变量(以 Windows 为例)

在 Windows 系统环境变量中(Windows 开始菜单 -- 搜索“环境变量”)设置开发路径,分别设置 py311_includepy311_lib 和 pybind_include 这 3 个环境变量用于后续开发。

4.3 开发环境配置

用 Visual Studio 封装 Pybind(Linux 或者跨平台 CMakelist 等请参考 Pybind11 官方文档),安装 Visual Studio 并选择 C++ 开发组件,然后创建一个 C++ 空项目,起名为“Example”。

4.3.1 修改生成程序为 DLL 动态链接库形式。

4.3.2 配置头文件,把之前设置的头文件环境变量填写在如下图所示的地方。

4.3.3 动态链接库设置。

4.3.4 填入 python311.lib 和 python3.lib

4.3.5 输出设置

DLL 工程默认生成是 .dll,但实际 Omniverse 工程中需要的是 .pyd 扩展名,所以在 Post-Build Event 中执行下面命令,拷贝并且重新设置扩展名:

copy /Y "$(OutDir)$(TargetName).dll""$(OutDir)$(TargetName).pyd"

4.4 代码开发

在 Visual Studio 工程中创建一个 source.cpp 填入以下代码:

#include<pybind11/pybind11.h>

namespace py = pybind11;

intadd(int i, int j){
    return i + j;
}
PYBIND11_MODULE(Example, m, py::mod_gil_not_used()) {
    m.doc() = "pybind11 Example plugin"; // optional module docstring
    m.def("add", &add, "A function that adds two numbers");
}

编译代码成功以后看到生成一个 Example.pyd。

* 注意 Example 要和 PYBIND11_MODULE 中的大小写完全一样)。

4.5 在 Omniverse 调用 pyd

拷贝刚才生成的 pyd 文件到 Omniverse 的 Python 链接库文件夹下面。可以自行编写脚本,或者在之前的 post-build 中执行命令:

..\_build\windows-x86_64\release\kit\python\DLLs

打开 Omniverse 菜单栏 Developer--Script Editor,输入以下代码点击 Run,可以看到封装的 C++ 函数在 Python 端被正确调用执行。

import Example
result = Example.add(1, 2)
print(f"Pybind Example result is {result}")
help(Example.add)
print(Example.__doc__)
print(Example.add.__doc__)

下期将带来实战项目——利用 Omniverse Extension 开发 FreeD 定位系统。敬请持续关注丽台科技,获取更多干货内容!

文案&技术支持:宋毅明 NVIDIA 半导体专业可视化部门
 
广告
免费申请Omniverse Enterprise丽台测试中心远程体验
 

*与 NVIDIA 产品相关的图片或视频(完整或部分)的版权均归 NVIDIA Corporation 所有。

 
所属专栏 · 昨天 13:45 更新
Omniverse
丽台科技
已认证机构号
128 篇内容 · 1180 赞同
最热内容 ·
“元宇宙”火了,到底什么是“元宇宙”?
编辑于 2025-09-08 13:45・上海

posted on 2025-09-09 17:14  漫思  阅读(27)  评论(0)    收藏  举报

导航