HY-World 2.0 轨迹规划WorldNav实现原理:VLM+NavMesh+SAM3如何规划避障相机路径 HY-World 2.0 轨迹规划WorldNav实现原理VLMNavMeshSAM3如何规划避障相机路径【免费下载链接】HY-World-2.0HY-World 2.0: A Multi-Modal World Model for Reconstructing, Generating, and Simulating 3D Worlds项目地址: https://gitcode.com/gh_mirrors/hy/HY-World-2.0WorldNav 是 HY-World 2.0 多模态世界模型中负责轨迹规划的核心模块它接收一张全景图借助 VLM 识别导航地标、SAM3 做实例分割定位、NavMesh 构建可通行网格最终自动规划出避障相机路径让生成的 3D 世界真正可走进、可探索。本文带你看懂这三者如何分工协作以及每一层背后关键的实现技巧 WorldNav 在 HY-World 2.0 管线中的位置HY-World 2.0 的世界生成由四个阶段串联全景生成HY-Pano 2.0→轨迹规划WorldNav→ 世界扩展WorldStereo 2.0→ 世界组合WorldMirror 2.0 3DGS 训练。WorldNav 的产物不是视频而是一组带位姿的相机轨迹——后续所有渲染、建模都沿着这些轨迹进行。WorldNav 的难点在于它必须同时回答三个问题看什么场景里哪些物体值得绕着拍语义哪里能走哪些地面可以站人、不能穿墙几何怎么走路径既避开障碍又保持平滑和多样性优化它的做法是三层分工VLM 管语义SAM3 管像素级定位NavMesh 管几何避障。下面逐层拆解。第一步VLM 识别导航地标主流程在 traj_generate.py 中启动。默认使用Qwen/Qwen3-VL-8B-Instruct模型名定义通过 vLLM 服务加载。关键在一份精心设计的导航提示词 get_navigation_instruction()只收竖着的导航线索树、柱子、雕像、围栏、桌椅、门、车辆、垃圾桶……明确排除干扰项地面、天花板、天空、远景山脉等不构成垂直障碍的元素输出格式强约束短词 JSON 列表、不带形容词、不重复描述相似物体拿到列表后deduplicate_ordered() 再兜底过滤 floor / ceiling / sky / wall 等词保证 VLM 即使说多了也不会把地板当成障碍物。第二步SAM3 实例分割 3D 定位VLM 只给出有哪些物体的文本SAM3 则负责把它们落到像素上。SAM3 加载 后按批次SAM_BATCH_SIZE 4做文本引导分割分割主循环 对每个词找出所有实例掩码。掩码要过三道关卡过滤逻辑垂直方向越出全景中部区域 → 丢弃横向宽度超过全景 75% → 大概率误检丢弃与已选掩码重叠超过 50% → 去重丢弃通过筛选的掩码会被定位到 3Dfind_robust_center() 只取深度值落在 25~75 分位之间的像素求质心再用深度中位数沿射线反投影出中心点避免深度噪声把树的中心算到天空上。最终每个障碍物都带上一份完整档案标签、3D 中心点、尺度、深度距离、朝向Front / Right / Left / Back写入target_camera.json供下一步规划使用。第三步NavMesh 构建可通行区域NavMesh导航网格来自 Recast 库代码位于 third_party/navmesh/。构建入口是 process_single_scene()有四个值得注意的细节自适应机器人参数先对原点向下打一组射线估计相机离地高度裁剪到 0.2~0.78m再按比例推导出机器人高度、半径与最大攀爬高度——不同场景自动适配参数自适应调用 Recast 生成网格build_navmesh_from_mesh()cellSize、maxSlope 等参数决定哪些面走得上、走不上后处理过滤过高的屋顶面、把断裂的岛屿用桥面连接起来connect_navmesh_components()、只保留最大连通块防穿地向下射线把导航顶点吸附到真实地面上方 5cm再做三角面级抗裁剪snap_navmesh_to_surface()第四步Dijkstra 规划四类避障轨迹构建网格只是地图NavMeshGraph 才是导航引擎把网格表面按 5cm 间距密集采样成节点图KDTree 找邻居、限制相邻点高度差然后从原点做一遍全局 Dijkstracompute_dijkstra()拿到到任何节点的最短距离这张底牌。在此基础上生成四类轨迹规划主逻辑轨迹类型作用核心思路探索看全景8 方向扇区各取最远可达点explore_agents()目标走向地标在障碍物周围选视线清晰的绕行点评分以视线无遮挡为主环绕绕物拍一圈目标周边生成弧形路径两端分别接入最短路重建补拍远景对远景拉伸区规划近→远两段路径其中视线检查是避障的关键在候选点与目标之间采样 50 个位置逐一向下打射线判断地面是否被遮挡遮挡比例直接计入评分——路径不仅绕得开还要看得清。轨迹平滑与去重筛选原始路径是折线process_trajectories() 会做 B 样条拟合起点权重放大保证贴合对重建轨迹还会剔除反向运动超过 120° 的片段、过滤俯仰角过大的帧最后均匀采样并构造 4×4 相机位姿矩阵。多条候选轨迹之间还要去重保多样filter_and_select_diverse_trajectories()先按几何重叠度剔除冗余再贪心保留方向差异大于 45° 的轨迹保证最终生成的多条相机路径彼此多样而不重复。输出与可视化四类轨迹会分别导出paths.json坐标序列、vis_mesh.ply网格 彩色路径的三维可视化、map.png俯视导航图灰色网格 彩色路径 目标点另有metadata.json与重建目标对文件方便你逐条检查规划结果save_artifacts()。快速上手两步跑通 WorldNav 轨迹规划# 1. 编译 Recast 扩展 cd hyworld2/worldgen/third_party/navmesh python setup.py build_ext --inplace # 2. 生成导航轨迹 python hyworld2/worldgen/traj_generate.py \ --target_path examples/worldgen/case000 \ --apply_nav_traj常用参数参数定义--apply_nav_traj启用 WorldNav 导航轨迹必开--obs_iteration_limit障碍物避让的最大迭代次数默认 3--llm_addr/--llm_port/--llm_nameVLM 服务器地址与模型结果会写入render_results/下的 exploration / target / surround / reconstruct 四个子目录打开map.png即可直观看到避障效果。总结WorldNav 的精髓在于把相机别穿墙拆成三层可解释的子问题VLM 用自然语言语义找目标SAM3 把目标钉到像素和 3D 空间NavMesh 用图算法解决地面、坡度与视线。每层都有独立的 JSON 与可视化产物出问题时能精确地知道是语义找错了还是路径算歪了——这正是模块化架构在 3D 世界生成中的价值所在。【免费下载链接】HY-World-2.0HY-World 2.0: A Multi-Modal World Model for Reconstructing, Generating, and Simulating 3D Worlds项目地址: https://gitcode.com/gh_mirrors/hy/HY-World-2.0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考