Isaac Sim v5.0.0:探索AI 机器人仿真平台

🕒 2025-09-10 📁 Ai应用 👤 laumy 🔥 359 热度

什么是isaac sim

NVIDIA Issac Sim是一款基于NVIDIA omniverse构建的参考应用应用程序,使开发人员能够在基于物理的虚拟环境开发、模拟和测试AI机器人。

设计

Isaac Sim提供了一系列工作流程,用于导入和调整最常见格式(包括Onshape、统一机器人描述格式URDF和MuJoco XML格式MJCF)设计的机械系统。这通过使用通用常见描述USD实现,该开源3D常见描述API具有高度可扩展性,是Isaac Sim核心的统一数据交换格式。

微调与训练

Isaac Sim的核心功能在与其仿真能力本身:这是一个基于GPU的高保真physX物理引擎,能够支持工业规模的传感器PTX渲染。该平台通过直接调用GPU,实现了对各类传感器(包括摄像头、激光雷达和接触式传感器)的仿真模拟。这种能力进而支持数字孪生技术的实现,让您的端到端流程在真实机器人启动前就能完成测试运行。Isaac Sim提供了一整套工具链:通过Replicator生成合成数据,利用Omnigraph编程仿真环境,调整PhysX参数以匹配实现物理特性,最终通过强化学习RL等多样化方法训练控制智能体。

部署

Isaac Sim预先配备了所有必要组建,不仅能将智能体部署到真实机器人,还能构建与这类系统完全集成的应用程序。Omniverse提供了应用基础设施API,包括图形界面和文件管理功能。该平台还提供了与ROS 2桥接API,实现真实机器人与仿真的直接通信,同时搭建NVIDIA Isaac ROS:一套高性能硬件加速的ROS 2工具包,专为打造自主机器人而设计。

快速入门

系统架构

Isaac Sim旨在支持新型机器人工具的创建,并增强现有工具的功能。该平台为为C++和Python提供了灵活的API,可根据需求以不同深度集成到项目中。平台目标并非与现有软件竞争,而是与之协调并提升其能力。为此,Isaac Sim的许多组建都是开源的,可自由独立使用。可以在Onshape中设计机器人,用Isaac Sim模拟传感器,并通过ROS或其他消息系统控制场景。同样,也可以完全基于isaac sim提供的ingt构建完整的独立应用程序。

Omniverse Kit

Isaac Sim基于Omniverse Kit构建,这是一个用于开发原生Omniverse应用和微服务的工具包。Omniverse Kit通过一系列轻量级插件提供多样化功能。这些插件采样C语言接口开发以确保API持久兼容性,同时提供python解释器以便进行便捷的脚本编写和定制。

通过 Python API 可以为 Omniverse Kit 编写新扩展,或为 Omniverse 创建新体验。

开发工作流

Isaac Sim基于C++和Python构建,通常分别通过编译插件和绑定进行操作。这意味着该平台能够支持多种工作流程,拥有构建和交互利用Isaac Sim项目。Isaac Sim提供完整的OMniverse应用程序,拥有与机器人交互和仿真,虽然这是用户与平台互动的最常见方式,但绝非唯一途径。Isaac Sim还以VS code和Jupyter Notebook扩展形式提供直接python开发支持。此外Isaac Sim不仅限与同步操作,还能通过ROS2实现硬件在环运行,从而促进仿真到现实的迁移以及数字孪生应用。

USD格式

NVIDIA Isaac Sim采用USD通过常见描述文件格式呈现常见。Universal Scene Description(USD)是由皮克斯开发的一种易于扩展的开源 3D 场景描述文件格式,专为内容创作和不同工具间的交互而设计。凭借其强大功能和通用性,USD 不仅被视觉特效领域广泛采用,还应用于建筑、设计、机器人、制造等多个学科领域。

安装指南

Isaac Sim支持windows和Linux系统安装。可通过容器( container)、工作站(workstation)、云端(in the cloud)、直播流(livestream)或者python环境进行部署,根据使用场景,还可以自定义硬件配置。

快速安装

快速安装适用于演示场景,可让您了解完整产品的功能概览。完成快速安装后,您能创建包含机器人的虚拟房间,这将更全面的展示产品能力。该只能面向具备基础计算机知识的安装人员。

