2. 场景构建基础

好,我们正式开始搭建仿真场景。这一章是地基,地基打不牢,后面传感器渲染和数据采集全都会跑偏。我个人习惯在动手前先把整个流程理一遍,你想想看,场景构建说白了就四步:把东西放进来、摆对位置、让它好看、让它能动。咱们一个一个来。

本章核心脉络:USD资产导入 → 坐标系对齐 → 变换操作 → 材质与光照 → 物理属性绑定。每一步都直接影响传感器数据的真实性。

场景构建基础 - 知识体系 场景构建基础流程 场景构建 导入USD资产 坐标系与变换 材质与光照 物理属性设置 File → Open Drag & Drop USD Composer Translate/Rotate/Scale 坐标系对齐 MDL材质 Dome Light Rect/Disk Light 碰撞体 刚体/关节 重力/摩擦力 提示:每一步都影响传感器数据的真实性

2.1 导入USD资产——把东西请进场景

Isaac Sim 原生支持 USD(Universal Scene Description)格式。你可以直接拖拽 .usd、.usda、.usdc 文件到 Viewport 窗口,或者用菜单栏 File → Open 打开。我建议你养成用 Content 面板 的习惯,它就像文件管理器,能预览缩略图,拖拽时还能选择导入方式。

我的经验:从 Omniverse 库拖资产时,优先选 "Add as Reference" 而不是 "Add as Payload"。Reference 会保留原始文件的链接,场景文件体积小,更新源文件时场景会自动同步。Payload 会把数据嵌入当前场景,适合离线打包。

导入后,你会在 Stage 面板看到资产层级。USD 的层级结构很像文件夹,每个 Prim(基本元素)都可以有子 Prim。比如一个机器人模型,根节点下会有 /robot/chassis、/robot/arm、/robot/sensor 等。

# 在 Stage 面板中典型的资产层级
/Robot
  /chassis
    /mesh_chassis
    /material_chassis
  /arm
    /joint_1
    /joint_2
  /sensor
    /camera_rgb
    /lidar_front

注意:导入的资产如果带有中文路径或特殊字符,Isaac Sim 有时会报错。我曾经因为这个排查了半天,后来把所有资产路径改成英文+下划线,问题就解决了。建议你从一开始就规范命名。

2.2 坐标系与变换——摆对位置是门学问

Isaac Sim 使用 右手坐标系,Y 轴向上。这和很多游戏引擎(比如 Unity 的 Y 轴向上)一致,但和 ROS 的 Z 轴向上不同。你导入的资产如果来自不同工具,坐标系可能不匹配。

举个例子,我从 SolidWorks 导出的模型,默认 Z 轴向上。放进 Isaac Sim 后整个模型是躺着的。怎么办?

选中根 Prim,在 Transform 属性里调整旋转值:Rotation: (90, 0, 0) 就能把 Z-up 转成 Y-up。或者更省事,在导入时用 USD Composer 的 "Up Axis" 选项自动转换。

坐标系来源 向上轴 Isaac Sim 中修正方式
SolidWorks / CAD Z 轴 旋转 (90, 0, 0) 或导入时选 Y-up
Blender Z 轴 导出时选 Y-up,或导入后旋转
ROS / URDF Z 轴 使用 URDF 导入器自动转换
Unreal Engine Z 轴 导入后旋转 (90, 0, 0)

变换操作(Translate / Rotate / Scale)可以直接在 Viewport 用 Gizmo 拖拽,也可以在 Property 面板 输入精确数值。我个人习惯先用 Gizmo 粗调,再用数值精调。比如把传感器放在机器人顶部,我会先拖到大概位置,然后输入 Translate Z = 0.85 精确到厘米级。

关键点:变换是相对于父级 Prim 的。如果你移动了父节点,所有子节点会跟着动。所以规划层级时,把静态部分和动态部分分开,比如底盘是静态,机械臂关节是动态。

2.3 材质与光照基础——让场景"看起来"真实

材质和光照直接影响传感器渲染的质量。你想想看,如果材质颜色不对,RGB 相机采集的数据就是错的;如果光照太暗,深度相机可能产生大量噪点。

Isaac Sim 使用 MDL(Material Definition Language) 材质系统。选中一个 mesh,在 Material 面板 点击 "Create Material",选择预设材质,比如 OmniPBR(基于物理的渲染)。

常用的材质参数:

  • diffuse_color:漫反射颜色,决定物体本色
  • roughness:粗糙度,0 是镜面,1 是完全粗糙
  • metallic:金属度,0 是非金属,1 是金属
  • specular:高光强度

光照方面,我推荐用 Dome Light 做环境光,它用 HDR 贴图模拟真实天空。再加一个 Rect Light 做主光源,模拟太阳或室内顶灯。设置方法:

  1. 菜单 Create → Light → Dome Light
  2. 在 Property 面板加载一张 .hdr 贴图(Isaac Sim 自带了几张,在 /Isaac/Environments 下)
  3. 再创建 Rect Light,调整位置和强度(Intensity 建议从 500 开始试)

避坑指南:我曾经用了一张过曝的 HDR 贴图,结果深度相机采集的数据全是 0。后来发现是光照太强导致传感器饱和。建议你先用默认的 industrial_warehouse.hdr 测试,确认传感器正常后再换自定义贴图。

2.4 物理属性设置——让场景"动"起来

如果你的场景需要物体之间有碰撞、重力、关节运动,那就得设置物理属性。Isaac Sim 的物理引擎基于 PhysX,设置入口在 Physics 面板。

给物体添加物理属性的步骤:

  1. 选中 Prim,在 Property 面板 点击 Add Physics Properties
  2. 选择 Collision(碰撞体),让物体能被检测到
  3. 如果需要重力影响,添加 Rigid Body(刚体)
  4. 如果是关节,添加 Joint,比如 Revolute Joint(旋转关节)或 Prismatic Joint(滑动关节)

物理参数对比:

属性 作用 典型值
Collision 启用碰撞检测 默认开启
Rigid Body 受重力影响,可被推动 质量 1.0 kg
Revolute Joint 绕轴旋转(如车轮) 角度范围 -180~180
Prismatic Joint 沿轴滑动(如升降台) 行程范围 0~1.0 m
Friction 表面摩擦力 0.5(默认)

注意:物理属性设置后,一定要点击 Play 按钮启动仿真,才能看到效果。我见过不少新手设置完属性后干等,以为没生效。记住,Isaac Sim 是实时仿真,不点 Play 物理引擎不工作。