简介

在介绍VO,RVO之前,需要先介绍路径规划。

对Agent进行路径规划,实际上要完成的任务就是让Agent从点A无碰撞地移动到点B。而路径规划的过程是层次化的,其基本框架大致如下:

High level:

dijkstra等算法。

Low level: VO, RVO,

ORCA等底层避障算法。

很容易可以跟我们的日常生活进行类比,比如说我们要从学校的教学楼走到宿舍楼,那么以上框架对应的就是:

High level:

通过dijkstra算法,得到路径为: 教学楼→饭堂→体育馆→图书馆→宿舍楼。

Low level:

通过底层避障算法如VO,RVO,ORCA等底层避障算法,保证我们走的每一段路(e.g. 教学楼→饭堂),都不会跟别的同学发生碰撞。

VO和RVO就是经典的底层避障算法。其中VO是最经典的,RVO则在VO的基础上进行了一些改进,解决了VO抖动的问题。

VO(Velocity

Obstacle)

一句话总结VO的思路:只要在未来有可能会发生碰撞的速度,都排除在外。

为方便描述,以下都假设是在平面内,圆形物体之间的避障。

VO的直观理解

Q:

假设B静止,那么A取什么速度能够保证一定不会跟B发生碰撞呢?

A:

一种很粗暴的方法,就是把A化作质点,选择跟B¯B¯(扩展后的B)不相交的速度方向。以后只要在每个周期里面,都选择不在VO的速度,就能够保证不会碰撞。

以上就是VO的直观理解,需要注意的是:

VO是指速度方向与B¯B¯相交的部分,即会发生碰撞的部分(图中灰色斜线部分)。

VO是抱着宁杀错,不放过的思想,把所有未来有可能会发生碰撞的速度都放弃了。

实际上假如仅要求一定时间内不发生碰撞的话,有更多的速度可供选择,比如说上图中的(v′AvA′)。

VO的图示理解

有了直观理解之后就可以用更加严谨一点的数学语言图示VO了。

首先将直观理解中口语化的表达转换成对应的数学语言表示。

物体A(B):以pApA为圆心,rArA为半径的点集AA

假设B静止:A相对于B的速度,即相对速度vA−vBvA−vB

把A化作质点:求集合BB与集合−A−A的Minkowski

sum,即闵氏和,B⊕−AB⊕−A,其中

A⊕B={a+b | a∈A,b∈B}A⊕B={a+b | a∈A,b∈B}

−A={−a | a∈A}−A={−a | a∈A}

于是就有了下图的左半部分(浅色三角形):

而为了直接求vAvA绝对速度的VO而不是vA−vBvA−vB相对速度的VO,将相对速度下的VO延vBvB方向平移,就有了图中右半部分(深色三角形)。

VO的数学定义

理解了图示,数学定义就很好理解了。

首先给出射线的定义,用λ(p,v)λ(p,v)表示以点pp为顶点,方向为vv的射线。 λ(p,v)={p+tv|t≥0}λ(p,v)={p+tv|t≥0}

接下来就是VO的定义了,用VOAB(vB)VOBA(vB)表示速度为vBvB的BB对AA的VO VOAB(vB)={vA|λ(pA,vA−vB)∩B⊕−A≠∅}VOBA(vB)={vA|λ(pA,vA−vB)∩B⊕−A≠∅}

RVO(Reciprocal

Velocity Obstacle)

VO给出了很漂亮的避障条件,所以后面很多底层的避障算法都是基于VO的,而RVO就是其中之一。

RVO主要解决了VO的抖动问题

抖动现象:如下左图所示,即AA会在vAvA与v′AvA′之间来回切换

RVO的效果:如下右图所示,保持vAvA,不会抖动

证明VO抖动现象存在

首先论文给出了VO的三条性质

Symmetry:vAvA的AA会撞上vBvB的BB,则vBvB的BB也会撞上vAvA的AA vA∈VOAB(vB)⇔vB∈VOBA(vA)vA∈VOBA(vB)⇔vB∈VOAB(vA)

