news 2026/10/1 14:49:32

HY-World 2.0 轨迹规划WorldNav实现原理:VLM+NavMesh+SAM3如何规划避障相机路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HY-World 2.0 轨迹规划WorldNav实现原理:VLM+NavMesh+SAM3如何规划避障相机路径

HY-World 2.0 轨迹规划WorldNav实现原理:VLM+NavMesh+SAM3如何规划避障相机路径

【免费下载链接】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

WorldNav 是 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% → 去重丢弃

通过筛选的掩码会被定位到 3D:find_robust_center() 只取深度值落在 25~75 分位之间的像素求质心,再用深度中位数沿射线反投影出中心点,避免深度噪声把"树"的中心算到天空上。

最终每个障碍物都带上一份完整档案:标签、3D 中心点、尺度、深度距离、朝向(Front / Right / Left / Back),写入target_camera.json,供下一步规划使用。

第三步:NavMesh 构建可通行区域

NavMesh(导航网格)来自 Recast 库,代码位于 third_party/navmesh/。构建入口是 process_single_scene(),有四个值得注意的细节:

  1. 自适应机器人参数:先对原点向下打一组射线估计相机离地高度(裁剪到 0.2~0.78m),再按比例推导出机器人高度、半径与最大攀爬高度——不同场景自动适配(参数自适应)
  2. 调用 Recast 生成网格(build_navmesh_from_mesh()):cellSize、maxSlope 等参数决定哪些面"走得上、走不上"
  3. 后处理:过滤过高的"屋顶面"、把断裂的岛屿用桥面连接起来(connect_navmesh_components())、只保留最大连通块
  4. 防穿地:向下射线把导航顶点吸附到真实地面上方 5cm,再做三角面级抗裁剪(snap_navmesh_to_surface())

第四步:Dijkstra 规划四类避障轨迹

构建网格只是"地图",NavMeshGraph 才是"导航引擎":把网格表面按 5cm 间距密集采样成节点图,KDTree 找邻居、限制相邻点高度差,然后从原点做一遍全局 Dijkstra(compute_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_name:VLM 服务器地址与模型

结果会写入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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 14:48:04

G120变频器DDS驱动数据组配置与切换实战指南

1. 从一台挤出机的调试现场说起:为什么DDS参数组值得单独拎出来讲第一次接触G120的DDS功能,是在一条挤出机生产线上。当时设备运行状态很稳定,但每次换模具、换配方,操作工都要在BOP面板上翻十几页参数,手动改一遍电机…

作者头像 李华
网站建设 2026/10/1 14:47:04

STM32F103开发板入门:从开箱到点灯到外设实战

买STM32F103开发板这件事,我在购物车里放了快两个月。原因和不少刚入门的朋友一样:一边听人说STM32是嵌入式入门必经之路,一边又听人说寄存器、标准库、HAL库、CubeMX这一堆词堆下来直接劝退。直到上周终于把这块几十块钱的stm32开发板买回来…

作者头像 李华
网站建设 2026/10/1 14:46:31

大规模环境监测中以太网温湿度变送器双协议批量配置方案

做环境监测这些年,经手的项目从几个测点到几百上千个测点,最大的感触是:传感器本身的精度问题往往不是最头疼的,真正决定项目交付效率的,反而是一堆以太网温湿度变送器的批量配置。一台台用浏览器登录Web页面改参数&am…

作者头像 李华
网站建设 2026/10/1 14:46:14

Visual Studio 2022 配置 ONNX Runtime 推理环境全指南

ONNX 模型在 Visual Studio 2022 里跑起来这件事,说难不难,说简单也有一堆细节等着踩。我这两年帮团队搭过好几套推理环境,从 Python 原型转到 C/C# 落地,几乎每次都会有人在环境配置这一步卡住——不是 NuGet 装错包,…

作者头像 李华