写点什么

自动驾驶复杂环境下高精度定位技术

  • 2019-07-06
  • 本文字数:2621 字

    阅读完需:约 9 分钟

自动驾驶复杂环境下高精度定位技术

今天为大家分享下,自动驾驶在复杂环境下的高精度定位技术。



定位/导航负责实时提供载体的运动信息,包括载体的:位置、速度、姿态、加速度、角速度等信息。


自动驾驶对定位系统的基本要求


  1. 高精度:达到厘米级。

  2. 高可用性:保持它的稳定性,自动驾驶测试已经从封闭的场景转移到更开放的场景,这要求我们定位系统能处理更多更复杂的情况。

  3. 高可靠性:整个定位的输出是感知,规划与控制的输入,如果定位系统出现偏差将会导致很严重的后果。

  4. 自主完好性检测:因为我们系统的可靠性只能做到非常接近 100%,但是难以达到真正的 100%,这要求我们在没有办法提供准确的输出的时候,能及时的警告用户,采取措施,避免发生事故。对它的要求就是要保证较低的虚警率与漏警率。



为了满足自动驾驶对导航与定位的要求,采用的方法有:


  • 惯性导航 INS

  • 全球导航卫星系统 GNSS

  • 高精地图与线上激光 lidar 点云匹配定位

  • 里程计

  • 结合车辆运动特性的运动约束



接下来介绍下惯性测量单元 IMU ,目前自动驾驶常用的按照精度分为两类:


一种是基于光纤陀螺 FOG 的 IMU ,它的特点是精度高,但同时成本也高,一般应用于精度要求较高的地图采集车辆。


第二种是基于 MEMS 器件的 IMU ,它的特点是体积小,成本低,环境适应性强,缺点是误差大,如果把它应用在自动驾驶测试车辆中,需经过比较复杂的处理。



为了有 IMU 输出的原始数据得到导航定位输出,需要进行捷联惯性导航 ( SINS ) 解算,包括这样的几个模块:


  1. 陀螺输出角速度信息积分得到姿态

  2. 采用姿态信息对加速度计输出的比力做转换,由载体坐标系到导航坐标系

  3. 重力计算,有害加速度,地球自转角速度等补偿

  4. 加速度信息积分得到速度与位置


由于积分过程的存在,造成输出误差随着工作时间发生积累。



下面介绍下全球卫星定位导航,它是基于测定的绝对定位方案,误差不会随着工作时间以及载体运动发生变化。


目前全球卫星导航的一个显著的特点是由单频单系统向多频多系统转变,比如我们国家的北斗导航系统,俄罗斯的 Glonass ,欧盟的 Galileo 等。这幅图是北京某一天所能接收到的卫星信号的星空图,可见基本可以保证在任意时间我们都能收到 35 颗以上的卫星。多频多系统在极大的程度上提高了我们导航系统的可靠性与可用性。



另外一个显著的特点是精密定位,在民用领域的广泛应用,尤其是基于载波相位动态差分的 RTK 技术在智能驾考,无人机,精密农业等领域得的了普遍的应用。在自动驾驶领域他的优点是:


  • 厘米级定位精度

  • 双天线测向


精密定位在提高定位精度的同时,由于需要基站信息,这也增加了整个系统对于基站(基站服务提供商)和网络信号的依赖。



因为 GNSS 是基于卫星定位的导航,具有非常脆弱的特点:


我们在城市里经常会遇到城市峡谷,使我们没办法接收低仰角的卫星信号,极大的增加了我们定位的因子,增大了定位结果的不确定性。另外一个是信号干扰,车辆本身及加装设备等使车辆的电磁环境非常恶劣,如果处理不得当,会严重影响接收机的收星及观测值的质量。



接下来是基于高清度地图匹配定位,它是事先建立的高精度地图,配合我们线上的激光点云,可以做到绝对定位,厘米级高精度,它的一个显著的局限性是增加了我们对高精地图的依赖。



另外一个是轮式传感器 Wheel Sensor ,自动驾驶目前获得车轮的信息有两种方法:外接和内置。


外接,它的特点是分辨率和精度都非常高,缺点是结构复杂,可靠性难以保证,通常用于我们的地图采集车。


内置传感,它的特点是无需外接设备,缺点是精度低,误差比较大,如果用于测试车辆需要经过很多的处理才可以。


另外,IMU 的敏感轴,很难保证与车的运动方向是完全平行的,所以需要做一个精确的标定,除了轮速的输出,要得到有用的车速信息和里程信息,需要做一些推算,需要一些车轮的参数,而车轮的参数会随着我们的工况发生变化,所以我们需要对它做在线的估计。在这个过程中,我们的计算误差会随着运动的距离发生积累,且会受到路况的影响,比如轮胎打滑或者过减速带。



我们还可以结合车辆的运动特点做些约束。比如我们可以通过一些方法检测车辆是否处于静止,这样就可以假设在静止的时候速度等于 0,可以保证我们在极端的情况下,我们的定位结果不发生很大的误差。我们可以加入一些车辆横向或者纵向的约束条件加入到多传感器融合的系统中。



