IsaacSim: 用智能手机在 NVIDIA Isaac Sim 中重建场景

为机器人仿真构建逼真的三维环境往往费时费力。如今借助 NVIDIA Omniverse NuRec ,你只需一部智能手机即可完成全流程。本文逐步说明:从用 iPhone 拍摄照片,到用 3DGUT 重建三维场景,再到载入 NVIDIA Isaac Sim 并放入机器人。若希望跳过重建(步骤 1--3),直接在 Isaac Sim 中探索场景(步骤 4),请访问 Hugging Face 上的 NVIDIA Physical AI


步骤 1:采集真实世界场景

第一步是对要重建的真实环境拍照。这已不再需要特殊硬件------普通智能手机即可。

围绕场景边走边拍,并遵循以下摄影测量实践要点:

  • 光照与对焦 应正确且稳定。避免快速运动与模糊。若可以,使用更快快门(例如 1/100 秒或更快)。

在系统自带相机 App 中通常无法直接设置快门速度,但可以:

  • 锁定对焦/曝光 :长按主体启用 AE/AF Lock ,然后将曝光滑条略微下调(约 −0.3 至 −0.7 EV),使高光更利落。
  • 稳定 :使用三脚架或靠墙支撑;每帧越清晰,COLMAP 特征跟踪越好。
  • 关闭自动微距切换 :在 iPhone Pro 上为避免镜头焦距在帧间跳变,请关闭 设置 → 相机 → 自动微距
  • 手动快门/ISO :可尝试支持固定快门+ISO 的 iOS 应用,例如:Lumina: Manual CameraHalideProCameraProCam 8Moment Pro CameraLightroom Mobile 。室外可从 1/120--1/250 秒 起步,室内 ≥1/100 秒 ;在曝光可接受前提下 ISO 尽量低
  • 锁定白平衡,避免帧间色偏。

覆盖范围 :缓慢绕区域行走,拍摄多个高度与角度。经验法则是约 60% 图像重叠

提示 :COLMAP 需要标准图像格式。若 iPhone 保存为 HEIC ,可在 设置 → 相机 → 格式 中选 兼容性最佳 (拍摄为 JPEG),或在进入 COLMAP 前导出/转换为 JPG


步骤 2:使用 COLMAP 生成稀疏重建

照片就绪后,下一步是从图像反推三维结构与相机位姿。本例使用流行的开源 SfM/MVS 流水线 COLMAP 。COLMAP 会生成场景的稀疏点云,并估计每张照片的相机参数。

COLMAP 也提供命令行流程;但注意:GUI 的 Automatic Reconstruction 对入门更友好。为兼容 3DGUT ,请选择 pinholesimple pinhole 相机模型。

bash 复制代码
# 特征检测与提取
colmap feature_extractor \
    --database_path ./colmap/database.db \
    --image_path    ./images/ \
    --ImageReader.single_camera 1 \
    --ImageReader.camera_model   PINHOLE \
    --SiftExtraction.max_image_size 2000 \
    --SiftExtraction.estimate_affine_shape 1 \
    --SiftExtraction.domain_size_pooling 1

# 特征匹配
colmap exhaustive_matcher \
    --database_path ./colmap/database.db \
    --SiftMatching.use_gpu 1

# 全局 SfM
colmap mapper \
    --database_path ./colmap/database.db \
    --image_path    ./images/ \
    --output_path   ./colmap/sparse

# 可视化验证
colmap gui --import_path ./colmap/sparse/0 \
    --database_path ./colmap/database.db \
    --image_path    ./images/

COLMAP 会输出工程文件夹(通常包含 database.dbimages/ 文件夹,以及含重建数据的 sparse/ 目录)。完成后你将得到:

  • 场景的稀疏点云
  • 所有图像的相机位姿数据

这些信息将输入 3DGUT 进行三维重建(步骤 3)。


步骤 3:使用 3DGUT 训练稠密重建并导出 USD

接下来是关键一步:使用 3DGUT 算法,将稀疏模型与图像转为稠密、照片级的三维场景。

配置 3DGUT 环境

3DGUT 仓库要求:LinuxCUDA 11.8GCC ≤ 11NVIDIA GPU 。官方代码见 GitHub:nv-tlabs/3dgrut,请按说明安装依赖库。

克隆 3DGUT 仓库

bash 复制代码
git clone --recursive https://github.com/nv-tlabs/3dgrut.git
cd 3dgrut
chmod +x install_env.sh
./install_env.sh 3dgrut
conda activate 3dgrut

继续前建议在仓库内对示例数据集跑一次测试重建,确认环境正常。

准备 COLMAP 输出

确认步骤 2 生成的 COLMAP 输出目录 路径。本例使用配置 apps/colmap_3dgut_mcmc.yaml ,因其将 3DGUT 与 MCMC(马尔可夫链蒙特卡洛)致密化策略结合:在重建不确定区域采样并致密化高斯,使薄结构与边缘更锐利,整体保真度更好;相对基线配置,训练时间增加通常适度。

运行训练并导出 USDZ

激活环境后,使用提供的 train.py 与 COLMAP 配置启动训练,例如:

bash 复制代码
conda activate 3dgrut
python train.py --config-name apps/colmap_3dgut_mcmc.yaml \
    path=/path/to/colmap/ \
    out_dir=/path/to/out/ \
    experiment_name=3dgut_mcmc \
    export_usdz.enabled=true \
    export_usdz.apply_normalizing_transform=true

训练开始后,3DGUT 会读取图像与 COLMAP 数据并优化三维表示。耗时取决于场景规模与 GPU:小场景可能数分钟,非常复杂、细节多的场景可达数小时。

