前言:这节课主要介绍高精地图相关知识。个人水平有限,有理解错误地方,欢迎大大们批评指出。
CONTENTS:
1、 HD MAP OVERVIEW【高精地图介绍】
2、 OPENDRIVE PROTOCAL【路网协议,这里指高精地图协议】
3、 CLOUD POINT MAPPING【点云地图】
4 、V2X【Vehicle-to-everything ,车用无线通讯技术】
1.1无人驾驶软件框架
图中上:感知、决策规划、控制
图中下:高精地图、定位
感知:如人的眼睛,获取第一手信息的渠道;
决策规划:如人的大脑,决定怎么走,怎么躲避碰撞,从而高效到达目的地;
控制:接收来自决策规划的结果,控制模块上有刹车、油门、方向盘,跟踪上电脑给的轨迹,从而实现无人驾驶的能力;
高精地图:L4级别中,给感知很大支持以及补充,也给规划提供了很高效便利的能力支持,也支持定位达到高精水平;
定位:了解自身的基础模块,上述的感知、决策规划、控制无法进行
1.2 高精地图
【上面两个整合就是得到下面地图信息:点云+道路信息(融合得到)】
高精地图,就是将物理信息,动态细节、静态细节,都在地图中标注出来了:
黄色线表示人行道,然后地图会告诉图中基本信息如红绿灯、人行道的长度宽度,也告诉行人会告诉看哪个红绿灯;绿化带在哪,车道边沿在哪,车道线的软硬【软的可穿过,硬的不行,也可理解为虚实车道线】;绿色线是道路中介线
雷达点云信息,就是采图车【一种专门用于采集道路点云信息以制作高精地图的车辆】经过的路段点云,融合得到的整合点云,放置在高精地图备份信息中;其作用是,精确描绘地面位置,点云的每个坐标点大小、方向,方便定位过程中,采集到同一段路段点云信息时,起到校正作用
1.3 HD MAP(高精地图)VS NAVIGATION(导航地图)
高精地图,是采图车采集制作的;高精地图因为制作流程很漫长,所以更新比较滞后的;高精地图一般保存的是静态信息,动态信息会比较少;对于动态信息,会单独更新。
1.3 高精地图和定位关系
Self-localization(自定位):高精地图本身就是一个自定位系统:将自身的感知的区域和地图拼接,发现一致,同时根据高精地图厘米级精度,确定自身在高精地图位置,从而实现自身定位目的。
Camera&Point cloud(相机&点云):【上面的自身感知区域一般通过这两者获取】
----Pre-processing预处理:例如地图匹配时候,找一些标志性建筑物;剔除数据有问题的帧
----Coordinate transformation坐标变换:不同传感器数据需要进行坐标转换,目的在同一个坐标系下展现环境
----Data fusion数据融合:将传感器数据融合
High precision(高精度):高精度地图和高精度位置匹配,在现有的定位基础上,进一步缩小定位误差
1.4 高精地图和感知(perception)
1)High range visualization(超视距感知):高精地图存储静态信息,实现超视距感知(如图中的××交通灯,无人车无法识别,但是高精地图有保存,可以传给无人车,从而知道这两处交通灯,从而可以做更好更长远的决策与规划)
【强光环境,camera采集的数据直接报废;64线激光雷达有效可用的数据集在100m范围内;毫米波雷达距离远,但是噪声多,感知处理困难】
【对于遮挡类型障碍,感知是没有办法处理的】
【V2X也是超视距感知一种,可以将动态信息传给无人车;当V2X和高精地图组合,则可以达到实际意义的超视距感知,例如图森未来就是这么干的,号称感知范围可达1公里】
2)ROI:高精地图可以缩小感知的ROI(感兴趣区域),从而提高感知精度(感知区域缩小了,算法更好实现,如交通灯位置经过高精地图告诉无人车,只需要识别灯颜色就行,算法就相对简单可以实现了)以及加快感知速度(如,车道外的物体数据,根据高精地图反馈直接忽略掉,有更多的算力处理其他数据)【无人车感知至少10hz,也就是延迟最高不超过100毫秒,所以,ROI的缩小对提高感知速度非常重要】
3)Saving computation:节省算力(从上面ROI作用解析可以看出)
1.5 高精地图和规划(Planning)
图中,左侧是传统地图给的信息,右侧是高精地图提供的信息
1)Lane center(车道中心线):高精地图可以提供这些信息,使得无人车无需浪费算力在识别这些车道实线、车道虚线信息上,使得规划更快。
–Reference line参考线
–Boundary边界
2)Road network(道路网):比如,无人车需要右转,根据高精地图提供的车道网信息,提前变道到靠右的车道,也就是使得规划路线更加合理【为什么不用感知呢?因为旁边的车比较多,感知能力容易失效】
–Merging zone(合并区域,车道合并)
–Junction(路口)【对于预测比较重要】
3)Traffic information:提供一些交通信息给无人车,规划更合理
–Stop sign(停止标志,停车牌)
–Speed limit(速度限制,限速)
【高精地图提供的信息,有可能不依赖感知进行较好的路径规划】
1.6 高精地图产生
以APOOLO HD MAP为例
数据采集:采集车队走需要制作高精地图的区域,任何一个点都需要大量重复采集
数据处理:点云拼接、重复点云的拟和与滤除从而产生一个底图【底图满足在上面做标志的要求】
【点云信息是当前用的主要高精采集方式,信息容易处理,精度也较高,但是采集成本很高;也可以使用摄像头采集】
元素处理:主要是对道路属性的识别,主要针对的是摄像头设备,使用感知能力去识别路牌、标识线如车道线
–元素识别【主要针对摄像头,采集图时候就识别好车道线这些,不是到了无人驾驶时候才开始识别;驾驶时候识别会比较麻烦,耗费时间】、
–点云分类:将一些障碍物区分,如把道路上的动态汽车分类出来,后面剔除掉
元素识别、点云分类,是在不同任务上进行弥补和配合。
人工验证:校验车道线识别是否正确;信号灯、标志牌是否正确;虚拟道路、逻辑关系,这里是加入人类驾驶习惯进行处理的【比如,十字路口没有转弯线的,人工标注(根据人行驶习惯来拟合出转弯线)到高精地图里面】。
1.7 APOLLO HDMAP 高精地图制作之采集车
高精地图采集车的结构样式:相机、激光雷达、GPS差分定位;NVME SSD硬盘【存储采集的数据,这些数据是在采集结束了,再进行处理】、工控PC、主线、GPS接收器
【一辆采集车跑一天,大概产生28T数据】
1.8 采集的数据制作高精地图地图流程(与SLAM制图流程类似)
【slam就是,在环境不是很复杂,光线合适,动态障碍物较少的环境中使用的技术】
传感器数据->视觉里程计(->回环校验)->后处理优化->地图绘制
visual odometry视觉里程计:将传感器数据拼接起来,计算出无人车行驶轨迹,然后将每一帧的图组成局部环境分析;通过轨迹和局部环境分析,一张张图匹配,转移到一张完整的图上;这过程,相当于一个单相环境处理。但是,每帧处理会有漂移累计
回环校验,简单理解,无人车经过一圈,理论来说里程计得到的位置也是初始位置上,但是其得到的是另一位置,那么,将里程计的计算位置和初始位置匹配,对前面里程计误差进行修正,这过程就是回环校验。
回环校验作用:校正视觉里程计每帧处理产生的漂移误差,做到大图之间密切的吻合,避免出现缝隙和漏差情况【传统的slam只是靠视觉来做,但是,无人车大地图中,会使用RTK(高精度定位),并辅助点云信息来做】
后处理优化:进一步处理优化数据,如进一步修正误差
【通过多次的修正弥补,就可以制作大地图了】
地图绘制:局部图拼接,制作地图
1.9 HDMAP AI高精地图制作过程中使用的主流技术
1)多传感器标定:雷达、相机、IMU、GPS,将所有的传感器信息变换到同一个坐标系下进行融合起来【这个不算AI技术】
2)点云处理:运动补偿、三维模型–>特征提取、点云融合–>点云识别
3)视觉处理:图像识别,采用的是离线方式处理
4)多传感器融合:3D->2D 投影 ->元素跟踪/聚类(->过滤&补全)
【高精地图自动化生产是一个重要方向】
【采集车不一定要求每一条车道都要进行跑一遍,进行数据采集,只要精度合适了,就不需要;跑时候,采用车队的方式,从不同的角度来采集,从而从不同角度进行拟合,找到最佳拟合】
【地图制作过程中,经过多次回环校验、后处理优化,达到了较好效果,才进行人工校验】
2.1 OPENDRIVE简介
OPENDRIVE是一个开源的,存放道路图像数据的文档,很好表示道路信息:
----包含真实道路网信息
----开源
----应用广泛
----从2006开始,有许多应用案例
2.2 opendrive 如何表示地图
1)两坐标系:
----Track co-ordinates(Frenet co-codinate):车道坐标系,如上图中s-t坐标系,其起点是某一段道路的原点
----Inertial co-ordinates:惯性坐标系(通常说的世界坐标系)
3)车道坐标系
S:沿车道中心线方向;T:表示道路左右两侧的方向;H:表示的是高度,如果在坐标原点的高处,则取正值。
S/T的正负,取决于坐标系的位置。
4)road道路
Opendrive就是将道路信息划分为下面三组:特征(道路上额外信息)、道路线信息(道路边界在哪,边界类型,道路中间线在哪,道路中间线距离边界多少等)、参考线(如车道坐标系提供的线)
2.3 opendrive 协议文件内容介绍
1)
【个人:文件格式,类似urdf文件格式xml,采用标签形式来填写各种信息】
基本概念:
opendrive格式xodr:基于xml的一种数据结构。
(https://blog.csdn.net/weixin_44108388/article/details/111303985
)
【这一节都是介绍该文件里面标签含义,看怎么描述道路网信息】
2)xodr文件所需要的依赖库:
----matplotlib,numpy
----lxml:解析xml的python工具库
----opendriveparser:opendrive解析库,将xodr转化为python数据结构【老师自己写的,这一部分可以借鉴而已,因为目前获取不到该文件,但是可以知道有这么一种思路方向参考吧】
3)编写xodr文件时候,使用jupyter工具【使用python编写函数,读取编写的xodr文件,相应的效果会显示出来】,检验编写文件实际效果
4)如何绘制参考线
4-1)
–Line:没有曲率
----Spiral:也称为欧拉螺旋形,曲率是线型变化的
----Arc:弧线,常量非0的曲率
----Cubic polynom:立方多项式,曲率不确定
4-2)
参考线本质上是一种坐标变换,从车道坐标系变换到世界坐标系
5)
计算出圆心角和半径
圆的半径是曲率的倒数:r=1/c (c是曲率)
s是弧长,s=2ΠrQ ,Q表示的是角度
三角公式计算出新的坐标点位置
车道线角度:h’=h+sc
【对于很弯曲的道路,一个三次多项式无法表达,可以拆分位多段,从而可以使用多个三次多项式来表示】
6)欧拉螺旋线绘制
计算很复杂,计算图形学里已经给出了合理的公式,可参考:
https://en.wikipedia.org/wiki/Euler_spiral
【介绍欧拉螺旋线】
http://www.opendrive.org/tools/odrSpiral.zip
【官方提供的绘制代码c实现;个人并没有找到】
【这一节就是实操怎么使用opendrive文件绘制地图的路网】
7)更多高精地图格式
LaneLet:
----定义一种更高效便捷的道路描述文件(ref: P. Bender, J. Ziegler and C. Stiller, “Lanelets: Efficient map representation for autonomous driving,” 2014 IEEE Intelligent Vehicles Symposium Proceedings, Dearborn, MI, 2014, pp. 420-425, doi: 10.1109/IVS.2014.6856487.)
----每个x、y点都进行了存储,边界的位置和曲率也重新定义了
----利用网格表述道路关系
【小插曲:无人驾驶商业化可能还要一定时间,但是,高精地图商业化会很快,由于其对于L2,L3级别的驾驶都是有需求的,百度地图、Google地图,四维图新都在做;由于高精地图涉及的地理细节信息很多,属于国家管控的,所以只有一些demo而已】
8)例子:Apollo OpenDrive
----更为复杂的路网情况,针对L4级别的自动驾驶进行优化,包含了更多道路类型:例如分叉汇入区域,环岛区域
----提供路标更多详细信息,减少在线计算,比如:路口红绿灯的精确位置,提供检测和识别区域的效率
直接将红绿灯位置信息保存到高精地图里面
3.1 Lidar&Image
1)传感器数据融合:camera-lidar-radar
----深度信息:XYZ
----图片信息:RGB
----关键对象分类与检测
2)iDAR:相机RGB+lidar的3D点云
3)Slam:传感器位置估计+粒子滤波校正
4)Mapping:重构全局地图
参看资料:
https://www.aeye.ai/idar/
F. Zhang, D. Clarke and A. Knoll, “Vehicle detection based on LiDAR and camera fusion,” 17th International IEEE Conference on Intelligent Transportation Systems (ITSC), Qingdao, 2014, pp. 1620-1625, doi: 10.1109/ITSC.2014.6957925.
3.2点云匹配
1)依赖库说明
----OpenCV3:目前最常用也是用途最广的图像处理依赖库,熟悉基本操作,比如cv::Mat、imread
----Eigen:C++下最常用的矩阵运算库,类似于Matlab,对矩阵的描述和计算都非常方便,任何计算都是矩阵
----PCL:Point Cloud Library,点云计算库,方便对点云进行操作和可视化
2)安装方法:
----Eigen库使用源码拷贝的方式或者apt-get安装
----Opencv安装可以用ppi源来安装,也可以用源码编译安装
----在Ubuntu下使用apt-get安装PCL
3)使用说明
代码库:JointMapping
–cmake .
–make
–./joinMap
–pcl_viewer ./map.pcd
3.3 基础概念
1)相机内参:描述了相机将外界物体如何成像为图片的内部参数(还有一个相机内部参数:畸变参数)
2)相机外参:描述了如何把点从世界坐标系转换到相机坐标系(坐标系很多,世界坐标系、车道坐标系、相机坐标系、车辆坐标系等)
3)像素坐标系:也叫图像坐标系,灰度图:0-255(8位),深度图:0-65535(16位),彩图:多通道(RGB、BGR、RGBA等等)
4)刚体运动方式:刚体运动是个六个自由度的运动,XYZ坐标平移,rpy选装(roll,pitch,yaw);相机运动就是一个刚体运动,其坐标系是一个移动坐标系
5)相机坐标系中的物体坐标pc,而在世界坐标系pw,如何转换?假设一个T来表示坐标系转换:
pc=Tpw
6)旋转坐标:
–两组坐标系的旋转是由两组坐标基的内积空间决定的,我们定义为R
----这里的e和t是两个空间坐标系的基坐标
----旋转矩阵其实描述的就是相机的旋转
7)平移坐标系:
----平移向量定义为t,因此坐标系之间的转换结合起来就可以表述为:
8)齐次坐标系、变换矩阵
----上述的线型表述形式虽然做到了坐标变换,但是这个形式非常不利于多次变换,无法做到矩阵计算,因此引入齐次坐标系:
至此,这里的T就和我们说的坐标变换T是同一个了,也称为变换矩阵;而增加了一个维度的坐标系[a 1]T (表示列矩阵)也简化为b,也称为齐次坐标系
9)欧拉角
----yaw:绕Z轴旋转
----pitch:绕Y轴旋转
----roll:绕X轴旋转
10)四元数(Quaternion)
其是一种扩展复数,用于解决紧凑性(不产生任何冗余)和奇异性(在空间任何情况下连续,比如经纬度在90维度时经度是有奇异的)的平衡,表述如下:
----s表示实部;v表示虚部;因此也就有了实四元数和虚四元数的区分
----直观理解:空间中所有旋转都可以用四元数来表示,对于I,j,k本身的几何意义可以理解为一种旋转,但不是简单的围绕XYZ轴旋转的,实部主要是用于消除奇异性
例子:
----某旋转单位向量
其四元数表达式为:
----旋转后的点P’可以表示为:
----用旋转矩阵表示为:
----因此,旋转矩阵和四元数是可以相互转化的
上述这些基本概念,是机器人学的一个空间基础
3.4 相机模型
1)相机成像的原理是针孔相机模型:
----P表示物理世界中的一个点;P’表示成像中模型中的位置;坐标分别为XYZ和X’Y’Z’
----相似三角形关系:
2)相机内参
将成像坐标P’切换到像素坐标系中,要进行两步转换:缩放和原点平移
假设P’的像素坐标为[u v]T(表示列矩阵),变换坐标就是:
把这个形式切换到齐次坐标系:
这里的K就是我们说的内参矩阵,也就是每个相机需要校准的内参
3)相机外参
注意一下,这里的P是相机坐标系下的位置,而其世界坐标系下的坐标Pw,可以根据旋转平移来得到:
----这里有齐次变换到非齐次坐标的变换
----因此,相机姿态R,T(t?是不是指的是上面公式的)又称为相机外参
----外参会随着车辆移动而移动,因此我们高精地图构建过程中就是需要去估计这个外参,同时也是车辆移动轨迹
4)数据结构
–PGM数据格式:Portable Gray Map,最简单的灰度图数据格式,这里我们拿来表示把点云压成平面的深度信息(0-65535),其中0表示没有检测到深度
–png:RGB信息的常用格式
–pose:5组7状态,txt文档,[x y z qx qy qz qw],平移向量和旋转四元数
5)代码示例:
–根据相机内参计算RGB和点云的对应关系
–根据各图相机外参把点云和RGB融合进行图片融合,构成全局地图
【源码是老师的,没有放到云端,下面就是部分截图,仅供参考】
通过该函数,可以获取得到点云图
【下面偷个小懒,截个图算了,哈哈哈】
4.1对比
高精地图提供的是静态感知;而V2X,提供的是动态感知。
V2X:低延迟、强鲁棒性、动态网络、超远视距
4.2领域相关知识
C-V2X是中国指定的,杰出代表是大唐、华为;DSRC是美国日本制定的,杰出代表是Sony、AT&T
OBU指的是车载网络信号;路网信息、道路信息远程通过LET-V架构传给无人车;V2X局域网相对比较封闭,不是开放网络,所以安全性比较高
个人小结:这一节课,主要是介绍高精地图,介绍其和各个模块的作用,然后介绍怎么制作的。制作高精地图,需要使用opendrive协议的工具,里面价绍了一个比较难的知识点就是坐标转换。后面简单介绍一下可以提供动态信息的V2X。比较遗憾的是,代码没有搞到,只有部分截图。
#####################
不积硅步,无以至千里
好记性不如烂笔头
图片版权归原作者所有
感恩授课老师的付出
感觉有点收获的话,麻烦大大们点赞收藏哈