[论文阅读笔记] Reciprocal n-body Collision Avoidance(ORCA/RVO2)

2023-05-16

[论文阅读] Reciprocal n-body Collision Avoidance(ORCA/RVO2)

文章目录

  • [论文阅读] Reciprocal n-body Collision Avoidance(ORCA/RVO2)
    • 论文地址
    • Introduction
    • Previous Work
    • Problem Definition
    • Reciprocal Collision Avoidance
    • n-Body Collision Avoidance
    • Experimental Results
    • 收获

论文地址

Optimal Reciprocal Collision Avoidance (ORCA) (unc.edu)

Introduction

本文讨论多个agent相互避障的方法(agent与agent之间,而非agent与障碍物之间避障),并提出ORCA-即最优的多体碰撞回避算法。每个agent为了避障,速度空间中有一些部分是不可选的,通过解线性规划为每个agent选出当前的最优速度(每个agent的计算可并行),假设每个agent完全清楚其他agent的速度。在人群密度高的情况下,线性规划可能没有解,此时通过三维线性方程选择“最安全的速度”。

Previous Work

  • VO

    1998年P. Fiorini, Z. Shiller. Motion planning in dynamic environments using Velocity Obstacles,不可达区域是圆锥形的;两个moving agent相互避障,避障路径容易产生抖动oscillate

  • RVO

    2008年gamma :Reciprocal Velocity Obstacles for Real-Time Multi-Agent Navigation (unc.edu),agent在避障时,假设对方也会使用RVO,而非保持原来的速度矢量匀速运动,即二人共同避障,从而解决VO的抖动问题;但RVO避障时所有agent都假设对方只考虑自己,在特定情境下(比如二对一相向)还是会产生抖动

  • ORCA

    优化VO模型,不再采用锥形,而是使用有向平面来分隔空间

具体的分析可以看:

论文笔记《Reciprocal Velocity Obstacles for Real-Time Multi-Agent Navigation》 | 陪你度过漫长岁月 (meltycriss.com)

Problem Definition

数学化、形式化地定义了“Reciprocal n-body Collision Avoidance”问题。并作假设:

每个agent的当前位置、当前速度、半径属于外部变量,可以被其他agent观测到;最大速度、偏好速度(如当前位置到目标的连线)属于内部变量,无法被其他agent观测到。

Reciprocal Collision Avoidance

定义和求解ORCA。

一个agentA对agentB的可行速度空间: V B V_B VB V O A ∣ B t VO_{A|B}^t VOABt的minkowski空间和

ORCA:选包含最多与 v A o p t v_A^{opt} vAopt接近的速度的集合(半平面)

ORCA论文解读 - 知乎 (zhihu.com)

证明:论文笔记《Reciprocal n-body Collision Avoidance》 | 陪你度过漫长岁月 (meltycriss.com)

n-Body Collision Avoidance

ORCA怎么应用在实际人群仿真中。

对于每一个其他agent,分别计算与其避障的ORCA半平面,联立r=最大速度的圆形约束,通过解线性规划问题获取当前agent的可选择速度空间。在可选择速度空间中,选择与偏好速度最近的,然后更新位置。

( v A m a x + v B m a x ) t (v_A^{max}+v_B^{max})t (vAmax+vBmax)t 之外的agent可以认为绝对不会碰撞,不需要计算其ORCA。查找需要计算的ORCA可以使用KD-tree。

解线性规划时算法使用 M. de Berg, O. Cheong, M. van Kreveld, M. Overmars. Computational Geometry: Algorithms and Applications. Springer-Verlag, 2008中的方法,时间复杂度O(N),N为方程数目。

  • 如何选择 v A o p t v_A^{opt} vAopt

    1. v A o p t = 0 v_A^{opt}=0 vAopt=0,那么可行速度空间一定有解,但是这样只考虑了其他agent的位置,没有考虑其他agent的速度,在人群密度高的情况下容易deadlock
    2. v A o p t = v A p r e f v_A^{opt}=v_A^{pref} vAopt=vApref,在人群密度比较低的情况下,会工作的很好。 但是稠密环境下容易无解,因为agent速度一般比较大;而且其他agent的偏好速度在假设中属于内部变量
    3. $ v_A^{opt}=v_A$,设置最优速度等于当前速度,是前两者的一个折中,当前速度根据情形自动适配的,也有可能无解
  • ORCA线性规划无解的情况:dense situation

    选择的新速度是在同时与多个ORCA半平面的欧式距离最大化时的速度中,选择一个长度最短的速度。这种情况下,和 v A o p t v_A^{opt} vAopt没有什么关系,agent“goes with the flow”

  • 关于静态障碍

    对于静态的障碍物,我们设置 v A o p t = 0 v_A^{opt}=0 vAopt=0 ,这可以保证总存在一个有效的速度使得机器人可以在 t 时间内避开障碍物。对于障碍物的t一般设置的比对于agent的t小,所以为了避障,agent会“更加敢”靠近障碍物。