完成后应得到场景的稠密重建 ;输出包含模型检查点目录。设置以下标志还会生成 USDZ

  • export_usdz.enabled=true :写入重建场景的 USDZ,可直接载入 Isaac Sim。
  • export_usdz.apply_normalizing_transform=true :应用基础归一化(将场景大致平移到原点附近并缩放)。不保证 地面精确在 z = 0 。在 Isaac Sim 中可添加 Ground Plane 或对场景根节点平移/旋转以对齐。

将重建导出为 USD 后,可与 Isaac Sim 即插即用。生成的 USDZ 使用自定义 USD schema ,本质上是打包的 USD 场景,内含三维重建的全部高斯泼溅数据。标准化 schema 在 AOUSD 中仍在讨论。

原文笔误说明 :个别英文原文将 normalizing 误写为 normalizaing,上表与命令中已按正确拼写 apply_normalizing_transform 书写。


步骤 4:在 Isaac Sim 中部署重建场景并添加机器人

真实世界场景已重建为 USD,可用于 Isaac Sim 训练与测试虚拟机器人。

1. 启动 Isaac Sim

使用 Isaac Sim 5.0 或更高版本 (支持 NuRec/3DGUT 相关能力)。打开后从空 Stage 开始:File > New

2. 导入 USD 场景

菜单 File > Import ,选择场景的 USDZ 文件;也可从 Isaac Sim 内容浏览器将 USDZ 拖入场景。载入后,视口中应出现重建环境,表现为彩色点或高斯集合;通过相机观察时可能近乎照片级三维效果。

提示 :使用 Isaac Sim 导航(WASD 或右键拖拽)在场景中飞行检视。

3. 添加地面平面以支持物理

重建场景仅为视觉几何 (来自 3DGUT 的点/体素),无内置碰撞 。要让机器人移动,需添加地面平面 作为支撑:Create > Physics > Ground Plane 。通常会在 z = 0 出现覆盖地面的平面;可按需缩放(例如 Video 1 中 x、y 缩放到 100)。通过 Translate / Rotate / Scale 与重建地面大致对齐。

接着连接 代理网格(proxy mesh) 以接收阴影:代理网格是简单替身,通过提供受光表面使物体在视觉上"落"在场景中。地面平面即该网格。连接方式:

  • 选中 NuRec prim(全局 xform 下的 volume prim)。
  • Raw USD Properties 面板找到 NuRec/Volume 区块的 Proxy 字段。
  • 点击 + 添加代理网格 prim。
  • 再次选中地面平面,确保 Geometry > Matte Object 已开启。

视频 1:如何在导入 Isaac Sim 时为渲染场景添加地面网格与物理

4. 从 Isaac Sim 资源库插入机器人

Isaac Sim 包含许多 SimReady 机器人模型。菜单 Create > Robots 选择机器人,例如流行的 Franka Emika Panda 机械臂;也可选移动机器人如 Leatherback / Carter / TurtleBot,或人形机器人(视库中可用资源而定)。

选中后会加入场景,用 移动/旋转 工具将机器人摆放到重建场景中合适位置。

5. 点击 Play

此时机器人应处于照片级三维场景中。若为机械臂,可制作动画或运行强化学习等------按你的用例而定。真实环境已进入 Isaac Sim 后,可像其他仿真环境一样使用。


这一简洁的 真实→仿真(real-to-sim) 工作流,把日常 iPhone 照片变为可交互、可供机器人使用的场景:拍摄 → COLMAP → 3DGUT 重建 → 导出 USDZ → 载入 NVIDIA Isaac Sim。它用可复现的路径替代冗长的摄影测量迭代,便于快速构建可驱动、可规划、可测试的数字孪生。

准备动手?

  • 直接打开现成场景 :从 Hugging Face 的 NVIDIA Physical AI 合集获取 NuRec 示例,在 Isaac Sim 中打开。
  • 参考真实→仿真流程 :结合 Isaac Sim、Isaac ROS、3DGUT、cuSFM、nvBlox、FoundationStereo 构建机器人开发用逼真三维环境,可遵循 双目相机数据重建场景 的步骤。
  • 生成合成数据 :将重建导入 Isaac Sim,添加 SimReady 资产,用 MobilityGen 生成合成数据,并用 NVIDIA Cosmos 增强数据,参见 用 NVIDIA Isaac Sim 构建合成数据流水线以训练更智能的机器人

文章来自:https://developer.nvidia.com/blog/reconstruct-a-scene-in-nvidia-isaac-sim-using-only-a-smartphone/

相关推荐
ofoxcoding5 小时前
怎么用 API 搭一个 AI 客服机器人?从零到上线的完整方案
人工智能·ai·机器人
workflower5 小时前
影响用例书写格式的因素
人工智能·机器人·集成测试·ai编程·软件需求
ofoxcoding6 小时前
怎么用 API 搭一个 AI 客服机器人?从零到上线的完整方案 [特殊字符]
人工智能·ai·机器人
biubiuibiu7 小时前
工业机器人编程语言详解:多样化选择与应用
fpga开发·机器人
彭波3967 小时前
听歌软件下载!全网音乐随便听!手机电脑+电视端!音乐播放器推荐
android·智能手机·音频·开源软件·娱乐·软件需求
出门吃三碗饭8 小时前
3DGS如何提升面向仿真的三维高斯重建质量
3d·机器人
PNP Robotics8 小时前
PNP机器人亮相第二届机器人灵巧手国际创新大会
人工智能·学习·机器人·开源
xwz小王子9 小时前
Science Advances发表软体机器人操控最新成果
机器人
badhope15 小时前
Mobile-Skills:移动端技能可视化的创新实践
开发语言·人工智能·git·智能手机·github