为机器人仿真构建逼真的三维环境往往费时费力。如今借助 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 Camera 、Halide 、ProCamera 、ProCam 8 、Moment Pro Camera 、Lightroom 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 ,请选择 pinhole 或 simple 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.db、images/ 文件夹,以及含重建数据的 sparse/ 目录)。完成后你将得到:
- 场景的稀疏点云
- 所有图像的相机位姿数据
这些信息将输入 3DGUT 进行三维重建(步骤 3)。
步骤 3:使用 3DGUT 训练稠密重建并导出 USD
接下来是关键一步:使用 3DGUT 算法,将稀疏模型与图像转为稠密、照片级的三维场景。
配置 3DGUT 环境
3DGUT 仓库要求:Linux 、CUDA 11.8 、GCC ≤ 11 与 NVIDIA 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/