在获得传感器输出数据之后,我们整个多传感器融合定位,包括几个部分:


  1. 数据预处理,将惯性导航解算,GNSS 的质量控制,雷达数据的误差补偿,还有基于轮式传感器的计算,以及在线估计和补偿。

  2. 基于雷达数据和高精地图的匹配定位。

  3. 四个核心模块:

  4. ZUPT/ZIHR/NHC,车辆运动约束部分

  5. INS Alignment,惯性导航初始对准部分

  6. Integrated,组合部分

  7. FDI,故障检测与隔离部分

  8. 安全相关的模块,就是对于输出的完好性监测。



目前我们的导航定位优化方法,还是基于传统得卡尔曼滤波器,其优化的一个指标是使状态方差达到最小。在建立 Kalman Filter 模型的时候,首先要选择状态变量,目前我们还是基于导航参数误差+车载的传感器误差,作为状态估计。然后状态方程通过一步预测和量测更新,实现我们在时间域的递推。



下面简单介绍下故障诊断与隔离,传统的软件方法有很多,比如卡方检测等,另外是硬件上的冗余。如果我们可以配备多套 GNSS/IMU ,我们可以配合软件解析余度实现多个冗余,来提高可靠性。


典型场景



首先是一个非常典型的场景,视野非常开阔,这时我们可以利用,Gnss/Rtk ,Scan Math Pose 作为量测量校准 IMU/ Wheel sensor 误差,并作出补偿。



这个场景是我们的车辆运行在一个激光雷达纵向特征非常不明显的桥上,导致我们的高精定位在纵向上失效情况。解决办法是使用 GNSS, IMU,Wheel Sensor 信息,检测 scan match 纵向失效情况, 使其不影响定位系统输出。



上面这个场景是我们的激光雷达由于点云被遮挡,导致我们与高精地图匹配定位失败,这要求我们整个系统能不依赖于匹配定位,也能输出非常可靠的结果。



这俩个场景是对于卫星导航来说非常恶劣的场景,需要我们从传感器融合部分去处理,使其具有野值的剔除能力,以及对它参数的自适应调节能力。



这个场景更极端,是车辆穿越高架桥的下面,导致我们整个卫星定位导航失败,此时需要我们的系统能独立于卫星导航,也能可靠的工作,得到可靠的结果。


作者介绍


崔留争,Pony.ai 资深研发工程师。中国科学院大学工学博士,负责 Pony.ai 多源信息融合定位技术研发。曾就职于 DJI ,负责高精度定位技术,Gnss/Ins 组合导航等相关的研发工作。


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s/BH6scp_WnA3VLh1oNmJJWA


2019-07-06 08:005684

评论

发布
暂无评论
发现更多内容

Druid 加载 Kafka 数据后查询和清理数据

HoneyMoose

模块4作业

青鸟飞鱼

花几天时间肝了一个在线制作词云图网站

Python研究者

Python 可视化 词云图 Python JSON 8月日更

数据探索

南湖职业技术学院机械狗

SpringCloud微服务日志经kafka缓冲写入到ELK

Rubble

kafka Spring Cloud ELK 8月日更

北鲲云超算接入GPUA100,让AlphaFold2轻松使用

北鲲云

Druid 加载 Kafka 数据时直接提交一个 supervisor

HoneyMoose

如何从 0 到 1 设计 B 端产品?

蒋川

后台开发 产品开发 后台 后台管理系统 tob产品

oeasy教您玩转vim - 8 - # 追加文本

o

Go并发之CSP并发模型、协程并发

Regan Yue

协程 CSP Go 语言 8月日更

学习总结

青鸟飞鱼

FastApi-07-查询参数校验

Python研究所

FastApi 8月日更

架构实战营-学习总结

泄矢的呼啦圈

架构实战营

oeasy教您玩转vim - 7 - # 从头插入

o

番外2. OpenCV 中摄像头捕获与视频处理与常见问题解决方案

梦想橡皮擦

8月日更

阿里云-云开发平台存储篇——给应用接上后端存储能力

若尘

阿里云 云开发 8月日更

Java 操作 Office:POI之word图片处理

程序员架构进阶

Java 架构 自我提升 实战问题 8月日更

【Vue2.x 源码学习】第二十八篇 - diff算法-问题分析与patch优化

Brave

源码 vue2 8月日更

【Flutter 专题】75 图解基本 TabBar 标签导航栏 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

netty系列之:Event、Handler和Pipeline

程序那些事

Java Netty nio 程序那些事

🏆【Java技术之旅】「编译器专题」重塑认识Java编译器的执行过程(消除数组边界检查+公共子表达式)!

洛神灬殇

Java 编译器 8月日更 JIT编译器

kubernetes入门:harbor个人私有仓库傻瓜式搭建

小鲍侃java

8月日更

Vue进阶(十三):MOCK

No Silver Bullet

Vue Mock 8月日更

Druid 使用 Kafka 数据加载教程——下载和启动 Kafka

HoneyMoose

Druid 使用 Kafka 将数据载入到 Kafka

HoneyMoose

oeasy教您玩转vim - 9 - # 换行插入

o

十大排序算法--堆排序

Ayue、

排序算法 8月日更

软通动力 OpenHarmony 师资培训班隆重开启,聚焦高校教师赋能

开放原子开源基金会

Druid 加载 Kafka 数据时通过控制台来提交一个 supervisor

HoneyMoose

Vue进阶(十四):config/index.js 配置文件详解

No Silver Bullet

Vue 8月日更 配置文件

模块四作业

俊杰

架构实战营

自动驾驶复杂环境下高精度定位技术_AI&大模型_DataFunTalk_InfoQ精选文章