1. 位置空间还是速度空间
RVO2、HRVO、RVO_Py_MAS、rl_rvo_nav 都把问题转成“哪些速度会导致未来碰撞”。NavMesh 主要先回答“哪里能走”。采样学习版虽然是评分,但最关键的预测碰撞项也已经进入速度空间。
当前阶段先忽略复杂玩法状态,只压测局部避障算法在理想和极端条件下的表现。主线收束为两项:RVO2 原版作为成熟 ORCA 基准,基于 RVO2 思想的自研版作为项目可控方案。
如果当前目标是忽略实际玩法状态,只验证理想与极端条件下的局部避障性能,那么建议压测对象收束为: RVO2 原版 和 基于 RVO2 思想的自研版。RVO2 是稳定基准,自研版负责验证项目可控性、可调参空间和性能上限。
| 环境 | 必须输出 | 不要做 | 推荐实现 |
|---|---|---|---|
| Unity 编辑器 | 算法、场景、数量、分辨率、平均 FPS、1% Low、模拟耗时、最大耗时、GC、XZ/3D 重叠对。 | 不要每帧 `Debug.Log`,不要在热路径拼接字符串,不要每帧写文件。 | 内存环形缓冲 + 固定间隔采样;单轮结束后一次性导出 CSV/JSON,并在 Console 只打印摘要。 |
| 百元机真机 | 同一套指标,加设备型号、Unity 图形 API、目标帧率、分辨率 1080x1920、温度/降频观察备注。 | 不要开详细 HUD、不要高频日志、不要连接调试器长期采样导致额外开销。 | Release/Development 分开测;真机默认静默聚合,测试结束或手动按钮导出日志文件。 |
| 性能公平性 | 日志开销要对两个算法一致,最好能统计采样写入耗时。 | 不要让某个算法额外输出调试明细,导致对比不公平。 | 所有算法只写结构化数值样本,统一由 benchmark runner 收集和导出。 |
如果当前阶段只做算法压测,RVO2 原版 + RVO2 思想自研版 就是最小有效对照组。 其他方案暂时不必进入压测主线,可以作为解释来源或后续扩展参考。
| 方案 | 核心抽象 | 最终如何选速度 | 安全性来源 | 最擅长 | 主要风险 | FishROV 定位 |
|---|---|---|---|---|---|---|
| RVO2 / ORCA | 速度空间半平面约束 把每个邻居变成 ORCA 线性约束。 |
在所有安全半平面内,求最接近期望速度的新速度。 | 显式几何约束和低维优化,理论性最强。 | 大规模多动态 agent 的实时局部避障。 | 不做全局规划,2D 投影,参数不当会保守、停滞或碰撞。 | 最适合作为局部避障工程基准和对照组。 |
| HRVO | 速度空间混合 VO/RVO 把 VO 与 RVO 的几何边界混合。 |
排除危险速度,再选择接近期望速度且更稳定的速度。 | 速度障碍几何,加上减少 reciprocal 振荡的边界设计。 | 对称对冲、互相避让时减少左右横跳。 | 仍是局部 2D 方法,不处理地图和动力学约束。 | 适合作为处理振荡问题的设计参考。 |
| RVO_Py_MAS | 速度空间采样过滤 把动态体和静态障碍都转成速度禁区。 |
采样候选速度,先过滤禁区,有安全速度就选最接近期望速度的;没有安全速度则选折中。 | 禁区过滤加碰撞时间折中,不是严格 ORCA 求解。 | 学习 RVO 建模方式,快速改造原型。 | 没有空间索引时规模变贵,采样可能错过好速度。 | 适合作为可读的 RVO 原理参考,不建议直接当大规模生产方案。 |
| 采样避障学习版 | 候选速度评分函数 候选速度由期望速度、偏转、减速、停止等组成。 |
对每个候选速度计算目标偏差、平滑、预测碰撞、当前重叠、边界等惩罚,选最低分。 | 启发式风险函数和权重调参,不保证无碰撞。 | 项目内自研、调参、验证新评分项。 | 权重依赖场景,高密度可能局部最优或卡住。 | 最适合作为 FishROV 自研避障算法的实验骨架。 |
| rl_rvo_nav | 学习策略RVO 先验 把 VO/RVO 风险编码进状态和奖励。 |
PPO actor 根据自身状态和 VO/RVO 序列输出速度增量。 | 训练经验、RVO 区域奖励、预计碰撞时间塑形。 | 复杂多机器人场景下学习更灵活的风险权衡。 | 训练成本高,泛化依赖仿真覆盖,工程可控性较弱。 | 建议先吸收风险表达和 reward/score 思想,不急着引入完整 RL 链路。 |
| Unity NavMeshAgent | 导航网格路径跟随 先理解哪里能走,再沿路径局部避让。 |
在 NavMesh 上规划路径,沿拐点移动,同时使用内置局部避让。 | 全局可达性、路径搜索、内置工程避让。 | 静态地图、走廊、房间、地形导航。 | 局部避障不是核心强项,高密度动态体易抖,主要是平面系统。 | 适合作为全局路径层或工程对照,不适合作为鱼群局部避障核心。 |
RVO2、HRVO、RVO_Py_MAS、rl_rvo_nav 都把问题转成“哪些速度会导致未来碰撞”。NavMesh 主要先回答“哪里能走”。采样学习版虽然是评分,但最关键的预测碰撞项也已经进入速度空间。
ORCA 是约束求解,危险速度直接被半平面排除。RVO_Py_MAS 是采样后过滤禁区。采样学习版是给风险加惩罚,危险速度未必完全禁止。RL 是把风险变成训练信号。
VO 偏“我躲别人”;RVO/ORCA 假设双方共同承担;HRVO 在 reciprocal 基础上减少来回换边。NavMesh 用优先级处理谁让路。采样版需要靠评分项或通行偏置来塑造行为。
NavMesh 有全局可达性和路径图。其他方案基本只处理局部邻居,不知道死胡同、洞穴、任务顺序和远期收益。因此 FishROV 最可能需要“全局/中层路径 + 局部避障 + 运动控制”的分层结构。
RVO2 理论清晰但实现复杂。采样学习版最容易改权重和新增评分项。RVO_Py_MAS最适合读懂速度障碍。RL 灵活但可解释性和复现实验成本更高。NavMesh 是工程黑盒较多的成熟系统。
这些方案多数原生是 2D 或平面导航。FishROV 里如果只看 XZ,会把不同高度层的对象误判为冲突,也可能漏掉真实 3D 体积风险。核心决策必须明确水平避障、高度分层和体积碰撞的关系。
把 RVO2 / ORCA 当成标准基线,确认理想、拥挤、对冲、初始重叠等场景下的耗时和重叠率。
自研版可以先吸收 RVO2 的速度空间思想,但保留可调评分、鱼群权重和性能优化入口。
NavMesh、HRVO、RL-RVO 暂时不用进主压测。先把两条主线测准,再决定是否补防振荡或全局可达性。
依据文档:rvo2-core-principles.md、unity-navmesh-core-principles.md、sampling-local-avoidance-core-principles.md、hrvo-core-principles.md、rvo-py-mas-core-principles.md、rl-rvo-nav-core-principles.md。