碰撞回避算法(一) 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的自主性. 驱动机器人向前 ...
随机推荐
- 随机生成器、thread(暂停)、清屏定义
1.生成一个随机生成器 Random a = new Random(); //()可以填写随机生成器的种子,这个种子只能是整数(int) ); //()内的数字代表小于5的非负整数,包括零,例如0,1 ...
- BZOJ 1042: [HAOI2008]硬币购物( 背包dp + 容斥原理 )
先按完全背包做一次dp, dp(x)表示x元的东西有多少种方案, 然后再容斥一下. ---------------------------------------------------------- ...
- Linux下查看二进制文件命令
一.在Linux下查看二进制文件的软件: xxd hexdump 二.编辑: 1.biew 2.hexedit 3.vim Vim 来编辑二进制文件.Vim 本非为此而设计的,因而有若干局限.但你能读 ...
- ASP.NET MVC 5 学习教程:添加查询
原文 ASP.NET MVC 5 学习教程:添加查询 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符串 通过控 ...
- Oracle 专用模式(DEDICATED) 和 共享模式(SHARE) (转)
Oracle 是一门博大精深的技术.玩了2年的oracle,依旧还有很多知识点不清楚. 昨天群里的朋友提到了 DEDICATED 和 SHARE 两种模式. 不清楚,默默的做点功课了.从网上搜了点知识 ...
- Android中的单元测试
2015年5月19日 23:10 在Android中,已经内置了Junit所以不需要在导包.只要继承AndroidTestCase类就可以了. 首先需要修改AndroidManifes ...
- C++算术运算符与算术表达式
基本的算术运算符 在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍. 常见算数运算符 运算符 说明 举例 + 加法运算符,或正值 ...
- javascript每日一练(十)——运动二:缓冲运动
一.缓冲运动 实现原理:(目标距离-当前距离) / 基数 = 速度(运动距离越大速度越小,运动距离和速度成反比) (500 - oDiv.offsetLeft) / 7 = iSpeed; 需要注意: ...
- 【转】CentOS上安装 jdk:rpm安装和源码安装
1.安装 jdk-8u5-linux-x64.rpm 原文链接:http://www.cnblogs.com/xsi640/p/3756995.html 先下载最新的jdk版本 文件名:jdk-8u5 ...
- IOS SWIFT 简单操作文件
//Home目录 let homeDirectory = NSHomeDirectory() //Documents目录 苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备 ...