Translation Invariance:vAvA的AA会撞上vBvB的BB,则vA+uvA+u的AA会撞上vB+uvB+u的BB vA∈VOAB(vB)⇔vA+u∈VOAB(vB+u)vA∈VOBA(vB)⇔vA+u∈VOBA(vB+u)

Convexity:在VOAB(vB)VOBA(vB)的左(右)侧的两个速度之间的任意速度,也在VOAB(vB)VOBA(vB)的左(右)侧。VO左(右)侧如下图所示: vA∉→VOAB(vB)∧v′A∉→VOAB(vB)⇒(1−α)vA+αv′A∉→VOAB(vB), for 0≤α≤1vA∉→VOBA(vB)∧vA′∉→VOBA(vB)⇒(1−α)vA+αvA′∉→VOBA(vB), for 0≤α≤1

接下来是抖动现象存在的证明

假设初始状态为会发生碰撞:vA∈VOAB(vB), vB∈VOBA(vA)vA∈VOBA(vB), vB∈VOAB(vA)

由于在对方的VO内,所以各自选择新的速度以防止碰撞:v′A∉VOAB(vB), v′B∉VOBA(vA)vA′∉VOBA(vB), vB′∉VOAB(vA)

由前面VO的Symmetry性质可知:此时,原来的速度不在当前速度的VO内:vB∉VOBA(v′A), vA∉VOAB(v′B)vB∉VOAB(vA′), vA∉VOBA(vB′)

假设我们更加prefer原来的速度,则又会回到原来的vAvA与vBvB

于是在1→4之间循环,即发生抖动

RVO的Insight

首先回想一下为什么会发生抖动:

双方为了避障,都偏移了当前速度太多,导致更新速度后,原来速度不再会发生碰撞。

那么我们有没有办法减少对当前速度的偏移,同时又能保证避障呢,RVO的回答是肯定的:

缩小VO的大小,新的”VO”就叫做RVO

p.s.

我个人对Reciprocal的理解是:相对于VO完全把对方当做木头,RVO假设对方在避障中也会承担一定责任,所以不用完全靠自己改变速度来走出VO,有种互相合作避障的感觉。

或者换一个角度理解,不再直接选择VO外的速度v′AvA′作为新的速度,而是average当前速度vAvA与VO外的速度v′AvA′

RVO的定义与图示

速度为vBvB的BB对速度为vAvA的AA产生的RVO为:

RVOAB(vB,vA)={v′A| 2v′A−vA∈VOAB(vB)}RVOBA(vB,vA)={vA′ | 2vA′−vA∈VOBA(vB)}

图示理解如下:

释意:

2v′A−vA2vA′−vA:vAvA相对于v′AvA′的对称点。

所以公式的含义是:对称点在原VO中,则中点在RVO中。

所以RVO的构成是:vAvA与原VO中的点的中点。

RVO不会发生碰撞且没有抖动现象的证明

这一部分不赘述了,论文中写得很详尽,只说一下证明的思路:

双方选择同侧避障时,不会发生碰撞。

双方一定会选择同侧避障。

不会有抖动现象:原来会撞的在选择新速度后依然会撞。

收获

用数学语言来描述问题:化作质点的描述、抖动的描述。

从实际应用中发现问题:抖动问题的发现。

特殊到一般的推广:论文后面还将RVO推广到一般情况,很漂亮的推广。

References