windows或linux系统快速安装步骤:

(1)下载以下任意安装包

(2)将安装包解压至制定文件夹

(3)运行脚本检查

  • window:请双击 omni.isaac.sim.compatibility_check.bat。
  • linux:./omni.isaac.sim.compatibility_check.sh

更多信息参阅:Isaac Sim兼容性检查

(4)下载任意一个安装包

(5)创建一个isaac-sim的文件夹

在windows的C:/或linux根目录下直接创建一个名为isaac-sim的文件夹。然后将下载的文件解压到文件夹中去。

(6)在isaac-sim文件夹中,执行操作

  • window:请双击 isaac-sim.selector.bat
  • linux:命令窗口中运行 ./post_install.sh ,然后运行 ./isaac-sim.selector.sh。

(7)在issac应用选择起窗口,选择”start”

有关应用选择器的详细信息,请参阅《Isaac Sim 应用选择器》。随后将打开另一个命令窗口并运行脚本,此过程可能比预期耗时更长。在此期间由于会出现空白窗口,可能看似安装失败。请继续等待。

(8)issac启动成功

(9)选择 选择创建一个房间

Create > Environment > Simple Room.

(10)选择创建一个机械臂

Create > Robots > Franka Emika Panda Arm.

(11)点击运行模拟

在屏幕最左侧寻找箭头按钮,点击它来运行一段简短模拟。

isaac 系统需求

对操作系统需求如下

对驱动的要求如下

工作站安装

工作站安装方式是在本地允许模拟器,需要对本地电脑有较高的要求,官方要求最低的配置要为RTX4080的显卡。因此若本地配置了GPU的windows或linux系统上以GUI应用程序允许isaac sim,推荐采用工作站安装方式。下面是安装步骤

(1)isaac Sim兼容性检查工具

Isaac 兼容性检查工具是一款轻量级应用程序,可通过编程方式检查本地的软硬件要求,会给出运行NVIDIA isaac sim时那些要求满足或不满足。

  • 下载工具:Latest Release兼容性工具
  • 解压:将压缩包解压到指定文件夹。
  • 运行:在Linux系统上云霄omni.isaac.sim.compatibility_check.sh脚本,在windows系统上运行omni.isaac.sim.compatibility_check.bat文件。

点击工具的”Test Kit”按钮就会显示测试结果。

应用程序会以不同颜色高亮显示以下状态:

  • 绿色:表示优秀
  • 浅绿色:表示良好
  • 橙色:表示基本满足,建议更高配置
  • 红色:不足/不支持

应用程序检查维度为:

  • NVIDIA GPU:驱动程序版本、支持RTX功能的GPU、显存容量。
  • CPU、内存和存储:CPU处理器、CPU核心数量、运行内存、可用存储空间。
  • others:操作系统、显示设备。

对于操作系统如果ubuntu大于版本号也会变成红色,可先测试是否可运行,实测是可以,但不排除有兼容性问题。

(2)下载软件包

下载链接:Latest Release,根据自己的系统选择软件包下载的本地。

在本地创建一个isaacsim文件夹,然后将压缩包解压到文件夹。

(3)运行启动

先创建extension_examples 的符号链接,请运行 post_install 脚本。

  • linux:./post_install.sh
  • windows:双击 post_install.bat 文件

然后就可以启动应用程序

  • linux: 执行 ./isaac-sim.selector.sh
  • windows:双击isaac-sim.selector.bat 文件

启动后会弹出以下界面

在弹出的窗口中选择isaac Sim Full,然后点击START就可以运行。启动过程中可能要一点时间,如果期间弹出“程序无法响应”,可以选择等待,以免被误杀。

启动后就可以开始第一个基础教程了:基础教程。

总结一下命令执行的实例:

linux系统

mkdir ~/isaacsim
cd ~/Downloads
unzip "isaac-sim-standalone-5.0.0-linux-x86_64.zip" -d ~/isaacsim
cd ~/isaacsim
./post_install.sh
./isaac-sim.selector.sh

window系统

