1 简介
过去的几十年里,导航算法变得越来越复杂。它们处理大量传感器的数据,高精度跟踪障碍物位置
和自由空间位置。结合正确的路径规划算法,它们可以很熟练地在环境中进行巡航。然而,这类导航算
法的相当大一部分会遇到同样的问题:算法皆是为了产生无碰撞的自由路径这个目标而进行有效寻优。
这种算法在许多实际用例或抽象环境下表现很好,如果都是要求从点 A 走到点 B。对于其他实际
用例来说还不是特别好。像在人口稠密的动态环境中移动的机器人,需要将更复杂的约束集成到优化
问题中。从一个点走到另一个点只是一个大区域上下文的一部分。机器人围绕障碍物移动仅是为了避
免碰撞是不够的; 机器人必须根据上下文语义的不同区别对待该障碍。例如,大多数情况,在远离桌子
几厘米之外行走是完全没有问题的。然而,紧贴着人群行走更是不希望发生的。如果导航算法平等对待
所有感知到的障碍物,此时规划器可能无法选择出一条正确的行走路径。
规划路径时,除了尊重他人的个人空间这种场合之外,还有许多其他的场合表明:选择最短的无碰
撞路径可能不是最理想的。考虑人群中人经常行走的路线信息,此时应首选避免可能有障碍的长度更
长的路径。实用情况下,机器人还必须考虑避免进入有潜在危险的区域,例如厨房。虽然所规划的路径
是有效路径,但这些区域段应该带上通行代价。即使对简单情况下的一些因素也应该这么考虑,比如偏
向在过道右侧移动。机器人选择走哪条路取决于在大环境提取的额外的上下文信息。
路径规划器使用的环境信息皆存储于一张代价地图上。在传统的代价图中,所有的数据都存储在一
个单元网格中,我们称之为单源代价地图 (Monolithic Costmap)。单源代价地图由于只需要在一个地方
读写代价的值,非常简单,是一种很流行的技术。它的一个问题是代价地图中相当多的代价值被丢弃,
使得对地图的周期维护变得越来越困难。
本文中,我们介绍一种将额外上下文信息集成到代价地图的方案,方案采用了一种称之为分层代价
地图 (layered costmaps) 的新方法。通过使用 ROS 导航框架作为试验,我们展示分层代价地图在复现以
前导航算法的功能的同时,能增加处理更多上下文信息的灵活性。图1展示了一种分层代价地图的可能
的配置方式。我们将讨论该算法和数据结构,以及相对以前方法的改进点。之后,我们将对可以加入到
新旧代价地图中的不同层和它们所集成的环境上下文进行检查 (以讨论它们对规划的路径的影响)。
2 相关工作
这项工作的重点是适用于规划路径的地图的网格表示方式。20 世纪 80 年代,由 Moravec 及其合作
者在卡内基梅隆大学 (CMU) 开发的占据网格 (occupancy grid) 是现代代价地图鼻祖
[1, 2]
。占据网格的语
义值很直观:每个单元格的值表示该单元格存在障碍物的概率,因此其更新过程是贝叶斯规则的直接应
用。Konolige
[3]
和 Thrun
[4]
改进了概率模型,以便更好地定位障碍物。基于网格的代价地图表示方法 (其
中网格值表示的不是概率而是通行代价) 被证明是很实用的方法,尤其是当障碍物的位置是固定不定的
情况下 (不使用声纳探测仪)。过去,代价地图主要是二进制的,单元格要么是被占据状态 (occupied),要
么是自由 (free) 状态。现在的情况是,随着将更多的复杂代价的值加入代价地图,必然导致代价地图的
语义信息过于混乱。对于那些非致命的 (non-lethal) 代价值,即值介于 occupied 与 free 中间,通常表示
软约束 (soft constraints)。自主驾驶车辆采用这样的值进行优化,从而能在街道上正确的一边进行行驶
或采取其他优先驾驶行为
[5]
。Gerkey 和 Agrawal
[6]
在代价图中用不同的代价值表示不同类型的地形及其
通行性。软约束也可用于基于人机交互的约束。Sisbot 等人的 Costmap 系统
[7]
就考虑到个人的活动空
间和视野,而 Kirby 等人
[8]
等人则对人在路的右边行走行为进行了建模。Svenstrup 等人
[9]
、Scandolo 和
2