您好,欢迎来到中国自动驾驶高精地图产业创新发展论坛2019!

高精度地图制作

发布日期:2020-05-26

GRCChdmap

2020-05-26 15:29:36

手机阅读

点击上方蓝色字体,关注我们

高精度地图制作(一)

前面介绍了为什么需要高精度地图,那么我们如何制作一张高精度地图呢?

制作一张高精度地图可以大概分为3个过程:采集、加工、转换。

采集

如何采集地图?

我们需要需要一些传感器来获取数据,下面是需要的传感器列表:

lidar、摄像头、gnss、imu

apollo传感器示例

lidar主要是来采集点云数据,因为激光雷达可以精确的反应出位置信息,所以激光雷达可以知道路面的宽度,红绿灯的高度,以及一些其他的信息,当然现在也有厂家基于视觉SLAM(纯摄像头测距)来制作地图的,有兴趣的也可以看下相关介绍。
摄像头主要是来采集一些路面的标志,车道线等,因为图像的像素信息更多,而位置信息不太精确,所以采用摄像头来识别车道线,路面的一些标志等。
gnss记录了车辆的位置信息,记录了当前采集点的坐标。
imu用来捕获车辆的角度和加速度信息,用来校正车辆的位置和角度。

需要的操作系统和软件:

  1. ubuntu 16.04

  2. apollo

用apollo的录制bag功能,可以把传感器的数据都录制下来,提供生成高精地图的原始数据。其实在录制数据之前,需要对上面所说的传感器进行校准工作,这部分的工作比较专业,涉及到坐标系转换,也涉及到一些传感器的知识,所以对非专业人士来说不是那么好理解。或者开发一系列工具来实现校准。

接下来就是采集了,采集过程中需要多次采集来保证采集的数据比较完整,比如你在路口的时候,从不同的角度开车过去看到的建筑物的轮廓是不一样的,这些轮廓就是激光雷达扫描到的数据。所以遇到路口,或者多车道的情况,尽可能的多采集几次,才能收集到比较完整的地图信息。并且速度不要太快,apollo上的介绍是不超过60km/h(这里没有特别说明会出现什么问题)。

以下是我的一点个人想法:

上面的采集方案依赖很多,首先需要一系列的硬件,其次是需要apollo,并且熟悉apollo的启动流程,最后还需要传感器校准的知识。实际上采集的过程中我们不需要自动驾驶。可以开发一个轻量级的采集方案,硬件全部集中到一个盒子中,软件只需要提供录制bag包的能力就可以了,这点ros都可以做到,最后校准由于硬件都是一体化的盒子,只需要校准一个传感器就可以把其中所有传感器的坐标系确定。相对于上面的方案来说更加轻量,可能只需要邮寄一套设备就可以开始录制地图了。
here的地图是分层的,比如路面是很少更新的,而路灯,车道标识,或者红绿灯可能会更换,所以路面信息可能需要激光雷达去采集一次,而路灯,车道标识,红绿灯等可以通过摄像头的方案来更新,因为高精度地图需要实时更新,上面的方案可能更加适合一些地图更新的场景。

加工

如何加工上述地图?

首先需要生成一张原始的地图,这里我们采用点云生成原始的地图,因为点云的距离位置信息比较准确,因为点云数据是0.1s采集一帧,下面我们可以做一个计算。如果车速是100km/h,对应27.8m/s。即0.1s车行驶的距离是2.78m,而激光雷达的扫描距离大概是150m,所以前后2帧大部分地方是重合的。因为数据是一帧一帧的,我们需要把上面的说的每一帧进行合并,生成一张完整的地图,有点类似全景照片拼接,这样我们就可以得到一张原始的采集路段的地图。这里用到了点云的配准技术,有2种算法ICPNDT,基于上面的算法,可以把点云的姿态进行变换并且融合。具体的介绍可以参考

红色和绿色的点云配准

上图红色和绿色的部分是从不同方位扫描得到的结果,最后是配准融合之后的结果,可以把地球想象成上图这个模型放大了1000万倍的效果,我们的车相当于一个扫描设备,把每次扫描的结果拼接起来,就制作好了一张点云地图。