mkdir C:\isaacsim
cd %USERPROFILE%/Downloads
tar -xvzf "isaac-sim-standalone-5.0.0-windows-x86_64.zip" -C C:\isaacsim
cd C:\isaacsim
post_install.bat
isaac-sim.selector.bat

Docker容器安装

在远程服务器或者云端部署isaac sim建议使用docker容器的方式。

(1)检查系统是否满足需求

首先先确保系统满足运行NVIDIA isaac Sim所需的系统要求驱动程序要求。

(2)安装docker

Docker installation using the convenience script
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Post-install steps for Docker
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Verify Docker
docker run hello-world

详细的docker安装步骤见docker安装,安装后的配置步骤见配置步骤

(3)安装NVIDIA容器工具包

Configure the repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
    && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
    && \
    sudo apt-get update

Install the NVIDIA Container Toolkit packages
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

Configure the container runtime
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Verify NVIDIA Container Toolkit
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

安装最新版本的 NVIDIA 容器工具包以获取安全补丁。

(4)容器部署

docker pull nvcr.io/nvidia/isaac-sim:5.0.0

拉取isaac sim容器。

然后以交互式bash会话运行isaac sim容器。

docker run --name isaac-sim --entrypoint bash -it --runtime=nvidia --gpus all -e "ACCEPT_EULA=Y" --rm --network=host \
    -e "PRIVACY_CONSENT=Y" \
    -v ~/docker/isaac-sim/cache/kit:/isaac-sim/kit/cache:rw \
    -v ~/docker/isaac-sim/cache/ov:/root/.cache/ov:rw \
    -v ~/docker/isaac-sim/cache/pip:/root/.cache/pip:rw \
    -v ~/docker/isaac-sim/cache/glcache:/root/.cache/nvidia/GLCache:rw \
    -v ~/docker/isaac-sim/cache/computecache:/root/.nv/ComputeCache:rw \
    -v ~/docker/isaac-sim/logs:/root/.nvidia-omniverse/logs:rw \
    -v ~/docker/isaac-sim/data:/root/.local/share/ov/data:rw \
    -v ~/docker/isaac-sim/documents:/root/Documents:rw \
    nvcr.io/nvidia/isaac-sim:5.0.0
  • 使用 -e “ACCEPT_EULA=Y” 标志即表示您接受 NVIDIA Omniverse 许可协议中规定的镜像许可协议。
  • 使用 -e “PRIVACY_CONSENT=Y” 标志即表示您同意数据收集与使用协议中的条款。不设置此标志即可选择退出数据收集。
  • 使用-e “PRIVACY_USERID=\<emai\l>” 标志可选择性地设置用于标记会话日志。

最后以原生直播模式启动 isaac sim

./runheadless.sh -v

运行直播客户端前,必须确保 Isaac Sim 应用已加载就绪。Isaac Sim 可能需要几分钟才能完全加载。-v 标志用于在着色器缓存预热时显示额外日志。要确认这一点,请留意控制台或日志中的这一行:Isaac Sim Full Streaming App is loaded。

首次加载 Isaac Sim 时,着色器缓存需要较长时间。后续运行 Isaac Sim 会更快,因为着色器已被缓存,且容器运行时缓存会被挂载。

(5)安装isaac sim WebRTC流媒体客户端

见后续章节。输入运行 Isaac Sim 容器的机器或实例的 IP 地址,点击连接按钮开始实时流传输。

云部署

Isaac Sim以容器形式提供,可在本地运行,也可在配备NVIDIA RTX的亚马逊云服务、微软、谷歌云平台、腾讯云或阿里云上运行,并支持将应用程序直接流式传输到您的桌面。这种基于云的交付方式能为任何桌面系统提供最新的RTX图像处理能力与性能,无需本地配置NVIDIA RTX GPU。

根据选择的云服务提供商,提供以下可选方案。

上述链接提供了云端部署指南,包含通过 SSIsaac Automator 是一款高级工具,可帮助将自定义 Isaac Sim 部署自动化至公有云平台。该工具支持通过 SSH、基于网页的 VNC 客户端以及远程桌面客户端访问 Isaac Sim 实例,兼容 AWS、Azure、GCP 和阿里云等主流云服务商。H 和远程桌面客户端访问实例的操作说明。

直播客户端

