点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

摘要(Abstract)

在非常有限的内存和计算能力的条件下实现准确定位是下一代汽车序列的一大挑战。本文提出了基于几何图元的定位算法,该几何图元的表示形式紧凑,对于其他任务(如规划和行为生成)更有价值。这些图元缺乏独特的签名,这使得检测和地图元素之间的关联非常不明确。我们通过在线构建局部地图来避免传递过程中的歧义,这对于提高运行效率至关重要。此外,我们基于鲁棒的位姿图优化引入了一种新的框架来融合与里程计观测的关联。

我们根据城市场景中记录的30分钟以上数据评估定位框架。我们的地图具有小于8KB/km的存储效率,并且以50Hz的定位更新频率实现了较高的定位精度,平均位置误差小于10cm,平均偏航角误差小于0.25°。

1.引言(INTRODUCTION)

到目前为止,汽车序列还无法准确定位自身。由于下一代汽车序列将使用高清地图,因此准确定位变得越来越重要。高清地图提供有关例如车道、道路基础设施等,精度达到厘米。这些信息将是弥合当今在感知、场景理解、规划和行为产生方面的缺陷的关键,从而将汽车序列的自主性提高到一个新的水平。为此,下一代系列汽车必须能够以厘米级精度定位在高清地图中。向汽车序列引入高度精确的定位的主要挑战是计算能力和内存使用的可靠性和效率。基于GNSS的定位非常有效,但由于遮挡、多径和多变的天气状况,其定位不够可靠。通过将GNSS与里程计融合在一起(例如来自IMU或摄像机),可以改善这些问题。但是,这些方法可能会失败,例如在初始化阶段条件不好时。因此,基于GNSS的定位被认为是不可靠的。其他方法使用定位专用的3D地图。基于专用3D地图的定位都是高度准确的,但需要大量内存用于专用定位地图。

如果仅使用特定的结构或对象,则可以减小地图大小:在许多情况下,基于道路标识的定位可以实现厘米范围内的定位精度。另一种方法是使用路灯、交通标志和树木等立杆结构作为地标。特别是在城市场景中,立杆结构经常出现,可以用于精确定位。房屋角落也显示出潜在的定位特征,但更流行的是用于室内定位的墙。由于并非每种类型的特征都无处不在,因此所有上述方法都缺乏鲁棒性和可靠性。

我们针对资源有限的下一代汽车序列提出了高度精确的自我定位问题的解决方案。我们的主要贡献是:

