Apollo星火计划学习笔记——第五讲(Apollo自动驾驶定位技术)
文章目录
- 前言
- 1. 定位的作用
- 1.1 定位和地图: 一对孪生兄弟
- 1.2 参考系
- 1.3 定位的作用
- 2. 定位用到的算法
- 2.1 GPS
- 2.1.1 GPS 原理
- 2.2 RTK(GPS的扩展)
- 2.3 惯性测量单元
- 2.4 GNSS
- 2.5 先验地图定位
- 2.6 NDT算法
- 2.7 实时定位和建图
- 3. Apollo定位框架介绍
- 3.1 目录结构
- 3.2 RTK模块
- 3.2.1 RTK模块入口,输入,输出
- 3.2.2 RTK模块底层逻辑
- 3.3 NDT模块
- 3.3.1 NDT模块入口,输入,输出
- 3.3.2 NDT模块底层逻辑
- 3.3.3 NDT地图构建
- 3.4 MSF模块
- 3.4.1 MSF模块入口,输入,输出
- 3.4.2 MSF模块底层逻辑
- 3.4.3 MSF模块融合框架
- 4. 实践
- 4.1 制作NDT地图
- 4.2 启动NDT模块
- 声明
前言
Apollo星火计划课程链接如下
星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2
星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12
1. 定位的作用
自动驾驶汽车面临的第一个问题:从哪里来,到哪里去?
运输是指某一物体 (人或者是货物)通过运输工具(或交通工具与运输路径),由甲地移动至乙地,完成某个经济目的的行为。
1.1 定位和地图: 一对孪生兄弟
定位,获取当前的地理位置信息,通常要通过地图来记录和表示。
先有定位还是先有地图(鸡和蛋) ?
通过定位来绘制地图,而通过地图来表示车辆当前的位置
。
1.2 参考系
参考系:地理位置有多种表示方式,地理学上大致可以分为2种。
➢相对位置
——相对位置则是透过标示目标物与其他事物之间的关系,以表达事物位置的标示法。当沿着大部分主要公路行驶时,都有里程标志,指示到下一个城镇的距离。这些信息表示您相对于即将到来的地点的当前位置。
➢绝对位置
——绝对位置表达标记事物在空间中单一 、不会因观察者所在位置改变而更改的标示法。基于特定的地理坐标(例如经度和纬度)来引用地球表面上的某个位置。
1.3 定位的作用
定位模块除了需要告诉自动驾驶系统自动驾驶汽车当前的位置之外,还提供更多的信息,实际上定位模块还提供车辆当前的运动状态。
除了位置之外,定位模块还提供:车的航向,速度,加速度,角速度等状态信息。
2. 定位用到的算法
2.1 GPS
GPS全球定位系统(Global Positioning System, GPS),是一种以人造地球 卫星为基础的高精度无线电导航的定位系统,它在全球任何地方以及近地空间都能够提供准确的地理位置、车辆行驶速度及精确的时间信息。GPS自问世以来,就以其高精度、全天候、全球覆盖、方便灵活吸引了众多用户。
全球四大导航系统:
➢美国全球定位系统
➢欧盟“伽利略”系统.
➢俄罗斯“格洛纳斯”系统
➢中国北斗卫星导航系统
2.1.1 GPS 原理
全球定位系统由以下三个部分组成:空间部分(GPS卫星)、地面监控部分和用户部分。
GPS定位的基本原理是:至少测量出当前位置与4颗卫星的距离和对应时间,通过解方程即可求得当前位置在地球坐标系下的位置(x,y,z)(x, y,z)(x,y,z)。
为什么是4颗呢?因为除了需要确定(x,y,z)(x,y,z)(x,y,z)三个位置参数,还需要一个卫星提供相对零点时间从而消除时间误差。
2.2 RTK(GPS的扩展)
RTK ( Real - time kinematic,实时动态)载波相位差分技术,是实时处理两个测量站载波相位观测量的差分方法,将基准站采集的载波相位发给用户接收机,进行求差解算坐标。
卫星定位是存在误差的,误差既来自系统的内部,也来自外部。例如卫星信号穿透电离层和对流层时产生的误差,还有卫星高速移动产生的多普勒效应引起的误差,以及多径效应误差、通道误差、卫星钟误差、星历误差、内部噪声误差等。这些误差,有些可以完全消除,有些无法消除或只能部分消除。它们影响了系统的准确性和可靠性。
- 基准站先观测和接收卫星数据。
- 基准站通过旁边的无线电台(数据链),将观测数据实时发送给流动站(距离一般不超过20公里)。
- 流动站收到基准站数据的同时,也观测和接收了卫星数据。
- 流动站在基准站数据和自身数据的基础上, 根据相对定位原理,进行实时差分运算,从 而解算出流动站的三维坐标及其精度,其定位精度可达1cm~2cm。
利用先验信息进行定位。
2.3 惯性测量单元
惯性测量单元(英语: Inertial measurement unit,简称IMU )是测量物体三轴姿态角(或角速率)以及加速度的装置。
一般的,一个IMU内会装有三轴的陀螺仪和三个方向的加速度计,来测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。为了提高可靠性,还可以为每个轴配备更多的传感器。一般而言IMU)要安装在被测物体的重心上。
参数指标:
陀螺仪
:角度偏差为0.1°/s−0.001°/h0.1° /s - 0.001° /h0.1°/s−0.001°/h。
加速度计
:加速度偏差为100mg−10μg100mg - 10μg100mg−10μg。
由距离计算公式s=12at2s = \frac{{\rm{1}}}{{\rm{2}}}a{t^2}s=21at2可以得出,100mg和10μg100mg和10μg100mg和10μg偏差的加速度计在60s之后的测量误差分别是3528m和0.35m,差距非常大。
2.4 GNSS
GPS + IMU组合导航
- GPS定位非常方便,但在高楼、隧道和停车场等场所会出现多径效应和信号衰减,导致测量精度下降。GPS的更新频率也比较低,一般为1s刷新一次。
- 为了解决上述问题,IMU通常用来辅助GPS进行定位,IMU不需要接收信号,不受信号质量影响,而且更新频率快,工作频率通常可达100Hz以上,可以弥补短期GPS刷新频率不足的问题。但是IMU有累计误差,在一段时间后需要校准, 所以目前无人车主要通过GPS和IMU融合定位。
表2-1 GPS和IMU优劣势对比
GPS | IMU | |
---|---|---|
更新频率 | 低( 1HZ ) | 高( 100HZ) |
累积误差 | 无 | 有 |
外部依赖 | 有 | 无 |
2.5 先验地图定位
GPS+IMU的局限性:
GPS+IMU的组合极大的提高了定位的精度和鲁棒性,但还是有一些特殊场景,例如城市高楼,树荫以及比较长的隧道等场景下,定位精度会受到影响。
因此引入了新的方法:先验地图
通过离线的方式,事先建好当前区域的3维地图,也就是我们常说的高精度地图定位图层。
先验地图:一场寻宝游戏 。
以下是一段寻宝的过程“从岛的北面上岸,向前走,是一大片绿地,在上面可以看到一棵橡树和一棵松树,还有一个绞架,从绞架开始沿直线朝橡树走20步,宝藏就在那里。”
先验地图的核心就是拿当前观测到的特征和事先建好的地图做匹配。
先验地图的2大核心问题
。
1.特征提取和特征匹配( Feature matching )
2.重定位( Relocation )
特征提取和特征匹配
●ICP ( iterative closest point )
●NDT ( Normal Distributions Transform )
●基于优化的方法
重定位( Relocation )
●在环境中找到自己的初始坐标,例如
在停车场中启动的时候。
2.6 NDT算法
NDT ( Normal Distributions Transform )
NDT非常快速和准确,适合应用于大规模数据,但它对初始化也很敏感,需要足够准确的初始猜测,因此它通常用于从粗到细的对齐策略。可以节省计算量。
NDT三种特征类型
●球型特征
●线型特征
●面型特征
2.7 实时定位和建图
先验地图的好处非常明显,通过事先建立好地图,然后在线做匹配从而得到目标当前的位置。但环境会发生改变,如果周围的环境变化了,而地图没有更新,则会得到错误的定位信息。
有没有能够实时定位和建图的方法呢?
SL AM是Simultaneous localization and mapping缩写,意为“同步定位与建图”。根据类型划分分为:
- 视觉SL AM
- 激光SL AM
视觉SL .AM算法
●ORB-SL AM
●LSD-SLAM
●VINS-Mono
激光SL AM算法
●Cartographer
●LOAM系列
目前的精度已经足够,鲁棒性有待加强,也可以用于大规模分布式实时建图。
3. Apollo定位框架介绍
3.1 目录结构
3.2 RTK模块
3.2.1 RTK模块入口,输入,输出
3.2.2 RTK模块底层逻辑
RTK模块接受GPS和IMU的消息,发布定位消息和定位状态,给其它模块使用。
底层逻辑:
●可以看到RTK模块的核心在于GPS+IMU设备给出结果的精度,这些信息的解算由GPS和IMU设备提供,当然也可以直接拿到GPS和IMU的原始数据进行解算。
3.3 NDT模块
3.3.1 NDT模块入口,输入,输出
3.3.2 NDT模块底层逻辑
NDT模块接受GPS、IMU和激光雷达点云消息,通过和事先建好的NDT地图进行匹配,得到车辆当前的定位消息和定位状态,发布给其它模块使用。
底层逻辑:
- NDT模块依赖事先建好的NDT定位地图,地图的构建可以通过SLAM框架得到,之后保存到本地,根据车当前的位置加载地图,进行NDT匹配得到当前的位置信息。
- 当前NDT模块对GPS和NDT做了简单的融合,在NDT失效的情况下,输出GPS的定位结果。
- 定位地图的制作通过ndt_ map_creator来完成。
3.3.3 NDT地图构建
准备工作:首先准备录制好的数据包,从包中解压出点云和点云当前的pose,对pose进行校正之后,保存在指定的文件夹。
NDT建图过程:
- 从文件中读取点云和pose
- 根据点云的位置选择对应的node
- 对点云强度信息采样并且放入对应的Node
3.4 MSF模块
3.4.1 MSF模块入口,输入,输出
3.4.2 MSF模块底层逻辑
MSF模块接受GPS、IMU和激光雷达点云消息,通过NDT输出的结果和组合导航输出的结果进行融合,得到车辆当前的定位消息和定位状态,发布给其它模块使用。
底层逻辑:
●MSF模块对GPS和NDT的结果进行融合,从而提高系统的鲁棒性。因此如何融合是MSF的关键。
3.4.3 MSF模块融合框架
MSF模块接受GPS、IMU和激光雷达点云消息,通过NDT输出的结果和组合导航输出的结果,通过卡尔曼滤波进行融合,输出最后的定位结果。
4. 实践
云实验
实验分为2个大的步骤:
制作NDT地图。根据解压事先录制好的record包,得到激光雷达点云信息和自动驾驶车辆姿态信息,然后校正激光点云姿态信息,最后调用NDT制图工具生成NDT地图。
启动NDT模块,查看结果。制作好NDT地图之后,接下来,我们就可以运行NDT定位模块,它会加载NDT地图,它的输出是融合之后的定位信息。
4.1 制作NDT地图
解压数据包,得到原始的激光雷达点云信息和车辆姿态信息,需要注意点云的cloud_topic信息,要根据自己系统中发布的点云topic进行匹配,如果不清楚,可以通过cyber_record info查看数据包中的topic信息,从而找到激光雷达的cloud_topic。
解压好数据包之后,通过imu的信息对车辆的位置进行插值,得到校正之后的车辆pose。
有了激光雷达点云信息和准确的pose之后,根据这些信息生成NDT地图,注意这里采用的是NDT的强度信息,因此如果点云中缺少强度信息,则实现不了定位。
ndt_map_creator --pcd_folders=/apollo/data/pcd --pose_files=/apollo/data/pcd/poses.txt --resolution_type=single --resolution=1 --zone_id=50 --map_folder=/apollo/modules/localization/map/ndt_map/local_map
4.2 启动NDT模块
首先我们需要根据车辆的情况修改以下配置
修改地图路径,我们的地图在“/apollo/modules/localization/map”中,修改“global_flagfile.txt”中的“–map_dir”为当前路径。
vi /apollo/modules/common/data/global_flagfile.txt
--map_dir=/apollo/modules/localization/map
修改zone_id和雷达外参,根据地图的UTM zone,修改zone id,例如北京的zone_id=50,修改激光雷达的外参文件,以及lidar的topic,要与数据包,或者实际发布的topic一致。
vi /apollo/modules/localization/conf/localization.conf
local_utm_zone_id = 50
lidar_extrinsics_file = apollo/modules/localization/msf/params/velodyne_params/velodyne64_novatel_extrinsics_example.yaml
lidar_topic = /apollo/sensor/hesai40/compensator/PointCloud2
上述配置完成之后,启动NDT模块
cyber_launch start /apollo/modules/localization/launch/ndt_localization.launch
接着播放数据包,模拟传感器发送消息
cyber_recorder play -f cyberecord_MKZ109_default_10_20220218103727_20220218103737.record -c /apollo/sensor/gnss/odometry /apollo/sensor/hesai40/compensator/PointCloud2 /apollo/sensor/gnss/ins_stat -l
最后通过cyber_monitor查看定位信息
cyber_monitor
声明
本人所有文章仅作为自己的学习记录,若有侵权,联系立删。
Apollo星火计划学习笔记——第五讲(Apollo自动驾驶定位技术)相关推荐
- Apollo星火计划学习笔记——第七讲自动驾驶规划技术原理2
文章目录 前言 1. 泊车系统介绍 1.1 泊车任务 1.2 关键 Use Cas--车位类型 1.3 关键 Use Cas--环境条件 1.4 泊车过程描述 1.5 泊车状态操作和用户接口定义 1. ...
- Apollo星火计划学习笔记——第七讲自动驾驶规划技术原理1
文章目录 前言 1. 规划技术功能概述 1.1 自动驾驶系统 1.2 规划的作用 1.3 规划主要功能 1.3.1 路由寻径(Routing) 1.3.2 行为决策 1.3.3 轨迹规划 2. Apo ...
- Apollo星火计划学习笔记——Apollo决策规划技术详解及实现(以交通灯场景检测为例)
文章目录 前言 1. Apollo决策技术详解 1.1 Planing模块运行机制 1.2 Apollo决策功能的设计与实现 1.2.1参考路径 Reference Line 1.2.2 交规决策 T ...
- Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践
文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...
- 自动驾驶定位技术-马尔科夫定位
Localization Github: https://github.com/williamhyin/CarND-Kidnapped-Vehicle Email: williamhyin@outlo ...
- 自动驾驶定位技术之争:融合定位才是出路
讲座名称<自动驾驶定位技术之争:融合定位才是出路> 此次分享围绕以下四点:1.高精度定位为何需要多种传感器:2.视觉定位的优缺点:3.雷达定位的优缺点:4.传感器融合的关键技术. 讲师:李 ...
- Apollo星火计划学习笔记第四讲2——高精地图定位模块
Apollo学习笔记 零.目录 一.定位的作用 二.定位用到的算法 2.1 GPS 2.2 IMU 2.3 GNSS(GPS+IMU) 2.4 先验地图定位 2.5 实时定位和建图 2.6 小结 三. ...
- Apollo星火计划学习笔记——第四讲Part2 Apollo定位模块详解与实践
引言 内容概要,学习目标 了解自动驾驶定位的作用 熟悉常见的自动驾驶定位方法 掌握整个Apollo定位模块框架 独立开发定位模块 1. 定位的作用 1.1 定位及其相关知识点 定位: 获取当前的地理位 ...
- Apollo星火计划学习笔记第二讲——自动驾驶调试及仿真实践
Apollo学习笔记 零.目录 一.自动驾驶的开发流程 1.1 引言 二.Apollo调试工具的使用 2.1 实验内容 2.2 实验流程 三.Apollo仿真工具的使用 3.1 实验内容 3.2 实验 ...
最新文章
- MySQL中MyISAM引擎与InnoDB引擎性能简单测试
- 网站优化中能有效提升网站打开速度的技巧有哪些?
- python获取包下的所有对象_Python访问COM对象的comtypes包简介
- 【记录一下】从0到1 我的python开发之路
- 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
- 对contentoffset的理解
- Welcome to Swift (苹果官方Swift文档初译与注解八)---53~57页(第二章)
- 【课程作业】表达学习 人脸图像复原 实验记录
- 全国程序员工资最新统计,区块链工程师比算法工资高!
- matlab中常用符号
- 数学建模matlab案例,数学建模案例matlab实用程序百例
- Vue+element ui+springboot实现用户头像修改
- css不同大小字体底部对齐
- 31个惊艳的数据可视化作品,让你感受“数据之美”!
- 字节面试算法题:用集合中的数凑小于target的最大数(Java实现,各类用例均通过)
- VS code(Visual Studio Code)乱码解决方法
- 2020年12月统考练习题
- 全球及中国墙绘机行业运营模式及市场供需预测报告2022-2028年
- C++实现骰子涂色算法
- ROS 2 Eloquent Elusor安装和使用汇总
热门文章
- html5 fieldset 样式,HTML5 fieldset 标签
- DirectX10 游戏的美好未来
- 全志A33获取Root权限
- 计算几何之圆与圆的交点
- 「镁客·请讲」速石科技陈熹:让高性能云计算“如虎添翼”,最优化地配置云资源... 1
- Apipost,程序员居家协同办公利器!
- hiai和鸿蒙的关系,HiAI
- Word批量删除空格引发的学习
- ssm+java计算机毕业设计基于web的食堂采购管理的设计与实现q0kag(程序+lw+源码+远程部署)
- 树莓派最轻便的图形界面连接(无网线、无路由)