本节将介绍如何以无界面模式直播运行 Isaac Sim 实例。需要注意的是每个 Isaac Sim 实例同一时间只能采用一种直播方式。同一时间仅允许一个客户端访问单个 Isaac Sim 实例。要远程退出 Isaac Sim 应用程序:点击文件菜单,然后在流式传输的 Isaac Sim 应用中选择退出。接着关闭 Isaac Sim WebRTC 流媒体客户端应用。当 Isaac Sim 运行在 A100 GPU 上时不支持直播功能。直播需要 NVENC(NVIDIA 编码器)支持,而 A100 GPU 不包含该编码器。

Isaac Sim WebRTC流媒体客户端是推荐的远程查看工具,可让您在桌面或工作站以无需配置高性能GPU可以查看Isaac Sim画面。

(1)服务端的启动

要使用Isaac Sim WebRTC流媒体客户端,需要先在远程运行isaac Sim。

  • linux:cd ~/isaacsim && ./isaac-sim.streaming.sh
  • windows:双击isaac-sim.streaming.bat
  • Docker:./runheadless.sh
  • PIP:isaacsim isaacsim.exp.full.streaming –no-window
  • Python sample:./python.sh standalone_examples/api/isaacsim.simulation_app/livestream.py

要可以通过互联网连接远程实例运行isaac sim,需要添加以下标志:–/app/livestream/publicEndpointAddress= –/app/livestream/port=49100。如在docker容器示例中:

PUBLIC_IP=(curl -s ifconfig.me) && ./runheadless.sh --/app/livestream/publicEndpointAddress=PUBLIC_IP --/app/livestream/port=49100

然后在 Isaac Sim WebRTC 流媒体客户端应用中使用相同的公共 IP。运行 Isaac Sim 的主机必须开放UDP port 47998和TCP port 49100。

确保 Isaac Sim 应用已加载就绪。首次启动时,Isaac Sim 可能需要数分钟才能完全加载完成。

为确认加载状态,请在终端/控制台输出或应用日志中查找以下信息。使用 PIP 或 Python Sample 运行时可能不会显示该行信息。Isaac Sim Full Streaming App is loaded.

(2)客户端的启动

请根据您的平台,从最新发布版块下载 Isaac Sim WebRTC 流媒体客户端

运行 Isaac Sim WebRTC 流媒体客户端应用程序。

使用默认的 127.0.0.1 IP 地址作为服务器,连接到本地 Isaac Sim 实例。点击”连接”。连接过程可能需要一些时间。连接成功后,您将在客户端窗口中看到 Isaac Sim 界面。

需要注意的是建议在与 Isaac Sim 无头实例相同的网络中使用 WebRTC 流媒体客户端。连接到同一网络中无头模式的 Isaac Sim 实例时,请将 127.0.0.1 替换为运行 Isaac Sim 的计算机 IP 地址。

  • linux系统:在终端中运行 chmod +x xx.AppImage 命令,使应用程序获得可执行权限。双击 AppImage 文件即可运行 Isaac Sim WebRTC 流媒体客户端。重要提示:在 Ubuntu 22.04 或更高版本上运行需安装 libfuse2。具体安装方法请参阅《安装 FUSE 2》指南。
  • windows:若在连接本地或远程 Isaac Sim 实例时遇到问题,请确保 Windows 防火墙允许列表中已添加/kit/kit.exe 及 Isaac Sim WebRTC 流媒体客户端应用。
  • macbook:打开 DMG 文件后,点击并拖拽 Isaac Sim WebRTC 流媒体客户端应用程序至”应用程序”文件夹图标完成安装。

要重新加载连接,请在视图菜单中点击“重新加载”。如果一段时间后出现空白屏幕,此操作可能会有所帮助。

Python环境安装

主要是在python虚拟环境中通过PIP安装Isaac Sim和使用isaac Sim默认python环境。这里就不展开了,具体参考链接:python环境安装

Isaac Sim 资源库

isaac Sim提供多种资源与机器人模型,助您构建虚拟世界。部分资源专为isaac Sim及机器人应用打造,另一些则适用于其他基于NVIDIA Omniverse的应用程序。默认提供的资源均可在Window > Browsers选项卡中找到。