点云拼接好了之后,我们就需要在道路上标出路沿,车道线,红绿灯,路口,一些交通标识等。大部分的工作都可以用深度学习结合图像的方法去解决,查找出上面的一些信息并且标识出来,目前有些场景还是需要人工标识出来,比如路口停止线和红绿灯的关系,如果一些特殊场景的车道线等,需要人工去做一些校正。

上面的过程可以说是一个简易的制图过程。实际上这里还需要讲下高精地图的格式,因为如果没有一个统一的格式,高精度地图是没有太多意义的。我们可以把高精度地图分为三层。

  1. 地图图层 地图图层主要是道路的信息,比如道路的路沿,车道线,路口信息,主要是道路的一些基本信息。

  2. 定位图层 定位图层主要是具备独特的目标或特征,比如红绿灯,交通标志,道路的点云数据等。

  3. 动态图层 动态图层主要是一些实时路况,修路或者封路等需要实时推送或者更新的数据。

通过下面的加工流程:

点云地图校准 -> 地图标注加工 -> 高精度地图

这样就生成了一张高精度地图,当然加工过程中首要的目标是提高效率和质量,尽量的采用算法自动化处理会很大的提高效率,这可能是后面地图厂家的核心竞争力。因为地图需要实时更新,谁的效率更高,谁的图就越新,用的人越多,之后的数据也越完善。

转换

转换主要是得到一个通用的自动驾驶系统可以使用的高精度地图。

上面的高精地图格式可能还是原始的数据格式,需要转换为apollo中高精度地图的格式,apollo中高精度地图采用了opendrive的格式,并且做了改进,总之这是一个通用的标准,这个很重要,否则每个厂家的数据如果不兼容,会导致很大的问题,你需要开发一系列的转换工具,去处理不同地图的差异,并且不同的自动驾驶系统和不同的地图厂家采用的方式不一样,会带来很多兼容性问题。


daohu527/Dig-into-Apollogithub.com图标


下面是一个开源高精度地图制作项目:

daohu527/OpenHDMapgithub.com图标

高精度地图制作(二)

之前有写过一篇高精度地图制作的介绍,后面也思考了一些问题,其中比较困扰我的是高精度地图如何做到实时更新?高精度地图的维护成本?最近看了ZENRIN公司关于高精度地图的介绍PPT[1],得到了很大的启发,简单的做一个学习记录。

这个PPT的思路非常清晰,非常建议学习,下载见文末参考链接。下面开始介绍,多图预警,流量党请先收藏再看。


高效的高精度地图创建(使用GPU加速地图制作过程)

首先PPT的主题是"高效的高精度地图创建(使用GPU加速地图制作过程)",也就是说本文主要介绍了如果用GPU加速高精度地图制作过程。


你在东京的时候如何到达目的地?

想象一下你要去东京的某个景点,这时候你拿出手机,打开地图导航,一气呵成。也就是说我们需要东京的地图,才知道自己在哪里,如何去哪里,强调了地图的重要性。

接下来介绍下ZENRIN的历史,创建于1948年,在地图领域耕耘了60年,100%覆盖了日本有住宅区域的地图。

下面开始正式介绍高精度地图。

什么是高精度地图?

相比于传统地图,高精度地图不仅仅提供了道路信息,还提供了车道信息,交通标志,以及这些道路的位置信息,精度比传统导航地图更高,自动驾驶要求的精度在10cm以内。


三维信息

标识了车道线,路沿,红绿灯的三维位置信息。


语义信息

语义信息包括道路的结构化信息(哪里分流,哪里并道),同时标识车道停止线,信号位置等。


高精度地图保存格式

根据更新的需要,高精度地图一般分为几层,其中底图信息层是相对变动最少的,而动态信息层则是实时获取红绿灯的状况,路况信息等需要实时更新的信息,最后统一保存到数据库。


如何制作高精度地图

典型高精度地图制作过程分为3步:数据采集,数据处理,验证


采集车

地图采集需要专门的硬件,包括摄像头,激光雷达,轮速计,IMU和GNSS,一套下来价值不菲。


