场景创建与导入:地面、障碍物、AGV模型与物理属性设置

在Isaac Sim中构建AGV仿真环境,场景的创建与导入是后续路径规划、感知算法验证的基础。一个物理属性正确、视觉结构清晰的场景,能够显著减少仿真与真实环境之间的差距。本章将围绕地面、障碍物、AGV模型导入以及材质与物理属性设置四个核心环节展开,帮助您建立一套可复用、可扩展的场景搭建流程。

AGV仿真场景创建与导入流程 1. 地面创建 Plane + 物理材质 2. 障碍物导入 Prim / USD / 碰撞体 3. AGV模型导入 URDF / USD / 关节配置 4. 材质与物理 PhysX / 摩擦 / 质量 核心要素 视觉网格 | 碰撞近似 | 关节驱动 | 物理材质 | 刚体属性 常见问题 模型穿透 / 抖动 材质不生效 / 关节错位 调试手段 物理调试视图 碰撞形状可视化 最佳实践 简化碰撞体 统一单位与坐标系 流程顺序:地面 → 障碍物 → AGV → 材质/物理属性 → 验证 每个阶段均需在Stage面板中确认Prim路径与属性

4.1 地面创建:从Prim到物理材质

地面是AGV仿真场景中最基础的支撑元素。在Isaac Sim中,地面通常使用Plane Prim或Cube Prim拉伸生成。推荐使用Plane,因为它天然是无限平面,适合作为AGV行驶的基准面。创建地面时,需要同时考虑视觉表现和物理属性:视觉上,地面应有网格纹理或材质贴图,便于观察AGV运动轨迹;物理上,地面必须具有碰撞属性,否则AGV会直接穿透。

核心操作流程:

  1. 在Stage面板中点击Add → Physics → Plane,创建默认地面。
  2. 选中地面Prim,在Property面板中设置Physics → Collision → Collision Enabled为True。
  3. 为地面添加视觉材质:在Materials面板中创建OmniPBR材质,设置Base Color为浅灰色(如RGB 0.8, 0.8, 0.8),并添加网格纹理。
  4. 设置物理材质:在Physics → Material中创建PhysicsMaterial,设置静态摩擦系数(Static Friction)为0.8,动态摩擦系数(Dynamic Friction)为0.5,恢复系数(Restitution)为0.1。

地面物理材质的选择直接影响AGV的牵引力与制动效果。若摩擦系数过低,AGV在加速或刹车时会出现打滑;若过高,则可能引起轮胎磨损或电机过载。对于室内仓储场景,建议静态摩擦系数在0.6~1.0之间,动态摩擦系数在0.4~0.7之间。

参数推荐值影响
静态摩擦系数0.8决定AGV起步时的最大静摩擦力
动态摩擦系数0.5影响AGV匀速行驶时的阻力
恢复系数0.1控制AGV跌落或碰撞后的弹跳程度

4.2 障碍物导入:Prim、USD与碰撞体配置

障碍物是AGV路径规划中必须避让的静态或动态对象。Isaac Sim支持多种障碍物导入方式:直接创建Prim(如Cube、Cylinder)、导入外部USD文件、或从URDF中提取。无论哪种方式,障碍物都必须具备碰撞体(Collider)属性,否则路径规划算法无法感知其存在。

对于简单障碍物(如货架、立柱),推荐使用Prim创建并添加碰撞体。对于复杂障碍物(如货架组合、传送带),建议使用USD文件导入,以保留精细的视觉模型。导入后,需要检查碰撞体是否与视觉模型对齐——碰撞体可以比视觉模型略小,但不能明显大于视觉模型,否则会造成“虚拟碰撞”。

经验提醒:在创建障碍物时,建议将碰撞体形状简化为Box或Cylinder,避免使用三角网格碰撞体。三角网格碰撞体计算开销大,且容易在AGV高速行驶时产生穿透或抖动。例如,一个货架可以用一个Box碰撞体近似,尺寸略小于货架实际尺寸(如每边缩小2~3厘米),即可满足大多数路径规划需求。

4.3 AGV模型导入:URDF与USD的实战选择

AGV模型是仿真场景的核心。Isaac Sim支持两种主流导入方式:URDF(Unified Robot Description Format)和USD(Universal Scene Description)。URDF是ROS生态中常用的机器人描述格式,包含连杆、关节、视觉网格和碰撞网格;USD是NVIDIA推荐的场景描述格式,支持更丰富的物理属性和材质。

对于已有URDF模型的AGV,推荐使用Isaac Utils → URDF Importer导入。导入时需注意:

  • 确保URDF中的mesh路径正确,且单位一致(通常为米)。
  • 在导入设置中勾选Fix Base Link,将AGV底盘固定为base_link。
  • 导入后检查关节(Joint)是否完整,特别是驱动轮对应的continuous关节。

