【论文阅读4】Lanelet2:一种面向未来自动驾驶的高精地图框架

2018 21st International Conference on Intelligent Transportation Systems (ITSC)

本篇博客主要记录是Lanelet2原始论文解析,其项目github地址为https://github.com/fzi-forschungszentrum-informatik/Lanelet2.git。Lanelet是Autoware使用的高精地图软件框架,后续将结合代码完成高精度地图制作实践。

image-20200222004258512

​ 这篇Paper是基于Liblanele,它提出了一套用c++实现的开源高精地图软件框架Lanelet2,并给出抽象的和真实世界的案例,阐述其基本概念,具体的结构和地图的使用方法及其在自动驾驶中的应用。Lanelet2不仅可用于典型的模块如定位或运动规划,而且还支持高度自动化驾驶的各种潜在地图应用。

相关工作

主流地图格式及框架

  • the maps of commercial providers (各种图商自定义格式,非开源)
  • OpenStreetMap(OSM)
  • OpenDRIVE

缺点:OSM、Opendrive的规范是开源的,但没有提供相关的库来解释和处理地图数据

  • Vehicle Self-Localization Using High-Precision Digital Maps.(地图表示,制定满足高精地图需求)
  • Liblanelet (基于Lanelets基本路段结构Lanelet,根据路段的邻接关系构成道路,缺点是只能应用于特定的,先前已知的路线,不支持定位等应用)

地图设计原则

我们要构建高精地图需要关注以下三个方面,对应着不同的图层

  • 路网(Road network)
  • 车道和周围环境(Lane and Environment)
  • 可直接访问地图的各个物理元素(Physical Elements)

路网(Road network)

routing是很多地图的一个基本应用。不仅仅需要知道哪些道路能够组成一条路线,还需要清楚,哪些车道可用并且能够换道。behavior generation与交通规则息息相关,所以需要知道一条路线上的交通规则。在prediction部分,也要求我们需要知道不同的交通工具或者交通参与者(road user)等和交通规则的关系。比如公交车

车道及周边环境(Lane and Environment)

​ 对于path planning而言,不仅需要知道车道中心线,还需要知道路段的速度信息。因为定位和规划器本身就有一定的误差,所以还需要知道车道的左右边界。

​ 对于一些特殊操作,比如停车,需要知道可用的停车位的位置以及到达路线。因此不仅需要知道车道本身的信息,还需要知道车道周边的详细环境信息。

物理元素(Physical Elements)

​ 对于localization而言,地图必须包含许多传感器都可以观测到的元素,这些元素需要提供足够的密度,用于精准的定位和运动规划。地图是可更新的,所以不仅需要存储地图数据,还需要存储其抽象的、数据预处理形式,即包含数据信息及其关联关系。还需要考虑地图随时间变化,比如大陆漂移(continental drift),所以需要使用本地固定坐标系而不是全球坐标系(GPS)。

 Consequences for Maps

Lanelet2地图层次划分:

  • 物理层(physical layer,可观测到的真实元素)
  • 关联层(relational layer,与物理层相关联的车道,区域以及交通规则)
  • 拓扑层(topological layer)

所以我们设计Lanelet2地图基于以下原则:

  1. 通过与可观察对象相关联来验证地图上的所有信息。
  2. 地图需要覆盖到所有可能区域,包括道路外的部分。
  3. 地图上各个车道和区域之间的交互作用必须是可识别和可理解的。必须能找出在哪些车道之间可能发生变道,或者在哪里可能由于交叉车道而引起冲突。
  4. 必须包含有关road user使用的区域的信息以及适用于他们的交通规则。
  5. 必须区分交通规则的来源及其对road user的影响。
  6. 可扩展性/模块化。
  7. 容易修改和更新。

Lanelet2地图格式及软件架构

​ 在此,根据交通参与者和道路情况,将关系层的元素组合到潜在的可通过区域网络中。有可能根据物理层的元素直接生成关联层(就像人类一样),目前尚无解决办法。但至少Lanelet2就存在这种可能性

​ Lanelet2格式基于Liblanelet已知的格式,并设计为可在基于XML的OSM数据格式上表示,该格式的编辑器和查看器可公开使用。但是,我们认为地图的实际数据格式无关紧要,并且可以互相转换,只要可以确保该格式可以无损地传输到内部表示即可, 因此能够轻松转换为其他格式。

​ 地图存储的时候,最重的是准确性,一般用无损地理坐标系(经纬度)。而在加载地图时,为了能够进行有效计算,将其转换为平面投影系,比如UTM系,但是高度信息也十分重要。

基本图元(Primitives)

Lanelet2地图由五个基本元素则组成,

  • Points、line(physical layer)
  • lanelets、areas、regulatory elements(relational layer)

所有图元的共同点是它们具有唯一的ID,都是通过key-value键值对的形式存储。有些属性是Liblanlet原有的,另外一些是增强地图功能而定义的。

​ 目前最新版的Lanelet2中新增一个图元Polygon