内容浏览器集中管理所有isaac Sim资源与文件,包含下来全部资源清单,以及URDF文件、配置文件、策略二进制等。Window > Browsers > Content

isaac Sim最新版本提供示例资源包可供下载。使用这些资源时,需将文件下载至本地磁盘或Nucleus服务器。下文中所有资源路径均默认相对于 persistent.isaac.asset_root.default 设置中的默认资源根目录。详见本地资源包章节。

首次加载资源时耗时较长:机器人模型可能需要数分钟加载,大型环境场景的加载时间可能长达十分钟以上

资源分类如下:

  • 机器人资产
  • 相机与深度传感器
  • 非视觉传感器
  • 道具
  • 环境
  • 精选资源
  • Neural Volume渲染

机器人

NVIDIA Isaac Sim 支持多种具有不同底盘、外形和功能的机器人。这些机器人可分为轮式机器人、全向移动机器人、四足机器人、机械臂和空中机器人(无人机),它们位于内容浏览器的 Isaac Sim/Robots 文件夹中。

(1)轮式机器人

Limo是NVIDIA Isaac Sim 支持集成 ROS 系统的 AgileX Limo 差速驱动底盘机器人。Robots/AgilexRobotics/Limo/limo.usd

NVIDIA 卡特机器人专为导航相关应用提供差速移动底盘。新一代 Nova 卡特机器人基于 Nova Orin 计算与传感器平台打造。

NVIDIA Isaac Sim 支持 Clearpath 移动机器人,包括 Dingo 和 Jackal。Clearpath 机器人位于 Robots/Clearpath 中。

Evobot 是一款采用两轮驱动的自平衡机器人,专为抓取和运输物体设计。该机器人由德国多特蒙德弗劳恩霍夫研究所开发。

Forklift 叉车模型采用单枢轴轮和滚轮设计,通过连接至关节动作的棱柱关节来控制升降操作。

JetBot是开源 NVIDIA JetBot 人工智能机器人平台为创客、学生和爱好者提供了构建创意趣味 AI 应用所需的一切。

Idealworks iw.hub 是一款配备激光雷达和摄像头的移动底盘,搭载 NVIDIA AGX GPU 实现自主导航。该平台负载能力达 1000 公斤,最高行驶速度 2.2 米/秒。

iRobot 公司推出的 Create3 机器人是一款先进的差速驱动机器人,专为多种教育应用场景设计。其圆形底盘集成了多种传感器和先进控制功能,特别适合室内导航、环境建图等任务。NVIDIA Isaac Sim 中的 Create3 机器人配备了差速驱动系统和各类传感器,可实现高度逼真的仿真效果。Create 3 机器人可在 Robots/iRobot/Create3/create_3.usd – 基础版本中找到。已配置移动底盘物理系统。更多信息参阅 iRobot Create 3

Leatherback 是 NVIDIA 用于自动驾驶的研究平台。皮背甲机器人位于 Robots/NVIDIA/Leatherback/leatherback.usd

(2)全向移动机器人

Kaya机器人是一个展示 Isaac 机器人引擎在 NVIDIA Jetson Nano™平台上运行能力与灵活性的演示平台。该平台采用 3D 打印部件和爱好者级组件设计,力求实现最大程度的可及性,并配备三轮全向驱动系统,使其能够朝任意方向移动。

  • Robots/NVIDIA/Kaya/kaya.usd :基础版本
  • Robots/NVIDIA/Kaya/kaya_ogn_gamepad.usd:基础版本,外加使用全向控制器实现的游戏手柄操控功能。

O3dyn 是由多特蒙德弗劳恩霍夫研究所开发的自主全向运输机器人。凭借其全向轮,该机器人可实现任意方向移动,并通过四个杠杆抓取托盘,进而抬升托盘进行运输。

  • Robots/Fraunhofer/O3dyn/o3dyn.usd: 基础版本。包含移动底盘、夹具与升降机构的物理绑定,以及传感器定位功能。
  • Robots/Fraunhofer/O3dyn/o3dyn_controller.usd :基础版本,外加使用全向控制器实现的游戏手柄操控功能。

(3)四足机器人

