HDMap: 矢量的地图git
咱们用立体相机 和 roadmark.算法
咱们引入了路信息 的8-bit 表示.优化
现状 现存的方法没有彻底的利用地图信息, 只是估计了部分pose.spa
咱们展示了6DOF的定位, 用了立体相机.3d
咱们利用了粒子滤波和一个6DOF的优化器. 平均偏差在 - 0.3m,.orm
低精度的航拍图和向量的2D图.blog
[3] 用航拍图提取的roadmark和poles做为路标. Pole状的特征从LiDAR点云中提取, roadmark像箭头, 中止线和人行道用图像检测. 而后用这些估计位姿.it
[4] 用SVM(Support Vector Machine) 来定义车道线像素, marking是用canny edge来检测, 而后估计了每一个marking的中心, 最后经过匹配车道线和航拍图的中心来估计位姿.io
[6] 用了航拍图提取的墙的方向来修正航向角.class
[7] 用了2D数字地图来存储建筑
[9] 用点云的广度信息来估计位姿.
[10] 用NMI(Normalized互信息).
[11] 用立体相机和3D地图来定位.
Naver Labs 的地图11x11km的须要17Mbyte.
用了[13]的矢量地图.
从立体相机得到视差图和语义label.
把hdmap从shapefiles转船成8-bit图.
用粒子滤波估计4DOF(3DOF和平移和yaw)的位姿. 经过图像匹配和全局HDmap图. query的patch和全局HDMap图都是8-bit图, 因此能够用与计算. 最后在非线性优化在算6DOF.
在匹配前, 咱们把HDMap向量数据->8-bit表示, 叫作tile, 保存在图像.
咱们把上图的shapefile进行转化. 第1/2/3 bit表示lane, stop lines, 和signs.
上图一个块就是一个tile. 每一个像素都是以8-bit表示, 每一个bit表示一个label.
有一个HDMap中心树, 这个中心数是由每一个tile的中心组成的.
咱们经过投影有类别的点云(从立体相机)到z平面(鸟瞰投影). 这个8-bit图像表示叫作subpatch, 最后会组合成一个patch.
一个patch有 \(l_{patch}\) (5) 个序列的 subpatch.
投影方程:
它把全局坐标系里的点云投影到了图像坐标(z-plane). 投影的结果包含图像坐标和label信息: \(^{p_{0}} P^{(k)}=\left\{u^{(k)}, v^{(k)}, l^{(k)}\right\}\)
...
\(\overline{\mathbf{T}}_{V}^{G}\) : 表示最终优化的位姿
\(\mathbf{T}_{V}^{G}\) : 里程计的推算位姿
粒子滤波 有三个状态量(\(t_x, t_y, r_z\)).
粒子权重会根据bit-wise的匹配分数来更新.
对于匹配, patch图像 (\(I_{p_i}\))是经过 粒子位姿\(\hat{\theta}_{p_{i}}\)和里程计位姿\(\theta_{p_i}\) 来旋转的 ---- 绕着 patch图的中心点 \(c_{p_i}\)
给定global HDMap tile图\(I_G\) 和 patch图 \(\hat{I_{p_I}}\) , 咱们作了AND操做:
粒子的权重是用上式更新的.
在更新粒子的权重以后, 最后的车辆位姿是用更新后的权重估计的. top 3% 的粒子的平均pose是最终的pose估计.
由于粒子滤波使用里2D图像匹配, 只有 \(t_x, t_y, r_z\) 能够用这个方法计算. 全局高度(\(t_z\))是用HDMap的高度信息更新的.
最后的优化处理了roll和pitch.
从点云得到平面方程会被转换到车辆坐标, 用RANSAC算法.
..
没啥.