rvo算法 matlab,RVO算法相关推荐

  1. svm算法 matlab,SVM算法matlab程序

    经典SVM算法matlab程序\svm\binomial.m 经典SVM算法matlab程序\svm\centrefig.m 经典SVM算法matlab程序\svm\cmap.mat 经典SVM算法m ...

  2. matlab 图像拼接算法,MATLAB图像拼接算法及实现

    MATLAB图像拼接算法及实现 图像拼接算法及实现(一)论文关键词:图像拼接 图像配准 图像融合 全景图论文摘要:图像拼接(image mosaic)技术是将一组相互间重叠部分的图像序列进行空间匹配对 ...

  3. edmonds算法matlab,匈牙利算法的matlab实现

    匈牙利算法 算法简介 算法原理 算法实现(附代码) 测试 算法简介 下面摘用百度百科中的解释. 匈牙利算法(Hungarian method)是由匈牙利数学家Edmonds于1965年提出,因而得名. ...

  4. 最优隐神经元数目 算法 matlab,BP算法的改进在Matlab的实现研究

    BP 算法的改进在M a tlab 的实现研究 姚文俊 (中南民族大学电子信息工程学院 湖北武汉 430074) 摘 要:利用M atlab 中的神经网络工具箱提供的丰富网络学习和训练函数,对BP 网 ...

  5. pla算法 matlab,PAL算法原理及代码实现

    博主发现之前写的博客都是偏程序方面,而较少涉及数学或算法方面的东西,其实无论什么软件工具,最终都是为了更好地给理论铺路搭桥,所以我觉得不应该就某个程序贴个博客,而是在实际算法研究中,将理论描述清晰,再 ...

  6. 文字细化算法matlab,细化算法matlab

    最简单的方法 最简单的方法是用matlab自带的函数: BW2 = bwmorph(BW,'thin',n); n是要细化迭代的次数,也可以是Inf(没有引号).Inf表示算法会一直迭代直到图像不再改 ...

  7. matlab主成分分析综合评价算法,matlab主成分分析算法

    从经济效益出发选取8个指标,利用主成分分析法对选取指标进行分析,利用Matlab软件对14家机械制造企业的经济效益进行了计算和排名,为黑龙江省今后实现企业间经济发展协调...... II. 主成分分析 ...

  8. matlab如何调用优化算法,MATLAB优化算法(一)

    1.线性规划 [x,fval]=linprog(c,A,b,Aeq,Beq,VLB,VUB) 用于解决 min(z)=cX%%求满足条件的X与已定系数c乘积之和的最小值 s.t. AX<=b   ...

  9. bfgs算法 matlab,BFGS算法的最优化问题及在MATLAB中的实现

    BFGS算法的最优化问题及在MATLAB中的实现 对拟牛顿方法中的BFGS算法进行阐述,基于matlab软件对非线性无约束优化问题进行了仿真研究,结果表明利用matlab软件解答非线性无约束优化问题获 ...

最新文章

  1. 并发编程之对象的发布和逸出
  2. vue之父子组件通信
  3. WIN8 打开图片内置管理员无法激活此应用
  4. Comparison of video container formats
  5. 【原创】大叔问题定位分享(12)Spark保存文本类型文件(text、csv、json等)到hdfs时为什么是压缩格式的...
  6. sonarqube怎么分析php项目,SonarQube代码质量分析平台介绍
  7. Java制作屏幕截图软件(还可以保存到剪切板内)
  8. Tricks(十八)—— 转置 list of lists
  9. selenium python grid
  10. android studio报错:ClassLoader referenced unknown path: /data/app/xxxx-1/lib/arm64
  11. 高职高考要计算机证,高职高考的报名条件需要技能证书
  12. Python一键替换证件照背景,还用去照相馆?
  13. 【Android】仿淘宝商品详情页
  14. 用python求3的阶乘_Python 阶乘实例 - Python 3 基础教程
  15. libmp3lame的接口使用
  16. 数据库开发技术的课程记录
  17. latex如何设置字体并加粗_LaTex中文字体加粗的问题
  18. MATLAB-在命令行估计状态空间模型
  19. 开源在线客服系统源码(PHP开发的网页在线客服聊天系统源码)
  20. 不管是游戏还是动画都得靠它!你都知道吗?3DMAX角色建模教程—鼹鼠

热门文章

  1. Android简单实现搜索功能 显示清除历史搜索记录
  2. 我们需要真正的软件项目经理(转)
  3. 王传福:华为手机大部分是比亚迪造!小米们造车亏钱是小事,浪费时间是大事...
  4. 菜市场摆摊转行程序员,被嘲笑.........
  5. linux可用的麦克风摄像头,选择 Linux 客户端系统上的首选网络摄像头或麦克风
  6. 百炼:4083:我爱北大
  7. Python+Selenium_UI自动化操作(5)——浏览器截屏
  8. UML-----交互图(顺序图和合作图)
  9. 通过selenium实现模拟浏览器操作
  10. 微软的服务器建在哪里找,设置 WINS 服务器选项 - Windows Server | Microsoft Docs