Ant蚂蚁是一种基础四足机器人,腿部采用旋转关节设计,其原型源自 OpenAI Gym 中的 Ant 机器人。

  • Robots/IsaacSim/Ant/ant.usd :基础版本。可通过菜单栏中 Create>Robots>Ant 选项创建。
  • Robots/IsaacSim/Ant/ant_instanceable.usd :可实例化版本,专为强化学习场景配置以创建多个高效克隆体。

ANYmal 机器人是由 ANYbotics 开发的自主四足机器人。Isaac Sim 支持 B、C、D 三种型号。

Boston Dynamics Spot 波士顿动力 Spot 机器人位于 Robots/BostonDynamics/spot

Unitree Quadruped Robots 宇树四足机器人A1、B2、Go1 和 Go2 是 Unitree Robotics 研发的四足机器人,在 Isaac Sim 中进行仿真。四足示例中使用的是 A1 型号。

关于四组机器人控制示例,请参阅:Isaac Sim 中的强化学习策略示例

(4)机械臂机器人

Denso Cobotta 包含以下 Denso 型号:Cobotta Pro 900、Cobotta Pro 1300。位于 Robots/Denso/Cobotta。

Fanuc CRX10iA/L 是一款 6 轴机器人,有效载荷为 10 公斤。

Festo费斯托协作机器人是一款六轴气动机械臂。

Flexiv Rizon 4 是一款 7 轴自适应机械臂。

RobotStudio是lerobot机械臂,包含以下 RobotStudio 模型:SO-100、SO-101。RobotStudio 机器人位于 Robots/RobotStudio。

太多了,只列出部分。

(5)空中机器人

Crazyflie 2.X 微型四轴飞行器机器人

Ingenuity火星直升机”机智号”

(6)人形机器人

Fourier Intelligence GR1 傅里叶智能 GR1

Unitree Humanoids 宇树人形机器人,位于 Robots/Unitree

Xiao Peng PX5 小鹏 PX5机器人位于 Robots/XiaoPeng/PX5

(7)移动式机械臂

Clearpath Ridgeback提供两种 Clearpath Ridgeback 型号配置:一种配备 Emika Franka Panda 机械臂,另一种配备 Universal Robots UR5 机械臂。位于 Robots>Clearpath 目录下。

Boston Dynamics Spot 波士顿动力 Spot 机器人,带机械臂的 Spot 机器人位于 Robots>BostonDynamics>spot 路径下

相机与深度传感器

Isaac Sim 支持相机和深度传感器,其数字孪生体可在内容浏览器中找到,位于 Isaac Sim/Sensors 目录下,并按制造商分类存放于子文件夹中。这里就不过多阐述。

非视觉传感器

Isaac Sim 模拟了多种类型的非视觉传感器模型,其数字孪生体可在内容浏览器的 Isaac Sim/Sensors 路径下找到,并按制造商分类存放于子文件夹中。
部分非视觉传感器类型尚未提供数字孪生体。有关这些传感器的详细信息(包括如何通过图形界面创建它们),请点击下方链接:

道具

道具主要是一些角色人物如警察、医生、工人,以及杂项资产。

环境资产

环境资产提供如网格、房间、仓库、医院、办公室、赛道、小型仓库数字孪生

(1)简单网格

这个简易环境包含一块带有网格纹理的平坦地面和围边。系统提供了三种配置:前两种为直角转角,第三种则为圆角设计。

(2)简单房间

包含一张桌子的简易房间

在内容浏览器中搜索 simple_room.usd 或通过创建菜单:Create>Environments>Simple Room

(3)仓库

一个包含货架及可放置物品的仓库环境。提供四种配置方案:

(4)医院

医院环境,包含多个房间和空间。

(5)办公室

一个办公环境,包含多个房间和开放式平面布局。

(6)赛道

地面上勾勒出的 Jetracer 赛道轮廓。

(7)小型仓库数字孪生

一个小型仓库的数字孪生,可以使用。

精选资产

Nova Carter 搭载 Nova Orin™传感器与计算架构,是一套完整的机器人开发平台,可加速新一代自主移动机器人(AMR)的开发和部署。

