简介

在介绍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. 近期激光雷达点云的3D目标检测方法
  2. mysql数据库字符集设置
  3. st04 查看数据库日志
  4. 电气论文实现: 考虑储能和可再生能源误差的售电公司购售电策略( 有代码数据)
  5. python最新排名_最新编程语言排名:JS位列第一 Python超Java
  6. [Python]网络爬虫(12):爬虫框架Scrapy的第一个爬虫示例入门教程
  7. mysql中的视图_分布式 | DBLE 是如何实现视图的?
  8. C语言指针作为参数的传递问题
  9. 每日小记 2017 2.9
  10. 数据结构之内部排序三
  11. ionic4 返回键退出app
  12. php 开启memcache,php开启与安装 memcache
  13. 结构方程软件Lisrel 8.7 和HLM5.5
  14. VS2015 密钥key
  15. 记一次spring5源码完整编译过程
  16. 投简历 找工作 App
  17. 基于深度学习的Depth and Ego-Motion Estimation
  18. hdu4415 Assassin's Creed
  19. 【存储数据恢复】esx vmfs的互斥导致存储数据丢失的数据恢复案例
  20. B860AV2.1盒子刷机

热门文章

  1. Linux系统内存不够用怎么办?释放Linux内存的教程
  2. c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...
  3. asp毕业设计——基于asp+access的库存管理系统设计与实现(毕业论文+程序源码)——库存管理系统
  4. DIA无法输入中文解决办法
  5. Android指示灯控制
  6. 真・恋姫†無双 蜀国剧情翻译第1章[2]
  7. 【医学图像】图像分割系列.2 (diffusion)
  8. VS2017使用教程(使用VS2017编写C语言程序)二
  9. tf.logging.set_verbosity(tf.logging.INFO)
  10. 分公司未经授权对外签订合同是否可以