•一组定位特征,它们可以提高内存的使用效率,并可用于其他任务,例如规划和行为生成(请参阅第二章

•在线构建的局部地图,用于将检测与地图元素相关联时解决歧义

•一种新开发的位姿图调整算法,用于基于异步和延迟观测实现鲁棒定位

在地图上的评估(请参阅第四章)表明,我们的方法可以在充满挑战的城区场景中实现高度准确和可靠的定位(请参见第五章,图1中的快照)。

图1:具有定位位次(绿色箭头)和图元检测的评估驾驶快照

2.定位特征(LOCALIZATION FEATURES)

特征的选择对整体定位性能有重大影响。我们基于两类标准选择特征:第一类关注准确性。这包括最常用的标准,例如特征应易于检测,频繁出现,视点和天气不变,仅举几例。第二类标准与效率有关。我们的特征应具有紧凑的表示形式,以提高存储效率。此外,这些特征应可用于定位以外的其他任务,例如规划和行为生成。这将使地图中的专用定位层变得多余,并且进一步无需在系统上运行其他检测器。根据上述标准,我们发现立杆、立面和道路标识是合适的。在下文中,给出了关于不同类型的特征的更多细节。

A. 立杆(Poles)

在道路场景中,经常有很多标志物,如交通信号灯,路灯和树木。它们都是持久的静态对象,因此适合定位。此外,由于立杆是高大的结构,即使汽车遮挡了下部,也可以看到它们。标志物和交通信号灯是道路基础设施的功能元素,无人驾驶汽车需要对其进行检测以进行规划和产生行为。为了检测立杆,我们使用3D LIDAR用[15]中类似的方法进行测量。我们通过立杆与地面的交点、半径和倾角将立杆存储在地图中。最后两个属性用作弱信号,以区分不同的立杆。这有助于建图和定位的立杆在传递过程中创建关联。

B. 立面(Facades)

基于立面的定位是受以下事实推动的:在使用GNSS时,高层房屋会降低定位质量。此外,由于房屋的大小,可以从远距离检测房屋。房屋立面的几何变化很少见,因此地图可以长期使用。除定位外,立面还可以用作导航和推断可观测空间的精准目标地址。我们使用3D LIDAR检测立面。我们使用平面来近似立面的几何形状,这在大多数情况下是合适的。在地图中,检测到的立面缩小为与地面的交叉,并存储为2D线段。

C. 道路标识(Road Markings)

道路标识是为了易于识别而设计的。选择它们的颜色相对于街道其余部分来说更为醒目。所以,从街道上分割道路标识相对容易。除了易于检测之外,道路标识还频繁出现,这使其易于定位。不利之处在于道路特征会定期发生,因此在将检测与地图元素相关联时存在许多歧义。可以使用其他特征并通过构建局部地图来解决此问题(请参阅第III-B节)。道路标识检测已经在汽车序列中用于车道协助。此外,道路标识的类型(例如,虚线、直线或停止线)定义了对于行为产生和规划很重要的规则。为了检测,我们使用了立体摄像机和方法[20]。检测表示为两个2D点,它们描述了标记长轴方向上的中心线。另外,还要存储标识的类别。

图2:定位框架概要图

3.定位框架(LOCALIZATION FRAMEWORK)

A. 概览(Overview)

定位框架可以分为四个层,即传感层、检测层、关联层和优化层(见图2)。第一层包括用于定位的传感器。摄像头和LIDAR用于检测定位特征。此外,GNSS接收器用于对当前位姿进行粗略估计,测距单元提供局部运动估计。探测层由道路标识,立面和立杆的探测器组成。关联层将检测结果作为输入,并将其与全局地图中的特征相关联。这是一个两个阶段的过程。首先,通过使用里程计将对过去和现在的检测累积在局部地图中。这增加了关联步骤中的检测次数,从而避免了歧义。其次,地图匹配器使用来自GNSS的粗略位姿估计以及定位的最后位姿估计作为先验,以找到局部地图和全局地图中要素之间的最佳关联。在最后的优化层中,基于特征关联对和里程计观测,使用位姿图BA来更新位姿。

B. 局部地图生成器(Local Map Generator)

并且停用损失函数以放弃鲁棒性。

4.建图框架(MAPPING FRAMEWORK)

我们的地图生成方法可以分为四个部分。首先,基于融合了GNSS位姿的视觉特征点的车辆轨迹估计。第二,将检测结果从局部参考系转换为地图参考系。第三,将潜在地描述相同元素的检测进行聚类。最后,将聚类的检测合并到单个地图特征。

图4:德国辛德芬根的道路

5.结果与评估(RESULTS AND EVALUATION)

A. 数据集(Dataset)

为了进行评估,我们使用实验车辆BerthaONE收集了数据。对于此数据集,我们使用了四个平整安装在车顶上的Velodyne VLP16 LIDAR,两个位于挡风玻璃后面的BlackFly PGE-50S5M摄像机,一个Ublox C94-M8P GNSS接收器以及一个融合了转向角和车轮速度的里程计单元。用球形目标物作为摄像机-LIDAR和LIDAR-LIDAR的外在参照物,可以精确地校准传感器的设置。棋盘格用于校准摄像机内参和摄像机之间的外参。

数据集记录在德国辛德尔芬根中心(见图4)。它包括不同的日期、白天的不同时间和不同的天气情况下相同轨道的三次驾驶。3.8公里的赛道单驱车大约需要10分钟。

我们之所以选择这条路,是因为两个原因:首先,它代表着房屋和道路基础设施建设在内的一般市内场景。因此,即使密度不同,我们所有的定位特征也都存在。第二个原因是,该轨道被认为对自动驾驶具有挑战性。道路大多狭窄,因此准确的定位对于安全至关重要。此外,基于GNSS的定位条件很差,因为高层房屋经常遮挡大多数GNSS卫星。有很多急弯和一个环岛交叉路口,使快速定位更新对于车道保持很重要。另一个挑战是交通繁忙,通常会遮挡传感器的部分视场。

B. 真实地况(Groundtruth)

我们的定位框架的设计目的在于实现厘米级的定位精度。这就给定了评估所需的地面数据的准确性。我们生成以下内容:

如前所述,我们在同一轨迹上有了三次驾驶记录。其中之一我们称为建图驾驶,用于生成地图。其他我们称为评估驾驶,用于评估相对于地图的定位精度。我们使用基于具有视点特征的位姿图BA的建图方式。我们可以同时解决建图驾驶和评估驾驶的BA问题,就好像它们是单次驾驶一样。因此,地图和评估驾驶将一同注册。可以通过分析定位噪声来估计注册精度,定位噪声在位置1cm以下,在偏航角0.1°以下。

C. 建图结果(Mapping Results)

通过建图驾驶,我们检测到33k道路标识,20k立杆和90k立面。我们的地图框架将这些检测结果合并到大约600个道路标识,500个立杆和760个立面。平均而言,将55个道路标识,40个立杆和118个立面合并为一个地图元素。立面地图元素受到了更多检测,因为立面是可以从远处检测到的较大对象。整个地图的大小约为30KB,每公里小于8KB。与我们的groundtruth方法生成的特征图所需的2.1GB相比,这非常紧凑。

D. 定位精度(Localization Accuracy)

我们通过评估驾驶来评估我们的定位框架,并使用通过地图驾驶生成的地图。我们根据位置误差和偏航角误差评估定位精度。位置误差通常分为横向位置误差和纵向位置误差,因为它们受到的限制是不同的。横向位置误差必须小于50cm才能保持在车道内,但实际上,为了确保安全,我们的目标是小于15 cm。纵向车道误差的界限不太严格,因为车道在纵向上不会很快离开。小于25cm的纵向位置误差足以确保安全。

本文利用数据采集车在同一路段进行三次行驶,其中第一次行驶用于生成高精度地图(采用BA方法),其余两次行驶用于定位算法的验证。实验结果如下:

在下文中,我们评估了不同特征集的准确性(请参见表I)。

仅使用立面时,我们在位置和方向上的误差已很小。特别是和较低。由于大多数房屋的立面都与道路方向正交,因此对侧面方向具有很强的约束力,因此可以实现较低的。此外,由于立面延伸得很远,因此可以进行精确的偏航角估算,这使也低。仅当检测到面向行驶方向的立面的频率较低时,才给出纵向方向的约束。这就解释了为什么比大两倍。平均位置误差为12cm,仅在立面上进行定位已经可以在市内道路上获得准确的结果。

与仅基于立面相比,仅基于立杆的定位显示较高的和。由于立杆(表示为2D点)没有单一约束方向(例如立面)(表示为2D线),因此在纵向和横向方向上的误差几乎相同。通常,可以通过使用远距离检测来准确估算偏航角。由于与立面相比,立杆是小物体,因此只能在附近找到。因此,与仅使用立面相比,仅使用立杆进行定位的更大。仅使用立杆时的平均位置误差为12cm,类似于仅使用立面时的结果。

在这条道路上,仅基于道路标识进行定位更具挑战性,因为道路标识并不总是存在。一些没有标记的区域必须依靠里程计进行衔接。因此,与基于其他功能的定位相比,准确性明显差很多也就不足为奇了。此外,在某些地方,周期性会导致定位在纵向方向上移动一个周期长度。这就是为什么更高的原因。

图5:具有所有功能类型的一个评估驱动器的结果,颜色代码:

低动态(绿色),正常动态(蓝色),高动态(红色)

图6:在时间点60s处的环形交叉路口。来自定位框架(黄色)的位姿,和地面真实轨迹(红色)。

与仅使用一种要素类型相比,将所有要素类型用于定位都可以显著提高准确性。主要原因是特征的可用性更高。此外,特征的优势互补有利于提升精度。例如,立面提供准确的横向定位精度但纵向定位精度较差。在这种情况下,道路标识或立杆在纵向上能强烈约束。图5显示了一个评估驾驶的误差图。我们注意到,除了60s,220s和440s的峰值外,和的方差很小。在移动时,偏航角的误差必然导致横向位置误差的增加。这就是为什么和峰值同时出现的原因。我们注意到,这些峰值全都是尖锐曲线,偏航率高达30°/s。图6显示了时间点60s的情况,其中和最大。导致此结果的原因有多种:首先,由于时间戳不同,要生成成对的地面位姿和定位位姿,我们必须执行插值。时差最长为50毫秒。我们执行球面线性插值,这对于非线性旋转(改变偏航率)而言并不理想。例如。对于最大30º/s的偏航率线性上升,最坏情况的误差为0.38º。另一个错误源是由于延迟。传感器延迟(对于我们的相机,最长为50ms)加上检测和关联时间总计可以超过100ms。因此,优化窗口的最后大约100ms仅由测距数据组成。我们的里程表单元是汽车上的内置系统,我们只能在数据到达我们系统的时间标记数据。因此,当我们假设偏航角速度为30º/s的阶跃时,33ms的延迟可能会导致1º偏航角的误差。此外,我们注意到地图中存在由LIDAR检测到的错误特征。我们的LIDAR是旋转速度为10 Hz的旋转传感器。我们通过补偿由里程计单元估算的车辆运动来生成360度伪单次扫描。同样,里程计单元的延迟很快会导致动态驾驶出现明显的错误。将这些误差源相加可以说明动态曲线中的驾驶在和中的峰值。

纵向方向的位置误差比横向方向的噪声更大。这是可以预期的,因为与横向相比,限制纵向位置的特征更少。

总体而言,位置误差在小于25厘米的时间内占98%,最大误差为38厘米。在位姿图优化器上使用100ms的运行时限制可以达到这些结果。表一显示,运行时间限制为50ms和20ms时,结果会恶化,但对于自动驾驶仍然足够。将运行时限制设置为低于20ms会越来越多地导致异常值。此外,我们仅基于GNSS评估了定位。我们使用了ublox提供的解决方案。与基于特征的解决方案相比,这些错误要大得多。

6.结论与后续工作(CONCLUSIONS AND FUTURE WORK)

在这项工作中,我们提出了一个定位框架,该框架使用基本的几何图元作为定位标志。我们对真实数据的评估表明,在市内场景中,满足了下一代汽车序列定位的准确性,可靠性和效率方面的要求。平均位置误差小于10厘米,证明道路标识,立杆和立面是在城市道路上精确定位的合适地标。通过局部地图生成和位姿图优化的鲁棒性来实现可靠性。98%的时间小于25cm的位置误差证明了这一点。通过几何图元的紧凑表示,可以达到8KB/km的存储效率。通过将位姿图优化运行时间限制在最小20ms,可以体现出更好的计算效率。

在实际情况下,即使最好的定位方法也会在一段时间内失败。因此,我们希望通过一种措施来扩展我们的框架,以评估当前的定位质量。除了基于特征可用性和关联代价的标准外,我们还计划使用其他交通参与者(例如汽车和行人)来检测丢失的定位。

本文仅做学术分享,如有侵权,请联系删文。

推荐阅读:

  • 专辑|相机标定

  • 专辑|3D点云

  • 专辑|SLAM

  • 专辑|深度学习与自动驾驶

  • 专辑|结构光

  • 专辑|事件相机

  • 专辑|OpenCV学习

  • 专辑|学习资源汇总

  • 专辑|招聘与项目对接

  • 专辑|读书笔记

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近1000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

使用基本几何图元在道路上实现准确高效的自定位相关推荐

  1. Ogre procedural 几何图元库

    概述:  Ogre procedural 几何图元库是Ogre3D的基本图元库.使我们可以快速的创建几何图元,比如立方体, 球, 圆锥等. 几何图元包含:  Box 盒子  RounderBox 弧形 ...

  2. IGES文件解析1——几何图元(更新中...)

    IGES文件解析1--几何图元 文件格式 开始段 全局段 数据索引段DE 数据参数PD 结束段 几何图元 圆弧(100型) 复合曲线(102型) 圆锥曲线(104型) 大量数据(类型 106) 平面( ...

  3. 第一天开通博客,记录自己在编程道路上的点点滴滴

    第一天开通博客,第一天写随笔:今年刚毕业,希望能用博客记录自己在编程道路上的点点滴滴,会记录自己在编程过程中遇到的问题及解决办法,也会记录自己的程序人生,分享出来和大家共勉. 希望自己能早日成为一名快 ...

  4. osg画线_osg 基本几何图元

    //osg 基本几何图元//ogs中所有加入场景中的数据都会加入到一个Group类对象中,几何图元作为一个对象由osg::Geode类来组织管理.//绘制几何图元对象时,先创建一个Geometry对象 ...

  5. 快速找到由程序员到CTO发展道路上的问路石

    快速找到由程序员到CTO发展道路上的问路石 本文选自<我也能做CTO之程序员职业规划 >一书 高阳兄发过来本书前六章样章时,我正在上班,任务比较紧,精神高度集中,却还是止不住地走神要翻来看 ...

  6. LeetCode 2211. 统计道路上的碰撞次数

    文章目录 1. 题目 2. 解题 1. 题目 在一条无限长的公路上有 n 辆汽车正在行驶.汽车按从左到右的顺序按从 0 到 n - 1 编号,每辆车都在一个 独特的 位置. 给你一个下标从 0 开始的 ...

  7. 如何在读研读博的道路上迅速失败?

    把导师当傻子, 甚至形成了逆反心理, 老师说什么或者做什么, 都会在心里或者私底下数落他. 老师给一个方向弄不出来的话, 要么是老师岁数大了不搞科研, 或者是他根本就不愿意指导自己. 三天两头就想换方 ...

  8. 励志!26岁单臂博士生:我想在科研的道路上发更多高质量论文

    "人生应该坚持不懈地努力."尽管3岁时因车祸失去右臂,只能左手握笔,袁鑫的字却力透纸背,正如他的人生,坚韧有力. >>>> 靠左手敲代码,武汉科技大学计算机 ...

  9. 道路上下行是什么意思_了解道路禁止符号 春节压岁钱少填罚款

    [爱卡汽车 用车 原创] 虽然对于离开学校很久的成年人们来说,压岁钱基本都是向外付出,很少再有收到的情况.但毕竟年终奖也是一笔可观的年底收入,可以犒劳一下忙碌了一整年的自己.若是这些开心的资金都要给过 ...

最新文章

  1. Leangoo大讲堂—北京站精彩回顾
  2. Java历程-初学篇 Day01初识java
  3. access学习网站
  4. Linux中的组合键
  5. IO 模型知多少 | 代码篇
  6. ORACLE数据库表空间查询
  7. highCharts图表入门简介
  8. hdu1789----贪心+回溯
  9. 微信小游戏(打飞机1)
  10. CorelDRAWX4的VBA插件开发(三十二)调用C++实现一键智能群组(第1节)成品演示以及逻辑和声明浅析
  11. html自动弹出公告代码,可定时自动关闭的弹出层广告窗口代码
  12. Scaffold widgets require a MediaQuery widget ancestor
  13. C#编译报错:名称必须是命名空间名
  14. python实现SCP文件上传服务器
  15. 怎么使用Google GSC(原google站长工具)?
  16. Xilinx 黑金ZYNQ开发板AX7020,利用VIVADO进行FPGA程序烧录
  17. c语言自定义函写计算器,C语言实现计算器功能
  18. 网络安全课程设计Java实现DES加密算法(可视化界面)代码+设计文档
  19. 对盖得排行APP内容方面的一些看法
  20. Git 常用指令记录

热门文章

  1. 如何彻底关闭windows update
  2. “官宣”:程序员被正式纳入新生代农民工!
  3. 阿里大佬告诉我,想学习设计模式,得先学好这些硬核技能
  4. redis灵魂拷问:如何使用stream实现消息队列
  5. 并发编程中一种经典的分而治之的思想!!
  6. 漫画谈一下Maven依赖,百分之90的同学不知道!
  7. 一份可以同时满足传统与互联网业务的Dev平台攻略
  8. 探索JAVA并发 - 如何减少锁的竞争
  9. 看完这篇!Linux网络基础知识通关!
  10. 使用Hadoop和ELK进行业务代码分析!分分钟捉到Bug!