Experimental Results

1000agent圆环经过圆心交换到对面;撤离办公室(类迷宫)

OpenMP多线程并行计算 2.66GHZ intel XEON

迷宫场景-5000人8核,125FPS解线性规划;64FPS update

(迷宫场景使用的framework也是gamma的,ClearPath:Highly parallel collision avoidance for multi-agent simulation,主要idea似乎是RVO+并行)

收获

  • 形式化的数学表述

  • 严谨的论文阐述过程:定义的提出、推广、实现……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[论文阅读笔记] Reciprocal n-body Collision Avoidance(ORCA/RVO2) 的相关文章

  • Request Body数据读取

    拦截器要读取request body数据的话需要注意一个问题 xff0c 一旦拦截器把数据流从request读取出来后 xff0c 后区的接口层就拿不到数据了 xff0c 因为流是一次性的 xff0c 那么要解决这个问题 xff0c 我们就
  • HttpServletRequest获取body && 使用 @RequestBody 获取body

    直接从HttpServletRequest的Reader流中获取请求body参数 span class token annotation punctuation 64 RequestMapping span span class token
  • HttpRunner 报告中,请求参数req_body中文乱码

    解决方法 xff1a 修改 httprunner client py中如下代码
  • FrankMocap:A Monocular 3D Whole-Body Pose Estimation System via Regression and Integration 2021阅读理解

    ICCV Workshop 2021 Facebook AI research Btw why the name FrankMocap Our pipeline to integrate body and hand modules remi
  • PX4 avoidance ROS仿真之——使用自定义的飞机模型

    运行自己的飞机模型主要需解决的问题 飞机模型的stereo相机话题 当你的飞机模型中包含了双目相机时 xff0c 需要运行一个ROS的node xff0c 将下面内容添加到posix sitl launch文件中 xff1a lt span
  • 球体-球体碰撞检测->反应

    我需要制定一种算法来检测两个球体何时发生碰撞 以及碰撞后瞬间的方向 假设 想象一下 当您在台球比赛中打开桌子时 所有球都 随机 地相互碰撞 因此 在开始自己编写代码之前 我在想是否已经有一个实现 提前谢谢 Cyas 碰撞部分很容易 检查球体
  • 检测两个div是否重叠[重复]

    这个问题在这里已经有答案了 可能的重复 jquery如何检测两个div是否接触 我花了很多时间试图弄清楚如何检测两个 div 是否重叠 我尝试了 gamequery 插件并像这样使用它 checkform collision checkfo
  • 查找圆与矩形碰撞的碰撞边时出现问题

    我发现了一个非常适合检测圆形和矩形之间的碰撞以及找到接触点的函数 然后 我使用该点来确定圆击中矩形的哪一侧 以便我可以反映圆 但是 当圆心位于矩形内部时 该函数会将最近的点作为圆心 并将其处理为击中顶点而不是边 这是我的代码 def col
  • 哈希和盐的碰撞

    我记得一个人告诉我 如果我让他更改 4 个字节 他可以使文件具有他想要的任何校验和 CRC 32 我听说过给哈希盐加盐 我想知道是否有人让他的文件与我的文件相匹配 会对 MD5 或 SHA 1 哈希加盐以更改结果 以便两个文件不再发生冲突
  • C# 面板因碰撞而移动

    我是 C 和 Winforms 的新手 尝试制作一个移动面板 它应该向右移动直到窗口的尽头 然后向左移动 它应该从一侧弹到另一侧 但经过几个小时的尝试后 唯一发生的事情是它向左移动并停止了 使用此表单工具 Timer tmrMoveBox
  • JavaScript 凸面形状上的墙壁碰撞,卡在角落

    这是另一个问题的后续 如何处理玩家与墙角的碰撞 在给出的代码的启发下它的答案 我尝试编写一些新代码 基本上 在原版中 墙壁滑动在墙壁内部效果很好 但我想让它在外部也起作用 所以我根据他的技术制作了一个新的基本代码引擎 var aD var
  • pygame精灵墙碰撞[重复]

    这个问题在这里已经有答案了 我正在用 python 和 pygame 开发一个平台游戏 完整代码可以在 https github com C Kimber FBLA Game 我遇到的问题是玩家精灵和墙壁精灵之间的碰撞 特别是角落 当玩家按
  • 2D 弹性球碰撞物理

    我正在制作一个涉及弹性球物理学的程序 我已经计算出了与墙壁和静止物体碰撞的所有数学公式 但我无法弄清楚当两个移动的球碰撞时会发生什么 我有质量和速度 确切地说是 x 和 y 速度 但每个球的速度及其方向都可以 并且想要这些的公式 请记住 这
  • 有没有办法让两个触发游戏对象发生碰撞?

    这是一个 2D 游戏 我有一个可以发射触发射弹 带有触发碰撞器 的玩家和可以做同样事情的敌人 当玩家的射弹与敌人碰撞时 就会发生一些事情 反之亦然 然而 当玩家射弹和敌人射弹碰撞时 它们只是忽略碰撞 互相穿过 什么也没有发生 他们还有一个具
  • 时间校正 Verlet 积分和太大的时间步长

    我使用在这里找到的时间校正 Verlet 集成 http www gamedev net page resources technical math and physicals a simple time Corrected verlet
  • 越野车弹跳球

    我在处理中制作碰撞球草图时 遇到了一个奇怪的错误 尽管有从墙上弹起的条件 有些球粘在上面 我在这里找不到错误的根源 有人可以帮忙吗 我还意识到可能很少 很多 糟糕的编码实践 但我事先道歉 我在下面发布代码 1 主要 https pasteb
  • Unity 2D Trail 渲染器碰撞

    我制作 2D unity 游戏 但我面临着我的游戏所依赖的一个主要问题 我将一个轨迹渲染器组件附加到我的播放器上 我需要的是使渲染器成为一个碰撞器 充当网格碰撞器我只是不知道是否可以使碰撞器呈现 2D 轨迹渲染器的形状 我在谷歌上搜索过 但
  • WPF 路径冲突检测?

    I have two hexagon shapes
  • 执行卸载之前停止 Windows 服务

    我有一个安装程序 它安装了一些组件 包括 Windows 服务 安装后它将启动使用 CustomAction 安装到系统上的服务 当我卸载应用程序时出现问题 安装程序要求先关闭应用程序 然后再继续 我创建了一个将停止服务的自定义操作 并通过
  • md5 哈希冲突。

    如果从 1 数到 X 其中 X 是第一个与前一个数字发生 md5 冲突的数字 那么 X 是哪个数字 我想知道如果我使用 md5 作为序列号 在发生冲突之前我可以期望能够枚举多少个单元 Theoretically you can expect