​ 对于可以使用哪些标签,通常没有限制,但是某些标签传达了特殊的含义。同样,在Lanelet图元上通用的标签在内部存储在一种结构中,该结构比自定义标签更有效地访问。标记始终是小写且有下划线。一些值具有特殊含义,例如“ yes”和“ no”可转换为bool(是-> true,否-> false)。

​ 所有图元都使用了以下属性:

  1. type,表示图元所属的类别。例如curbstone,traffic_sign或line_thin用于道路标记。
  2. subtype,用于进一步区分类型。例如low标记可通行的curbstone,dashed标记虚线道路标记
  3. no_issue(是/否):如果为yes,则禁止在Lanelet2_validation报告的该图元上发出警告。

Points

​ points由ID,3d坐标和属性组成,是唯一存储实际位置信息的元素,ID必须是唯一的。其他基本元素都是直接或者间接由points组成的。在Lanelet2中,Points本身并不是有意义的对象,Points仅与Lanelet2中的其他对象一起使用有意义。

Linestrings

​ 线串是两个或者多个点通过线性插值生成的有序数组,用来描述地图元素的形状。线串可以是虚线,它可以通过高度离散化实现,来描述任何一维形式,并应用于地图上的任何可物理观察到的部分。与样条曲线相比,线串可以高效计算,并且可以用来描述尖角,最终转化为非线性微分方程的求解问题。

​ 线串必须至少包含一个点才能有效,并且不能自相交。它们不能重复包含点(即,不允许p1-> p2-> p2-> p3)。线串必须始终具有type属性,以便可以确定其用途。

linestring

Polygon

​ 多边形与线串非常相似,但形成一个Area。隐式假定多边形的第一个点和最后一个点被连接以闭合形状。

​ 多边形很少用于传输地图信息(交通标志除外)。相反,它们通常用作将有关区域的自定义信息添加到地图(例如,感兴趣区域)的一种手段。

Lanelets

​ Lanelets定义了发生定向运动时,地图车道的原子部分。原子表示沿当前lanelet行驶时,有效的交通规则不会改变,而且与其他Lanelet的拓扑关系也不会更改。

lanelet lanelet由正好一个左和右一个线串组成,它们共同构成了小车的可驾驶区域。要求线串指向同一方向。这可能意味着,对于两个相邻的相对的车道,其中一个必须保持一个倒置的线串为其边界。从osm加载地图数据时,该库将为您进行对齐。如果可能的话,边界应具有物理边缘(即参考实际标记,路缘石沿等)。该库使用边界的type来确定此处是否可以更改车道。

​ lanelet可能有一条额外的中心线来引导车辆。此中心线必须在左右边界所形成的区域内,并且不得接触边界。如果没有给出中心线,则该库将可以进行计算。

​ 默认情况下,lanelet是单向的。仅当它们被标记为双向时,它们才被视为双向。相邻lanelet必须共享相同的端点,以便该库可以确定其相邻状态。当两个或多个lanelet是lanelet的后继者时,该lanelet也可以发散,变换车道可到达的车道必须共享其边界之一。

​ 此外,还可能有regulatory elements来解释这段区域内相关联的交通规则。并且Lanelets还可以表示道路重叠或者相交区域。

​ lanelet可以引用表示适用于该lanelet的交通规则的regulatory elements。多个lanelet可以引用同一regElem。必须始终始终可以直接从车道上确定车道的当前速度限制。可以通过引用SpeedLimit监管元素或标记小车的位置来完成。在这种情况下,假定道路类型的最大速度(例如,如果位置是德国城市,则为最大50公里/小时)。

Areas

Areas是地图上没有方向或者是无法移动的部分区域,比如路标,停车位,绿化带等。他们由一条或者多条linestring组成的闭合的区域。Area也有相关联的regulatory elements。area

​ Area具有类似于lanelet的属性,但是Area代表了其表面内无方向的交通,而不是代表从入口到出口的定向交通。一个Area可以具有多个入口和出口点。一个区域的典型示例是行人或停车场使用的广场以及车辆的紧急通道。与lanelet一样,该Area的交通规则也不得更改。

​ 在几何上,Area由线串的有序列表表示,这些线串一起形成了沿顺时针方向的区域形状。Area必须与另一Area完全共享一个线串,才能视为相邻Area。对于lanelet,它们要么必须共享一个线串(当lanelet与Area平行时),要么lanelet的端点也是该Area的线串之一的端点(当lanelet通向该Area时)。Area的面积不得为零,边界不得自相交。该类型的共享边界确定它是否能够通过该Area。

​ Area也可以有孔,即该Area中不必要的部分。不允许另一个lanelet /Area在较大Area的孔内。在这种情况下,必须沿孔将“外部”Area一分为二。孔的表示类似于外部边界:每个孔都由线串的有序列表组成,这些线串一起形成了孔的形状。这些点必须按逆时针顺序排列。

regElem (Regulatory elements )

