FishROV Avoidance Benchmark

RVO2 基准与自研版压测收束

当前阶段先忽略复杂玩法状态,只压测局部避障算法在理想和极端条件下的表现。主线收束为两项:RVO2 原版作为成熟 ORCA 基准,基于 RVO2 思想的自研版作为项目可控方案。

压测结论

只测两条线就够

如果当前目标是忽略实际玩法状态,只验证理想与极端条件下的局部避障性能,那么建议压测对象收束为: RVO2 原版基于 RVO2 思想的自研版。RVO2 是稳定基准,自研版负责验证项目可控性、可调参空间和性能上限。

推荐压测口径

  1. 理想情况:空旷水域、均匀分布、目标方向一致或轻微交叉,验证基础吞吐和稳定收敛。
  2. 中等冲突:双向穿流、圆阵向心、随机目标切换,验证重叠率、抖动和换边稳定性。
  3. 极端情况:高密度聚集、初始重叠、狭窄通道、所有 agent 争同一目标点,验证退化行为。
  4. 规模阶梯:100、500、1000、3000、5000 agent,记录每帧耗时、最大耗时、重叠对、平均速度损失。
  5. 移动端口径:固定竖屏 1080x1920,编辑器和百元机使用相同分辨率、数量档、场景和采样窗口。
  6. 公平条件:相同半径、最大速度、timeStep、目标生成、积分方式、邻居查询范围和日志采样策略。

日志与真实性要求

环境 必须输出 不要做 推荐实现
Unity 编辑器 算法、场景、数量、分辨率、平均 FPS、1% Low、模拟耗时、最大耗时、GC、XZ/3D 重叠对。 不要每帧 `Debug.Log`,不要在热路径拼接字符串,不要每帧写文件。 内存环形缓冲 + 固定间隔采样;单轮结束后一次性导出 CSV/JSON,并在 Console 只打印摘要。
百元机真机 同一套指标,加设备型号、Unity 图形 API、目标帧率、分辨率 1080x1920、温度/降频观察备注。 不要开详细 HUD、不要高频日志、不要连接调试器长期采样导致额外开销。 Release/Development 分开测;真机默认静默聚合,测试结束或手动按钮导出日志文件。
性能公平性 日志开销要对两个算法一致,最好能统计采样写入耗时。 不要让某个算法额外输出调试明细,导致对比不公平。 所有算法只写结构化数值样本,统一由 benchmark runner 收集和导出。

一句话判断

如果当前阶段只做算法压测,RVO2 原版 + RVO2 思想自研版 就是最小有效对照组。 其他方案暂时不必进入压测主线,可以作为解释来源或后续扩展参考。

共同点

  • 大多数方案都需要上层提供目标或期望速度,然后再做局部修正。
  • 核心输入都离不开位置、速度、半径、邻居范围和预测时间。
  • 都在权衡两个目标:尽量接近期望运动,同时减少未来碰撞风险。
  • 除 NavMesh 外,大多数方案都不负责全局路径,不理解死胡同、任务顺序和长期收益。
  • 在 FishROV 的 3D/2.5D 场景里,多数方案仍需要明确如何处理 XZ 投影、高度层和真实体积冲突。

核心矩阵

方案 核心抽象 最终如何选速度 安全性来源 最擅长 主要风险 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 上规划路径,沿拐点移动,同时使用内置局部避让。 全局可达性、路径搜索、内置工程避让。 静态地图、走廊、房间、地形导航。 局部避障不是核心强项,高密度动态体易抖,主要是平面系统。 适合作为全局路径层或工程对照,不适合作为鱼群局部避障核心。

真正拉开差距的六个轴

1. 位置空间还是速度空间

RVO2、HRVO、RVO_Py_MAS、rl_rvo_nav 都把问题转成“哪些速度会导致未来碰撞”。NavMesh 主要先回答“哪里能走”。采样学习版虽然是评分,但最关键的预测碰撞项也已经进入速度空间。

2. 约束、过滤还是惩罚

ORCA 是约束求解,危险速度直接被半平面排除。RVO_Py_MAS 是采样后过滤禁区。采样学习版是给风险加惩罚,危险速度未必完全禁止。RL 是把风险变成训练信号。

3. 谁承担避让责任

VO 偏“我躲别人”;RVO/ORCA 假设双方共同承担;HRVO 在 reciprocal 基础上减少来回换边。NavMesh 用优先级处理谁让路。采样版需要靠评分项或通行偏置来塑造行为。

4. 是否理解地图

NavMesh 有全局可达性和路径图。其他方案基本只处理局部邻居,不知道死胡同、洞穴、任务顺序和远期收益。因此 FishROV 最可能需要“全局/中层路径 + 局部避障 + 运动控制”的分层结构。

5. 可解释性和可改性

RVO2 理论清晰但实现复杂。采样学习版最容易改权重和新增评分项。RVO_Py_MAS最适合读懂速度障碍。RL 灵活但可解释性和复现实验成本更高。NavMesh 是工程黑盒较多的成熟系统。

6. 2D 与 3D 的边界

这些方案多数原生是 2D 或平面导航。FishROV 里如果只看 XZ,会把不同高度层的对象误判为冲突,也可能漏掉真实 3D 体积风险。核心决策必须明确水平避障、高度分层和体积碰撞的关系。

工程选择倾向

理论安全约束
RVO2 / ORCA
HRVO
采样 / RL
可改可调
采样学习版
RVO_Py_MAS
NavMesh / RVO2
全局路径能力
NavMeshAgent
RVO 系列
采样 / RL

推荐读法

先压测 RVO2

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。