Nova Carter 目前作为 Isaac AMR 和 Isaac ROS 软件的双重参考平台,支持真实场景与仿真环境下的开发工作。用户可通过赛格威机器人公司购买 Nova Carter 机器人。

关于功能完整的 Nova Carter Isaac Sim 资产详情,请参阅Nova Carter 文档页面。

注意Nova Carter 机器人在首次加载时可能需要数分钟时间。

Neural Volume渲染

NuRec(神经重建)技术能够利用源自真实世界图像的神经体积数据,在 Omniverse 中进行场景渲染。这些基于 3D 高斯模型的场景可作为标准 USD 资产加载至 Isaac Sim,用于可视化与仿真。

有关 NuRec 在 Omniverse 中的详细工作原理(包括数据准备、渲染设置及已知限制),请参阅NuRec 文档。要生成兼容场景,可使用开源项目3DGruT——该项目提供从图像集合训练 3D 高斯模型的工具,并能导出适用于 Omniverse 应用的 USDZ 格式数据。

示例展示了如何将 NuRec 场景加载到 Isaac Sim 中并运行模拟。该代码片段遍历提供的示例,首先加载指定的舞台,随后加载 carter 导航资源并设置起始位置。接着检查是否需要在生成位置创建碰撞地平面,若需要,则创建一个应用了碰撞 API 的平面基元。然后设置 carter 导航目标基元位置,并运行指定步数的模拟。在模拟过程中,轮式机器人将朝目标位置行进。

import asyncio
import os

import omni.kit.commands
import omni.kit.app
import omni.usd
import omni.timeline
from isaacsim.storage.native import get_assets_root_path_async
from isaacsim.core.utils.stage import add_reference_to_stage
from pxr import PhysxSchema, UsdGeom, UsdPhysics

# User path of the HF NuRec dataset
USER_PATH = "/home/user/PhysicalAI-Robotics-NuRec"

# Paths for loading and placing the Nova Carter navigation asset and its target.
NOVA_CARTER_NAV_URL = "/Isaac/Samples/Replicator/OmniGraph/nova_carter_nav_only.usd"
NOVA_CARTER_NAV_USD_PATH = "/World/NovaCarterNav"
NOVA_CARTER_NAV_TARGET_PATH = f"{NOVA_CARTER_NAV_USD_PATH}/targetXform"
# Scenarios for testing navigation in the environments
EXAMPLE_CONFIGS = [
   {
      "name": "Voyager Cafe",
      "stage_url": f"{USER_PATH}/nova_carter-cafe/stage.usdz",
      "nav_start_loc": (0, 0, 0),
      "nav_relative_target_loc": (-3, -1.5, 0),
      "create_collision_ground_plane": False,
      "num_simulation_steps": 500,
   },
   {
      "name": "Galileo Lab",
      "stage_url": f"{USER_PATH}/nova_carter-galileo/stage.usdz",
      "nav_start_loc": (3.5, 2.5, 0),
      "nav_relative_target_loc": (4, 0, 0),
      "create_collision_ground_plane": False,
      "num_simulation_steps": 500,
   },
   {
      "name": "Wormhole",
      "stage_url": f"{USER_PATH}/nova_carter-wormhole/stage.usdz",
      "nav_start_loc": (0, 0, 0),
      "nav_relative_target_loc": (5, 0, 0),
      "create_collision_ground_plane": False,
      "num_simulation_steps": 500,
   },
   {
      "name": "ZH Lounge",
      "stage_url": f"{USER_PATH}/zh_lounge/usd/zh_lounge.usda",
      "nav_start_loc": (-1.5, -3, -1.6),
      "nav_relative_target_loc": (-0.5, 5, -1.6),
      "create_collision_ground_plane": True,
      "num_simulation_steps": 500,
   },
]