​ regElem是表达交通规则的通用方式,它们由适用的lanelet或Area引用。在应用的时候,regElem 会和一个或者多个Lanelets、Areas相关联。regElem是动态变化的,意味着它只是在某些条件下是有效的。

​ 诸如限速,道路优先级规则、红绿灯等,交通规则有许多不同的类型,因此每个regElem的准确结构大都不一样。他们通常引用定义规则的元素(例如交通标志),并在必要时引用取消规则的元素(例如速度区末尾的标志)。regulatory_element

​ 通常,regElem元素由通常表示规则类型的标签(即交通信号灯regElem)和有关对此规则具有特定作用的可观察事物的特定信息(例如交通信号灯本身和停车线)组成。 其他类型的regElem是通行权和交通标志regElem。

软件模块(Software Modules)

architecture

将地图元素的表示与其解释分开是很重要的,Lanelet2是模块化的,可扩展的软件框架,其软件框架主要分为以下模块。

Core ****

此模块包含所有的图元和以上描述的图层,并且还包括几何计算,比如计算中心线,距离和重叠区域等。

Traffic Rules

根据不同的road user类型和国家,来解释相应的交通规则。

Physical

可以直接访问物理层元素。

Routing

根据交通规则,创建路由图,来确定精准的行驶路线。也可能通过组合相邻的Areas和lanelets来构建易通行区域。

Matching

用来给road user分配lanelets或者基于传感器的观测来确定可能的行驶方向。

Projection

提供全球地理坐标系到局部平面坐标系的准换。

IO

用于从各种地图格式(特别是OSM格式)读取和写入地图。

Validity

搜索和报告地图中的显著错误

ROS

和ros连接起来

Python

py版本

案例研究

这里通过一些示例来说明地图的基本概念和实际应用。

两个场景(Scenarios)

普通路段

image-20200224003106862

​ 上图是高度路上单向路段的区域地图,由单条车道扩展而来的,包含应急车道、绿化带和围栏。

​ 图片中间的是从地图中得来的路由图,左边的用于普通车辆,右边的用于应急车辆。因为应急车辆可以使用b车道,也可以从F变道到G,从而在路由图中存在更多的边。

​ E和H的划分是必要的,因为添加连续线之后,从G到F的是无法变道的。如果E和H是单独的lanelet,那么从H到C是可以变道的,因为他们通过D相连接。lanelets限制只有一个右边界导致这种情况不可能出现,因为D和G区域间产生的右边界分离会进一步传递给E和H(?)。

交叉路口

image-20200224005954049

​ 上图描述的是交叉路口区域,因为交叉路口不包含某些转弯车道的道路标记。所以lanelet G、H、I分别有一条为虚线的边。此外路由图包含冲突的lanelets关系,所以能够确定一些潜在的紧急情况。

​ 因为交叉路口是由交通信号灯控制的,所以B、E、H分别regElem的关联引用,比如停止线和红绿灯。因为从E处左转的车辆需要等待从B处直行的车辆,所以lanelet B和H都具有相关联的路权,并且E服从于B。路权一般是在交叉路口的入口处引用的,因此可以明确的给这些车辆分配车道。如果两个lanelet相交却没有关联的路权,那么这两个lanelet优先级相同,两辆车中第一辆有路权。

现实道路场景(Real World Example)

image-20200224012257360

​ 左图是真实世界的交叉路口,该地图还包括从右到下横穿交叉路口的行人路和电车轨道。右边是回旋处的地图。 它位于可以双向行驶的道路中间,没有中间的分隔线。 这些道路分别由一个小的lanelet表示,但路由图包含两个节点,每个可行驶方向一个。

总结

​ 迄今为止,高度自动化驾驶的地图缺少一个重要元素,即地图存储信息的可追溯性。 这项原则要求有完全不同的地图结构,因此,即使是非常抽象的地图组件(例如road network)也可以追溯到其基本起点,例如行车道的边界。这是确保地图有效性和可更新的唯一方法。

​ 我们还将传递仅专注于信息表示的地图结构到面向应用的地图结构的变化,后者通过清晰的界面为HAD中的各个功能提供所需的确切信息。这样就可以在地图上存储更复杂的信息和关系,还能简单地使用。因此,好的HAD地图不仅包含某种格式,而且是一个完整的软件框架。

​ 由于依赖于高精度地图的应用仍然是研究的对象,因此我们需要讨论如何构建这样的框架以及它必须支持哪些功能。 为此,Lanelet2地图框架应该代表一个起点,并通过其可扩展性和灵活性来支持这些发展。

-------------    本文结束  感谢您的阅读    -------------
胡想成 wechat
欢迎关注个人公众号!
您的支持,是我装逼的最大动力!

本文标题:【论文阅读4】Lanelet2:一种面向未来自动驾驶的高精地图框架

文章作者:胡想成

发布时间:2020年02月24日 - 01:02

最后更新:2020年07月19日 - 07:07

原始链接:xchu.net/2020/02/24/41lanelet2/

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议,转载请注明出处!