碰撞回避算法(一) Velocity Obstacle
碰撞回避是机器人导航,游戏AI等领域的基础课题。几十年来,有很多算法被提出。注意这里主要指的是局部的碰撞回避算法。尽管和全局的路径规划算法(A*算法等)有千丝万缕的联系。可是还是有所不同的(局部的碰撞回避算法主要关注的是即将发生的碰撞,而路径规划主要关注的是事先确定出到达目的地的最佳路径。这两种算法通常须要配合使用)。近年,一种基于Velocity Obstacle [1]的ORCA算法由于事实上时性,在很多3A级游戏中被广泛採用。这里我们就介绍一下这样的高性能的算法。
首先考虑一下最主要的情形,有两个圆形的机器人A和B在同一个平面上以一定的速度移动着,那么我们要怎样推断它们是否会发生碰撞?
一种比較直观的方法就是。算出A对于B的相对速度。然后看看相对速度的方向是否在宽度为两者半径之和的扇区内。假设在,那么这两个机器人在未来某个时间点必定会发生碰撞。
反过来说。仅仅要相对速度在这个扇区范围之外。那么就不会发生碰撞。假设要获得对于绝对速度Va的“碰撞范围”,仅仅要将相对速度的“碰撞范围”依据Vb进行平移就可以。而这个“碰撞范围”就是A对于B的Velocity Obstacle。
正式的定义例如以下:
当中
那么假设有复数个机器人。对于B来说,就不止有一个Velocity Obstacle。此时,仅仅要选择在全部的Velocity Obstacle的集合之外的速度就行保证不会发生碰撞。
该方法的优点在于直观以及计算简便。仅仅须要构建出每一个Velocity Obstacle的两条边。便能够直接选择速度,不像更多的算法须要计算距离。当然,另一些详细的问题,如应该选择哪一块区域。或者没有可选择区域时应该怎样选择等。这里我就不多加介绍了。有兴趣的同学能够自行查看后面所列出的參考文献。
这非常棒,没错。
可是,当其它的机器人也採取相同的回避措施的时候,会发生什么?
能够想象下面的情形。
两个机器人A和B都向着各自的目标迎面而行,他们的速度都处于各自的Velocity Obstacle中,也就是说接下来会发生碰撞。A与B都会选择Velocity Obstacle之外的速度进行回避。
一段时间之后,他们的速度都将处于各自的Velocity Obstacle之外。可是,为了尽快的到达目的地,他们又会又一次选择原来的速度,反复上述动作。终于他们的运动轨迹会变成下图所看到的,这样的抖动不仅不自然,也会影响各自的速度。
这个问题的根源在于Velocity Obstacle算法假定机器人B以外的机器人都不会採取回避行动,而仅仅是以固定速度朝着各自的目的地前进。
也就是说,回避的责任所有交给了B。而当其它机器人也採取相同的回避策略时,便会出现上述的问题。为了解决问题,在2007年開始的之后几年间,University of North Carolina at
Chapel Hill的研究小组Gamma提出了Reciprocal Velocity Obstacle以及它的改良算法Optimal Reciprocal Collision Avoidance,并获得了很好的回避性能。
这些算法详细是如何的,让我们留待下回分解。
參考文献
[1] P. Fiorini and Z. Shiller, “Motion planning in dynamic environments using velocity obstacles,” Int. J. Robot. Res., vol. 17, no. 7, pp. 760–772, Jul. 1998.
P.S. 该文章使用Live Wirter公布,似乎图片被自己主动缩小了。看不清的话能够点击查看原图
碰撞回避算法(一) Velocity Obstacle的更多相关文章
- Velocity Obstacle
[Velocity Obstacle] Two circular objects A,B, at time t(0), with velocity V(A),V(B). A represent the ...
- 3D有向包围盒与球体碰撞的算法
之前发的小游戏滚蛋躲方块中,用它来判断球体与立方体是否发生了碰撞. http://www.cnblogs.com/WhyEngine/p/3350012.html 现在发布下该算法: 有向包围盒OBB ...
- 游戏碰撞OBB算法(java代码)
业务需求 游戏2D型号有圆形和矩形,推断说白了就是碰撞检测 : 1.圆形跟圆形是否有相交 2.圆形跟矩形是否相交 3.矩形和矩形是否相交 ...
- RVO算法
http://blog.sina.com.cn/s/blog_6ad33d350102xqal.html 简介 在介绍VO,RVO之前,需要先介绍路径规划. 对Agent进行路径规划,实际上要完成的任 ...
- PBKDF2WithHmacSHA1算法
主要用于明文密码加密字符串存入数据库.由棱镜门思考.目前大部分企业中都是明文密码.一旦被攻破.危害非常大.现在主流加密技术是MD5加密.不过MD5的存在小概率碰撞(根据密码学的定义,如果内容不同的明文 ...
- 1c19b35b005744d55261682b361804fa 如何破解经过 MD5 算法处理的信息?
Md5密文破解(解密)可以说是网络攻击中的一个必不可少的环节,是工具中的一个重要"辅助工具".md5解密主要用于网络攻击,在对网站等进行入侵过程,有可能获得管理员或者其他用户的账号 ...
- URL短网址系统的算法设计及实践
在通常情况下,URL是由系统生成的,通常包括URI路径,多个查询参数,可以对参数进行加密和解密.当人们要分享某个URL,比如短信,邮件,社交媒体,这就需要短URL. 而短网址,顾名思义就是在长度上比较 ...
- 【算法】01-数据结构概述(注意区分jvm堆与堆/jvm栈与栈)
[算法]01-数据结构概述(注意区分jvm堆与堆/jvm栈与栈) 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有 ...
- Explore Basic Behavior of the TurtleBot ---3
原创博文:转载请标明出处(周学伟):http://www.cnblogs.com/zxouxuewei/tag/ Introduction 此示例帮助您使用turtlebot的自主性. 驱动机器人向前 ...
随机推荐
- ecshop后台添加栏目
ecshop后台增加模块菜单详细教程 一:ecshop后台管理 admin\includes\inc_menu.php 添加上你要添加的功能admin\includes\inc_priv.php 对应 ...
- CodeForces 260A Adding Digits
这道题目的意思是给你提供a, b, n 三个数 a为 输入的数字 ,你需要在a后面加n次 ,每次可以加0-9 但要保证每次加上去的那个数字能被b整除 不过数据规模有点大,用搜索会MLE(即使开了个开栈 ...
- bootstrap base css 基本css
Headings All HTML headings, <h1> through <h6> are available. h1. Heading 1 h2. Heading 2 ...
- commoncrawl 源码库是用于 Hadoop 的自定义 InputFormat 配送实现
commoncrawl 源码库是用于 Hadoop 的自定义 InputFormat 配送实现. Common Crawl 提供一个示例程序 BasicArcFileReaderSample.java ...
- 基于visual Studio2013解决C语言竞赛题之0522和为素
题目
- lua序列化table表到文件中
先上代码 function luautil.serialize(t, sort_parent, sort_child) local mark={} local assign={} local func ...
- MySQL具体解释(5)-----------函数超全总结
mysql函数大全 对于针对字符串位置的操作.第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值. 假设str是空字符串,返回0.假设str是NULL,返 ...
- SDCard助手类
package com.zyh.sdcardHelper; import java.io.BufferedInputStream; import java.io.BufferedOutputStrea ...
- typedef和define
typedef int INT; #define INTPTR1 (int*) typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性. #define是一 ...
- HDU--杭电--1501--Zipper--深搜、DP都好
Zipper Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...