async def run_example_async(example_config):
   example_name = example_config.get("name")
   print(f"Running example: '{example_name}'")

   # Open the stage
   stage_url = example_config.get("stage_url")
   if not stage_url:
      print(f"Stage URL not provided, exiting")
      return
   if not os.path.exists(stage_url):
      print(f"Stage URL does not exist: '{stage_url}', exiting")
      return

   print(f"Opening stage: '{stage_url}'")
   await omni.usd.get_context().open_stage_async(stage_url)
   stage = omni.usd.get_context().get_stage()

   # Make sure the physics scene is set to synchronous for the navigation to work
   for prim in stage.Traverse():
      if prim.IsA(UsdPhysics.Scene):
            physx_scene = PhysxSchema.PhysxSceneAPI.Apply(prim)
            physx_scene.GetUpdateTypeAttr().Set("Synchronous")
            break

   # Load the carter navigation asset
   assets_root_path = await get_assets_root_path_async()
   carter_nav_path = assets_root_path + NOVA_CARTER_NAV_URL
   print(f"Loading carter nova asset: '{carter_nav_path}'")
   carter_nav_prim = add_reference_to_stage(usd_path=carter_nav_path, prim_path=NOVA_CARTER_NAV_USD_PATH)

   # Set the carter navigation start location
   nav_start_loc = example_config.get("nav_start_loc")
   if not nav_start_loc:
      print(f"Navigation start location not provided, exiting")
      return
   print(f"Setting carter navigation start location to: {nav_start_loc}")
   if not carter_nav_prim.GetAttribute("xformOp:translate"):
      UsdGeom.Xformable(carter_nav_prim).AddTranslateOp()
   carter_nav_prim.GetAttribute("xformOp:translate").Set(nav_start_loc)

   # Check if a collision ground plane needs to be created at the spawn location
   if example_config.get("create_collision_ground_plane"):
      plane_path = "/World/CollisionPlane"
      print(f"Creating collision ground plane {plane_path} at {nav_start_loc}")
      omni.kit.commands.execute("CreateMeshPrimWithDefaultXform", prim_path=plane_path, prim_type="Plane")
      plane_prim = stage.GetPrimAtPath(plane_path)
      plane_prim.GetAttribute("xformOp:scale").Set((10, 10, 1))
      plane_prim.GetAttribute("xformOp:translate").Set(nav_start_loc)
      if not plane_prim.HasAPI(UsdPhysics.CollisionAPI):
            collision_api = UsdPhysics.CollisionAPI.Apply(plane_prim)
      else:
            collision_api = UsdPhysics.CollisionAPI(plane_prim)
      collision_api.CreateCollisionEnabledAttr(True)
      plane_prim.GetAttribute("visibility").Set("invisible")

   # Set the carter navigation target prim location
   nav_relative_target_loc = example_config.get("nav_relative_target_loc")
   if not nav_relative_target_loc:
      print(f"Navigation relative target location not provided, exiting")
      return
   print(f"Setting carter navigation target location to: {nav_relative_target_loc}")
   carter_navigation_target_prim = stage.GetPrimAtPath(NOVA_CARTER_NAV_TARGET_PATH)
   if not carter_navigation_target_prim.IsValid():
      print(f"Carter navigation target prim not found at path: '{NOVA_CARTER_NAV_TARGET_PATH}', exiting")
      return
   if not carter_navigation_target_prim.GetAttribute("xformOp:translate"):
      UsdGeom.Xformable(carter_navigation_target_prim).AddTranslateOp()
   carter_navigation_target_prim.GetAttribute("xformOp:translate").Set(nav_relative_target_loc)

   # Run the simulation for the given number of steps
   num_simulation_steps = example_config.get("num_simulation_steps")
   if not num_simulation_steps:
      print(f"Number of simulation steps not provided, exiting")
      return
   print(f"Running {num_simulation_steps} simulation steps")
   timeline = omni.timeline.get_timeline_interface()
   timeline.play()
   for i in range(num_simulation_steps):
      if i % 10 == 0:
            print(f"Step {i}, time: {timeline.get_current_time():.4f}")
      await omni.kit.app.get_app().next_update_async()

   print(f"Simulation complete, pausing timeline")
   timeline.pause()


async def run_examples_async():
   for example_config in EXAMPLE_CONFIGS:
      await run_example_async(example_config)


asyncio.ensure_future(run_examples_async())

从 Hugging Face 下载 NVIDIA NuRec 数据集。更新脚本中的 USER_PATH 变量: USER_PATH = “/home/user/PhysicalAI-Robotics-NuRec”。

本文主要来自Isaac Sim Documentation V5.0.0的翻译。

发表你的看法

\t