碰撞回避是机器人导航,游戏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公布,似乎图片被自己主动缩小了。看不清的话能够点击查看原图

转载于:https://www.cnblogs.com/zfyouxi/p/5143994.html

碰撞回避算法(一) Velocity Obstacle相关推荐

  1. 算法与游戏之AABB碰撞盒算法

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  2. [文献精读] Summit:A Simulator for Urban Driving

    Summit:A Simulator for Urban Driving 思维导图 摘要 I. INTRODUCTION II. RELATED WORK A 现有的驾驶模拟器 B 人群模拟算法 II ...

  3. 碰撞检测算法:点和矩形碰撞、点和圆形碰撞、矩形碰撞、圆形碰撞

    一,原理介绍 这回有点复杂,不过看懂了还是很好理解的.当然,我不敢保证这种算法在任何情况下都会起效果,如果有同学测试时,发现出现错误,请及时联系我. 我们首先来建立一个以圆心为原点的坐标系: 然后要检 ...

  4. rvo算法 matlab,RVO算法

    简介 在介绍VO,RVO之前,需要先介绍路径规划. 对Agent进行路径规划,实际上要完成的任务就是让Agent从点A无碰撞地移动到点B.而路径规划的过程是层次化的,其基本框架大致如下: High l ...

  5. 避障算法 - VO、RVO 以及 ORCA (RVO2)[转载]

    本文转载于:http://k.sina.com.cn/article_3743149912_df1bef5801901cp6s.html 所谓避障算法,主要目的就是"避障"(废话) ...

  6. 高级碰撞检测及响应算法——碰撞检测

    1.概述 移动的物体可以由椭球体近似表达,这种椭球体更容易逼近类人和动物的形状,比如说人的头,就是一个X-Y-Z轴半径相等的椭球体,髋骨,盆骨等都可以较好地用椭球体体现出来.多个椭球体组成的集合的形状 ...

  7. 碰撞检测碰撞Java简单游戏开发之碰撞检测

    最近研究碰撞检测碰撞,稍微总结一下,以后继续补充: 前言 未几之前在论坛上有人发贴,使用java编写的超级马里奥如何实现碰撞检测,笔者自己以前 也做过Tank大战.里面一样涉及到碰撞检测,翻翻U盘里的 ...

  8. 7秒钟的记忆?Facebook提出DL新算法,东南大学90后博士新作

    来源:FAIR 编辑:yaxin 忘记,是最好的释负. 你还记得去年今天吃的什么吗? 只有那天是特别的日子,我们或许才会想起. 忘记日常琐事,就可以为长期记忆留出空间. 与人类记忆不同,AI神经网络会 ...

  9. 群人各说什么是哈希算法?

    这个HASH算法不是大学里数据结构课里那个HASH表的算法.这里的HASH算法是密码学的基础,比较常用的有MD5和SHA,最重要的两条性质,就是不可逆和无冲突. 所谓不可逆,就是当你知道x的HASH值 ...

最新文章

  1. WIN7 IE8的桌面图标解决了(简单有效)
  2. Hadoop/Spark相关面试问题总结
  3. batch-size 深度学习笔记
  4. sinaapp mysql连接_手把手教你在新浪云上免费部署自己的网站--连接数据库
  5. 创建前缀一样的文件_SpringBoot:配置文件属性读取
  6. linux上的 heartbeat 双机热备服务架设
  7. BT种子文件 bencoding编码详细解析
  8. 快速定制开发CAD电路图(电气原理图)详细流程及源码 浮云E绘图
  9. win10使用Switchhost显示无修改权限
  10. Vue前端开发环境搭建
  11. 机器人潘森护盾_新版潘森无伤抗塔 还能抵消死歌大招?E技能护盾机制全解析!...
  12. 【FAQ】【Push Kit】 华为怎么设置角标
  13. OpenWRT/Linux多WAN带宽叠加使用iptables标记策略路由负载均衡
  14. [转载]荷香如歌_xing2516_新浪博客
  15. HDOJ 5142 NPY and FFT
  16. 计算机桌面底下显示条,详细教您电脑屏幕出现条纹怎么办
  17. 商汤实习面试-见习视觉研究员面试
  18. 【matlab报错问题个人总结】数组超出索引维度
  19. 报告解读下载 | 12月《中国数据库行业分析报告》发布,精彩抢先看
  20. Android实现截屏的方法

热门文章

  1. linux 查看软连接的源头,linux 软连接怎么查看原始地址
  2. 集群服务器下使用SpringBoot @Scheduled注解定时任务
  3. Spring Cloud with Turbine
  4. Ext JS 6开发实例(三) :主界面设计
  5. CKeditor的几种配置方式
  6. nginx的反向代理、负载均衡、页面缓存、URL重写及读写分离
  7. 挑战Textarea——把textarea中的HTML写入数据库
  8. BlockingQueue - LinkedBlockingQueue常用API
  9. 虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池,
  10. 英语练字字帖打印_为初学者设计的字帖,有耐心都能练好