随机推荐

  • 在STM32中使用printf()的方法(可直接复制粘贴)

    1 使用printf的方法 1 1 重定向 在使用printf之前添加重定向代码 xff1a span class token macro property span class token directive hash span span
  • 【字符串】字符串长度与字节长度

    字符串长度 xff1a 字符串在遇到 0 之前一共有几个字符 字节长度 字符串里出现的所有元素 例如 xff1a char str 61 123abc 0123 字符串长度 xff1a 6 字节长度 xff1a 11 PS xff1a 如果
  • C语言-字符串拼接(不用strcat函数)

    include lt stdio h gt int main char str1 100 char str2 100 int i 61 0 j 61 0 printf 34 请输入字符串1 xff1a n 34 gets str1 prin
  • Qt(十四)——实现机器人完整导航功能

    Qt xff08 十四 xff09 实现机器人完整导航功能 目录 1 ui 设计2 核心代码 1 ui 设计 2 核心代码
  • vector容器存放自定义数据类型及指针

    include lt iostream gt using namespace std include lt vector gt class person public person string a int b name a age b s
  • unreal 启动报错:运行引擎需要D3D11兼容GPU(功能级别11.0,着色器模型5.0)处理

    问题 AMD核显电脑 xff0c 突然有一天开机后显示器显示效果发白 xff0c 刚开始没在意 xff0c 后来某天想使用Unreal时发现启动不了了 xff0c 弹窗报错 xff1a 运行引擎需要D3D11兼容GPU xff08 功能级别
  • Win10 RealSense L515 ORBSLAM2 配置全攻略

    目录 背景简介Step 1 准备 SDKStep 2 连接设备Step 3 测试例程Step 4 配置环境Step 5 相机标定Step 6 编写入口Step 7 实地运行附录A xff1a 获取内参代码附录B xff1a yaml 参数文
  • rviz仿真底盘移动与云台击打

    rviz仿真底盘移动与云台击打 底盘与云台通过坐标轴来模拟 xff0c 目标方块与子弹可视化通过marker仿真 其中底盘与云台固连 xff0c 底盘xy方向移动云台会同步移动 xff0c 云台可进行pitch和yaw轴旋转 xff0c 通
  • 机器视觉中坐标系转换

    机器视觉 立体视觉等等方向常常涉及到四个坐标系 xff1a 世界坐标系 相机坐标系 图像坐标系 像素坐标系 整体预览如下 1 世界坐标系和相机坐标系 世界坐标系 xff0c 也称为测量坐标系 xff0c 它是一个三维直角坐标系 Xw Yw
  • 机械臂DH参数总结

    DH参数 DH参数 xff08 Denavit Hartenberg parameters xff09 是一个用四个参数表达两对关节连杆之间位置角度关系的机械臂数学模型和坐标系确定系统 DH选的四个参数都的含义如下 xff1a link l
  • 机器人正解和逆解

    正解FK 给定机器人各关节的角度 xff0c 计算出机器人末端的空间位置 逆解IK 已知机器人末端的位置和姿态 xff0c 计算机器人各关节的角度值 挖个坑待完善
  • LeetCode—232 用栈实现队列 Cpp&Python

    LeetCode 225 用队列实现栈 Cpp amp Python 一 方法与思路二 C 43 43 代码三 Python代码 一 方法与思路 使用栈实现队列的下列操作 xff1a push x 将一个元素放入队列的尾部 pop 从队列首
  • E: Unable to locate package解决办法

    问题 xff1a E Unable to locate package 解决 xff1a sudo apt span class token operator span get updade
  • Yolo框架简介

    YOLO xff08 You Only Look Once xff09 是一种基于深度神经网络的对象识别和定位算法 xff0c 其最大的特点是运行速度很快 xff0c 可以用于实时系统 现在YOLO已经发展到v4版本 论文地址 xff1a
  • Ubuntu下编辑权限只读文件的方法

    首先要注意的是只读文件一般都是系统文件 xff0c 或者软件配置文件 xff0c 修改时要尤其谨慎 本文提供两种方法 xff1a 方法一 首先安装一个插件 span class token function sudo span apt sp
  • Ros下Aruco模块的使用

    生成ARUCO ROS MARKER 链接 http chev me arucogen 首先启动ros roscore 打开相机节点 xff0c 在此提供usb相机与Realsense D435i的启动方法 xff1a roslaunch
  • 脚气、灰指甲治疗实验方案

    脚气 xff08 已临床实验 xff09 脚气 xff0c 又叫足廯 香港脚 糜烂性脚气 症状 xff1a 80 都是这种类型 常见于多汗人群 角质层被汗水浸软 xff0c 发白了以后 xff0c 走动不断摩擦表皮脱落 xff0c 露出鲜红
  • VS2015显示“正在从以下位置加载符号“的解决办法

    解决方法 xff1a VS 工具 选项 调试 符号 看到 MicroSoft符号服务器 xff0c 去掉方框中的 xff0c 确定即可 xff0c 之后就不会再调试时加载
  • 【面包】STM32学习笔记(二) --- USART 串口通信学习总结

    tip xff1a 如有错误 xff0c 希望指出 xff0c 非常感谢 xff01 目录 简介一 USART是什么 xff1f 二 问答通信方式1 USART和UART区别2 单工 半双工 全双工区别 三 代码实验1 说明2 代码初始化配
  • [论文阅读笔记] Reciprocal n-body Collision Avoidance(ORCA/RVO2)

    论文阅读 Reciprocal n body Collision Avoidance ORCA RVO2 文章目录 论文阅读 Reciprocal n body Collision Avoidance ORCA RVO2 论文地址Intro