采集的数据非常大

可以看到采集的数据量非常大,即使这里是每隔2.5m拍一张照片,也就是说对道路做了采样之后的数据依然庞大。


点云注册

点云注册是制作高精度地图的基础,把2次采集的点云拼接起来,就合成了一张完整的道路,具体可以参考autoware的源码。


查找点云中的对象

接着就是查找点云地图中的对象,有些比较稀疏的对象,可以结合摄像头的融合,得出对象的具体信息,也就是说传感器融合在制图过程中非常关键。


制图并且验证

最后的过程就是提取道路几何信息,标注,并且进行质量检查,这些步骤都是在办公室用软件完成的。


高精度地图的挑战

这里提出了高精度地图的几大挑战:大量的数据需要处理,大量的计算时间,需要很多有经验的操作员,需要实时更新。也就是说这些问题也是一直困扰业界的问题。


如何加速制图过程?

这里提出了通过GPU和深度学习来加速制作地图


制作地图需要哪些工作?

这张图片非常好,完整的介绍了整个制作地图需要的步骤,然后逐个介绍如果通过GPU来加速这些过程,我找了下这里提到的"NVIDIA high performance mapping SDK"没找到,不知道是否是定制的一款SDK,没有公开?


点云注册(制作地图过程之一)

通过对比通过CPU的PCL库和GPU的ICP库进行点云注册,效率提高了4.6到5倍。


物体识别、分类(制作地图过程之一)

通过深度学习的场景分割和车道线识别,可以有效的减少人工操作。


制作地图的Pipeline

这张图很关键,讲述了整个高精度地图的流水线制作过程,很值得学习。


对比输出

这是制作高精度地图的最后一步骤,第一步是点云注册,之后是点云和图像融合辅助标识出车道等信息,最后一步原始提取,把上述融合的数据提取出重要的部分,主要是道路的部分,对数据做压缩。


利用反馈来更新地图

为了解决实时更新道路的问题,通过可靠和精确的定位来反馈真实世界的变化,并且把反馈加入到高精度地图中。


概念证明:制作整个日本的地图

这里提出了一个很好的问题,如何制作整个日本的地图,证明工作量的挑战。


日本和美国的区别

由于上述的深度学习用到模型,这里提出了如果要制作日本的地图,那么深度学习模型需要从新用日本的数据训练,这里简单对比了为什么基于美国的模型的数据对比。

我有个新奇的想法是,能不能像秦王扫六合一样,统一整个世界的交通规则?


结论

最后得出2点结论,一是GPU和AI确实可以帮忙自动的创建和更新地图;二是优化针对制作日本地图的流水线。


学习笔记

首要的一点,这个PPT回答了我的一些问题,比如:

  • 高精度地图如何做到实时更新?

通过确认过精确位置的反馈来更新高精度地图,如果指望人主动发起更新可能不现实,但是如果是汽车主动发起,也就是每个车有义务对地图做更新,那么未来技术上还是可行的。

  • 高精度地图的维护成本?

首先采集的数据确实非常大,计算量也很大,但是我们可以通过GPU和AI做加速来解决这些问题,并且也提出了一个很好的问题,证明如何制作整个日本的地图。

最后体会最深的就是关于制作地图的pipeline,并且详细的列出了制作高精度地图的各个过程,以及如何优化,其中图像和点云的融合,还有如何抽取压缩地图信息介绍的都很有启发。

关于英伟达地图SDK,发邮件问了下作者,目前得到的答复如下:

I saw "NVIDIA's High Performance Mapping SDK" in your introduction, but I can't find it in NVIDIA's official website. Is this a publicly released SDK?

No, it’s not released to the public and still under R&D phase, I believe. You may get more precise information if you contact NVIDIA directly.

看来英伟达还在开发这个SDK

下面是一个开源的高精度地图制作项目:

daohu527/OpenHDMapgithub.com图标


高精度地图制作(三)


高精度地图主要用于无人驾驶路径规划,还可以应用于无人驾驶定位,ROI区域过滤等。接下来我们主要来看如何制作高精度地图。