若使用USD格式,可直接通过File → Import导入。USD的优势在于可以保留Isaac Sim原生物理属性(如刚体质量、惯性张量),且加载速度更快。但USD文件通常较大,且不易修改关节参数,因此更适合使用官方提供的AGV模型或经过预处理的模型。

风险提示:URDF导入后,AGV的轮子可能无法正常旋转。这通常是因为URDF中的transmission标签未被正确解析。解决方法是:在导入后手动为驱动轮关节添加D6Joint或RevoluteJoint,并设置驱动模式为Velocity,同时指定目标速度。

4.4 材质与物理属性设置:从视觉到仿真一致性

材质与物理属性是连接视觉与仿真行为的桥梁。在Isaac Sim中,材质分为视觉材质(如OmniPBR、OmniSurface)和物理材质(如PhysicsMaterial)。视觉材质决定物体外观,物理材质决定物体交互行为。两者独立设置,但共同作用于仿真效果。

设置物理属性时,需要关注以下关键参数:

  • 质量(Mass):AGV整机质量影响加速度与制动距离。建议根据真实AGV参数设置,例如轻型AGV约50kg,重型AGV约200kg。
  • 惯性张量(Inertia Tensor):对于非对称模型,默认的惯性张量可能不准确。可在Physics → Rigid Body中手动计算或输入。
  • 碰撞形状(Collision Shape):AGV底盘建议使用Box或Convex Hull,轮子使用Cylinder或Sphere。
# 设置AGV刚体属性的Python示例
from omni.isaac.core.utils.stage import get_current_stage
from pxr import UsdPhysics, UsdShade

stage = get_current_stage()
agv_prim = stage.GetPrimAtPath("/World/AGV")
# 启用刚体
UsdPhysics.RigidBodyAPI.Apply(agv_prim)
# 设置质量
mass_api = UsdPhysics.MassAPI.Apply(agv_prim)
mass_api.CreateMassAttr().Set(120.0)
# 设置碰撞
UsdPhysics.CollisionAPI.Apply(agv_prim)

4.5 案例拆解:搭建一个带货架的AGV测试场景

下面通过一个完整案例,演示如何从零搭建一个包含地面、障碍物和AGV的测试场景。该场景用于验证AGV在货架间的路径规划能力。

场景需求:模拟一个10m×8m的仓库区域,包含4个货架(障碍物),AGV需要从起点A行驶到目标点B,避开货架。

操作步骤:

  1. 创建地面:使用Plane Prim,设置尺寸为10×8米(通过Scale调整),添加网格纹理和物理材质(摩擦系数0.7)。
  2. 创建货架:使用Cube Prim,每个货架尺寸为1.2m×0.8m×2m,放置在指定坐标(如(2,2,0)、(2,5,0)、(7,2,0)、(7,5,0))。为每个货架添加Box碰撞体。
  3. 导入AGV:使用URDF导入功能,选择AGV的URDF文件,设置base_link为底盘,检查轮子关节。
  4. 设置AGV物理属性:设置质量为80kg,轮子摩擦系数为0.9,底盘碰撞体为Box。
  5. 验证场景:点击Play运行仿真,观察AGV是否稳定站立在地面上,轮子是否正常旋转,货架是否阻挡AGV。

结果与复盘:首次运行时,发现AGV在起步时出现轻微打滑。分析原因是地面摩擦系数设置过低(0.5)。将地面静态摩擦系数调整为0.8后,打滑现象消失。另外,货架的碰撞体比视觉模型大了一圈,导致AGV在靠近货架时提前停止。将碰撞体尺寸缩小至视觉模型的95%后,路径规划更加顺畅。

案例经验总结:

  • 物理属性设置应基于真实AGV参数,而非随意取值。
  • 碰撞体应略小于视觉模型,避免“虚拟碰撞”影响路径规划。
  • 每次修改物理属性后,应重新运行仿真验证,观察AGV的运动行为是否符合预期。

4.6 常见误区与调试技巧

在场景创建过程中,以下误区需要特别注意:

  • 误区一:忽略碰撞体设置。只添加视觉模型而不添加碰撞体,导致AGV直接穿过障碍物。解决方法是检查每个障碍物Prim的Collision属性。
  • 误区二:单位不一致。URDF中模型使用毫米,而Isaac Sim默认使用米,导致模型过大或过小。导入前应统一单位。
  • 误区三:物理材质未生效。创建了PhysicsMaterial但未绑定到Prim上。需要在Physics → Material中点击Bind。

调试时,建议开启Physics → Debug → Collision Shapes可视化,查看碰撞体是否与视觉模型对齐。同时,使用Stage面板检查Prim路径,确保所有对象都在正确的层级下。

高效工作流建议:将常用的地面、货架、AGV模型保存为USD文件,放入Assets库中。下次创建场景时,直接拖拽复用,避免重复配置物理属性。同时,使用Stage面板的Layer功能,将地面、障碍物、AGV分别放在不同Layer中,便于独立编辑和调试。