资讯动态

RVO2-CS 实战:三步跑通多智能体避障,定制 3 种进阶行为

发布时间:2026/9/11 1:21:19 来源:尧图企业网站定制
RVO2-CS 实战三步跑通多智能体避障定制 3 种进阶行为【免费下载链接】leaked-system-promptsCollection of leaked system prompts项目地址: https://gitcode.com/GitHub_Trending/le/leaked-system-prompts屏幕上挤满移动的小圆点它们要各自到达目标、彼此不撞、动作还不能僵硬这是做人群模拟和游戏 AI 迟早会撞上的问题。RVO2-CS 是 C# 实现的 ORCA最优互惠碰撞避免算法库面向多智能体实时避障每帧为每个智能体解一个小型线性规划并给出新速度。本文是读完源码后的实践记录从跑通示例到把决策规则换成自己的外加几条真实踩过的坑。初体验跑个示例看效果先给结论用 Visual Studio 打开方案10 分钟内就能看到效果CMake 路线更折腾非命令行党可以跳过。步骤只有三步拉代码git clone https://gitcode.com/GitHub_Trending/le/leaked-system-prompts选构建入口Windows 下直接打开仓库根的 RVOCS.slnx命令行党可用 CMakeLists.txt 生成工程或走 BUILD.bazel 用 Bazel 构建运行示例Circle/ 是圆形区域里的智能体混场演示Blocks/ 是带障碍方块的场景跑哪个都行效果就在渲染窗口里小圆圈是智能体伸出来的线段是速度向量。两个智能体迎面相遇时会各自偏转一点从侧面错车——这种每方各让一半的默契正是 ORCA 名字里互惠Reciprocal的含义。十五分钟读懂源码三个核心角色这个 C# 避障算法库的源码集中在 RVOCS/ 目录理清三个角色的职责分工就够用了仿真控制器 Simulator裁判。负责智能体与障碍物的增删、参数配置并推动整个世界前进一步。日常只用得上AddAgent()和DoStep()两个方法智能体 Agent决策者。位置、速度、半径、最大速度都挂在它身上这一帧往哪走、走多快也由它自己算出。核心看ComputeNeighbors()与ComputeNewVelocity()两处空间索引 KdTree检索员。用 kd 树把平面切块让邻居查找不必遍历全体智能体单帧开销的大头就取决于它每帧的调用链是固定的控制器经索引找邻居 → 每个智能体各自解 LP → 按新速度推进位置。记住这条链ORCA 源码解读的基本框架就搭好了。复现一个基础避障场景搭场景仿照 Circle 示例在一个圆形区域内放置智能体起点给在坐标原点附近。给目标preferred velocity期望速度表达的是想去哪、想跑多快它不是实际速度。实际速度会被邻居约束推着走期望速度却始终是你手里的那份意图。跑一帧仿真var sim Simulator.Instance; int a sim.AddAgent(new Vector2(0, 0)); sim.SetAgentPrefVelocity(a, new Vector2(1, 0)); sim.DoStep();这一帧DoStep()里智能体身上依次发生四件事先以约 15 米的半径调ComputeNeighbors()圈出附近的智能体与障碍物线段对每个邻居构造一个半平面约束——未来数秒内不与它相撞的速度集合把所有约束叠加成一个线性规划求解得到在全部约束里偏离期望速度最小的新速度最后用新速度积分出位置。所谓实时避障每帧干的就这一件事。三种进阶定制路线做多智能体避障定制前建议先回答想达成什么效果再决定改哪里别一上来就翻源码。想让智能体提前躲这条路线基本是调参最敏感的是两个timeHorizon前瞻时间碰撞预测看多远默认 5 秒。调大后智能体提前转向、动作更从容调得太小则会撞线才反应radius安全半径智能体自身的避让半径。想要更宽的安全距离就直接调它别用放大障碍线段这种绕路做法障碍物侧还有一组对应参数如 timeHorizonObstacle默认与智能体侧相同只想让智能体对静态障碍物多留余量时单独动这一组即可。想支持新形状的障碍物RVO2-CS 的原生障碍物表示是线段凸多边形就是一圈闭合的线段。所以支持新形状最便宜的做法是输入时分解把你的形状拆成线段集合注册进去多数非凸场景到此为止。分解不够用的场景比如想要自带表示的动态障碍扩展点在 Obstacle 类派生新类覆写它生成避让约束的那部分逻辑原版线段在此处把速度约束投影成半平面再在 Simulator 中注册新类型。注意约束接口是半平面——如果你的形状无法表示成半平面还是绕回分解思路。想用自己的决策规则入口在 Agent 的ComputeNewVelocity()。不建议整段推倒重写有三个不变量必须保住最终速度仍须满足全部半平面约束跳过这步等于主动恢复碰撞速度要钳制在 maxSpeed 之内互惠是 LP 求解的天然行为——每方各承担一半让行代价。改掉它大场景下的通行流量和拥堵形态都会变小规模测试看不出来比较稳的改法在解 LP 之前按自己的规则修正期望速度优先级让行、虚拟回避区、兴趣点吸引约束求解与速度钳制继续交给原逻辑。踩坑清单现象可能原因解法近距离频繁碰撞timeHorizon 偏小或时间步太大导致约束反应滞后加大 timeHorizon缩短DoStep()的步长默认 0.25 秒智能体上千后帧率明显下降邻居检索与 LP 求解开销随邻居数上升调小 maxNeighbors默认 10与 neighborDist默认 15 米检查 Simulator 里的工作线程配置窄道中抖动、来回摆前瞻时间太短约束逐帧剧烈变化加大 timeHorizon、保持步长恒定必要时对新速度做一帧平滑智能体卡在障碍物角落多边形线段未闭合或方向不一致凸多边形的线段链必须首尾相接、朝向一致收尾一句话总结先跑示例再看三个核心角色定制只认两个入口——ComputeNewVelocity()与障碍物约束其余都是调参。想继续深入doc/ 放着算法文档Circle/ 与 Blocks/ 两个示例则是最好用的调参试验场。【免费下载链接】leaked-system-promptsCollection of leaked system prompts项目地址: https://gitcode.com/GitHub_Trending/le/leaked-system-prompts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价