高精度地图制作流程

高精度地图的制作过程分为4个步骤:

  1. 地图采集

  2. 点云地图制作

  3. 地图标注

  4. 地图保存

如图1所示,接下来我们会具体分析每个步骤。

图1 高精度地图制作流水线

1. 地图采集

地图采集是由装备有激光雷达、相机、GPS、IMU等传感器的数据采集车采集完成的,如果没有采集设备,我们也可以直接采用开源的数据集来进行地图制作,以熟悉整个制图流程。

我们采用开源的KITTI[1]数据集来获取原始数据,后续我们会更新推荐的采集设备。图2是高精度地图采集车。

图2 高精度地图采集车

2. 点云地图制作

点云地图的制作主要是把采集好的数据进行加工,我们采用激光雷达数据来进行点云地图的制作。制作的过程简单的来说就是通过激光雷达来扫描整个街道,以建立整个街道的三维模型。因为激光雷达的扫描范围有限,因此我们需要逐帧把激光雷达的数据拼接起来,来获取整个街道的模型,这个过程也被称为点云注册。图3是拼接好的点云地图。

图3 点云地图

目前有2种方法实现地图制作。

  1. Autoware NDT mapping. 采用开源社区Autoware提供的NDT mapping[2]可以实现点云的拼接,从而得到整个街道的三维模型。

  2. 各种离线SLAM建图方法。

目前可以参考的基于激光雷达的SLAM建图方法如下:

  • LOAM

  • Cartographer

  • hdl_graph_slam

  • blam

  • A-LOAM

  • LeGO-LOAM

  • LIO-mapping

  • interactive_slam

这里有一篇NDT的地图构建和定位写的非常好。

LitoNeo:自动驾驶系列:激光雷达建图和定位(NDT)zhuanlan.zhihu.com图标

3. 地图标注

地图标注是在点云地图的基础上,标注出车道线信息、交通标志信息、红绿灯信息等,得出道路的结构化信息。无人驾驶规划控制模块会利用这些道路结构化信息完成路径规划。地图的标注目前主要是依赖人工完成的,当前地图标注主要面临以下2个挑战。

  • 传感器融合 - 由于激光雷达采集的点云数据比较稀疏,并且没有颜色信息,因此需要把摄像头的信息和激光雷达做融合,之后可以获取更加清晰的信息来识别车道线信息、交通标志信息等。

  • 自动化标注 - 采用人工标注的方式无法解决大规模高精度制作的问题,如何实现自动化标注是目前地图标注的主要问题。

通过地图标注工具可以标注出车道线、交通标志、路口、减速带等信息。图4是在点云地图上标注好的高精度地图。

图4 高精度地图标注

4. 地图保存

地图保存主要是把上述标注好的信息保存为固定的格式,目前百度Apollo社区采用的高精度地图格式是Opendrive格式,高精度地图**采用统一的格式标准,以免地图不兼容。

地图服务商对高精度地图做了一部分扩展,把高精度地图分为3个图层:

  • 地图图层 - 保存道路的结构化信息,这部分信息定义了车道线、交通标志、交通规则信息等。

  • 定位图层 - 保存了原始的点云地图,提取出一些特征如电线杆、建筑物、交通标志等。用来做点云匹配定位。

  • 动态图层 - 实时动态的更新一些信息如:当前路况、实时交通规则、前方车祸等。


下面是一个开源高精度地图制作项目:

https://github.com/daohu527/OpenHDMapgithub.com


参考

  1. ^KITTI http://www.cvlibs.net/datasets/kitti/

  2. ^NDT Mapping https://gitlab.com/autowarefoundation/autoware.ai/core_perception




|本文作者:王方浩

|编辑于 2020-03-22



相关文章

业界高精地图产品之Here、Google 、TomTom、Mobileye 地图的生产采集和表述
自动驾驶用高精度地图的大规模制作技术
为何以及如何制作自动驾驶汽车高清地图








SELECTED EVENTS




 

长按二维码识别关注




  • 电话咨询
  • 021-22306692
  • 15021948198
None