因为城市NOA 的开发过程中,十字路口这类场景非常不好处理,个人对路径规划没有什么基础,只知道深度优先,广度优先,A*,Dijkstra等算法,不知道在矢量地图中如何使用?因此花几天时间读几篇论文看看到底在NOA 中的十字路口需要什么样的地图?
什么是矢量地图?
我基于论文《VectorMapNet: End-to-end Vectorized HD Map Learning 》的输出来看,
In VectorMapNet, we represent map elements as a set of polylines that are easily linked to downstream tasks (e.g., motion forecasting), and model these polylines with a set prediction framework. The overview of our idea is presented in the Figure above.
论文中说,在矢量地图中,我们表征地图元素作为一系列的几何线,它们是容易去连接下游任务的,例如运动预测,编码这些几何线与一系列的预测任务。
These map elements include but are not limited to road boundaries, lane dividers, and pedestrian crossings, which are critical for autonomous driving.
输出包括道路边沿,车道线和人行横道。
看图片右边的情况,经过Polyline Generator 后,输出Polyline。这是由关键点+类别组成的。这就和车道线的关键点检测方法有点类似了。
图片中 最右边的是VectorMapNet 输出的矢量地图。我们看中间的HDMapNet,这个的表达形式有点不同。
HAMapNet 论文中是这样说的
The overview of HDMapNet. Four modules parameterize HDMapNet: a perspective view image encoder, a neural view transformer in image branch, a pillar-based point cloud encoder, and a map element decoder. The output of the map decoder has 3 branches: semantic segmentation, instance detection and direction classification, which are processed into vectorized HD map.
输出的是三个分支:语义分割,实例检测和方向分类。然后被后处理变成矢量地图。HAMapNet 是对每个分割后的像素的实例和方向进行了分类。然后再通过后处理成矢量地图。
对于“vector map 路径规划”的问题
如果提问的是代码开发问题,我们可以提供一个基于常见库(如OpenCV或类似的地图处理库)的路径规划解决方案和实例代码。
路径规划的解决方案
1、数据准备:首先,你需要一份vector map数据,通常这种数据是地理信息系统(GIS)数据的一种形式。这些数据可以包含道路网络、地形信息等。
2、路径规划算法:选择合适的路径规划算法,如Dijkstra算法、A*算法等。这些算法可以从起点到终点计算出最优路径。
3、地图处理:使用计算机视觉或GIS相关库处理vector map数据,提取道路网络等信息。
4、实现路径规划:在处理过的地图数据上应用路径规划算法,得到路径。
实例代码
import cv2 # 用于图像处理,可替换为专门的地图处理库
import graph_search # 假设的图形搜索库,用于路径规划算法
# 加载vector map数据,转换为可用于计算的格式
vector_map_data = load_vector_map() # 假设的函数,实际中需要读取和处理数据
# 提取道路网络等信息
roads = extract_roads_from_vector_map(vector_map_data)
# 构建图模型,节点为路网交叉点,边为路段
graph = build_graph_from_roads(roads)
# 定义起点和终点
start_point = ... # 用户输入或其它方式获取
end_point = ... # 同上
# 使用图形搜索库找到路径
path = graph_search.find_path(graph, start_point, end_point)
# 输出或使用路径
print(path) # 或根据需要进一步处理和使用路径信息
这段代码是一个非常简化的示例。整体上感觉,需要一份可靠的矢量地图就可以实现规划了。
文章目录
- 什么是矢量地图?
- 对于“vector map 路径规划”的问题
- 路径规划的解决方案
- 全局的规划目录
- 局部的规划目录
- Open Planner 工程目录
- fast_planner工程目录
- lane_planner(使用vector_map)实战目录
- 车道选择流程目录
全局的规划目录
(A1)【全局路径规划】基于定位的全局航线的录制方法
(A2)【全局路径规划】曲线拟合的方法–Dubins曲线与Reeds-Shepp曲线
(A3)【全局路径规划】图搜索的路径探索方法–DFS\BFS\DFS-ID、贪心算法、Dijkstra和A*、JPS、.hybird A*、
(A4)【全局路径规划】基于采样的方法–RRT类算法、PRM算法、Lattice planner等
(A5)【全局路径规划】基于地图的方法–vector_map、Voronoi_map
(A6)【全局路径规划】智能算法的方法–蚁群算法、动态规划DP等
(A7)【全局路径规划】覆盖式路径规划
局部的规划目录
(B1)【路径插值与抽稀篇】路径插值与抽稀方向–线性/双线性插值、步距抽稀、等长抽稀、垂直限制抽稀、道格拉斯-普克(Douglas-Peuker)DPR抽稀、去除共线点抽稀等
(B2)【路径平滑篇】路径平滑滤波与拟合–算术方法、优化理论方法、滤波器方法、曲线拟合方法(三五次样条曲线、贝塞尔曲线、B样条曲线)、基于地图方法等
(B4.1)【轨迹优化篇】基于曲线实现速度规划、基于逻辑实现速度规划
(B4.2)【轨迹优化篇】线性加权轨迹代价损失评分,轨迹多选一方法–DWA_planner、Open_Planner、lexicographic_planner
(B4.3)【轨迹优化篇】基于控制的方法实现轨迹避障
(B4.4)【轨迹优化篇】基于优化理论,梯度下降迭代优化使得轨迹形变方法–Teb_planner、MinimumSnap轨迹生成与优化、无人机的硬软约束后端轨迹优化
(B4.5)【轨迹优化篇】基于地图的方法–VFH、VFH+、VFH*算法
(B4.6)【轨迹优化篇】基于Frenet车道线坐标系,采用DP、QP速度解耦进行局部规划–EM_planner
Open Planner 工程目录
(C1)论文解读《Open Source Integrated Planner for Autonomous Navigation in Highly Dynamic Environments》
(C2)工程解读
fast_planner工程目录
(D1)前端kinodynamic A* 动力学路径搜索
(D2)后端轨迹优化。BSPline 曲线拟合+非线性优化
(D3)碰撞检测
(D4)控制指令
lane_planner(使用vector_map)实战目录
(E1)apollo的OpenDRIVE格式
(E2)Autoware使用的lanelet2格式
(E3)Autoware的lane_planner(使用vector_map)
车道选择流程目录
(F1) 调研
- 接受多条路径
- 计算所有路径的当前位置的最近傍点
- 最近傍点的车道和现在行驶的路线设定
- 检测当前路径的左右路径
- 将当前路径最近傍点的车道变更标志作为该路径的车道变更标志保持
- 寻找最近邻右转或左转的标志点,生成艾尔米内插的路线,将该点和预定变更车道的车道的目标点定义为车道变更用的路径
- 不变更车道时,将当前路径、最近傍点、车道变更标志分别publish
- 更改车道时,分别对车道变更用的路径、与之相对的最近傍点、车道变更标志进行publish