概述
Autoware csv格式的矢量地图字段名定义是比较神奇,而且由于这个定义是Asia公司提供的没有开源[1]。如果不特地做下记录的话,还是挺难一下子记住的。作为Autoware planning模块的主要输入,好好看一下它,对理解Autoware决策规划的相关代码还是有挺大帮助的。
准备工作
基本元素
首先如果让我们来定义高精地图,我们会从哪里出发?我想我的话会从点线面这样的基本模型出发。那Autoware呢,也是如此。在我之前分享的矢量地图消息定义[2]目录下,Point.msg,Line.msg、Area.msg这三个文件就分别对应点线面这三个元素,那就一个个来介绍吧。
Point
点是构成车道线、停止线等道路信息最基本的元素,但在Autoware的矢量地图格式里是较复杂的,下表是我对它格式的注解。
字段名 | 数据类型 | 描述 |
---|---|---|
pid | int32 | point id,点的索引值,用于管理 |
b | float64 | Latitude,点的纬度 |
l | float64 | Longitude,点的经度 |
h | float64 | Height,点的海拔 |
bx | float64 | Latitude in x coordinate,点的纬度转化到地图x轴上的坐标值 |
ly | float64 | Longitude in y coordinate,点的经度转化到地图y轴上的坐标值 |
ref | int32 | reference num,对应的是日本矩形平面的编号[4],它跟点的经纬度值转成xy坐标值所参考的原点有关联 |
mcodeX | int32 | mcode1,2,3这三个字段值属于magic number范畴,它们的作用没法明确,但不会影响后续代码阅读 |
Line
两个点确定一条直线,再添加前一条线跟后一条线的索引值,就构成了Autoware矢量地图格式里最基本的线,如下所示。
字段名 | 数据类型 | 描述 |
---|---|---|
lid | int32 | line id,线的索引值 |
bpid | int32 | Begining Point id,起始点索引 |
fpid | int32 | Finishing Point id,后一个点的索引 |
blid | int32 | Begining Line id,前一条线的索引 |
flid | int32 | Finishing Line id,后一条线的索引 |
Area
面是由多条线构成的,从这一特点出发可以推定组成面的这些线肯定相互连接,所以我们只需要第一根线跟最后一根线的索引即可,如下所示。
字段名 | 数据类型 | 描述 |
---|---|---|
aid | int32 | Area id,区域编号 |
slid | int32 | Started Line id,起始线索引 |
elid | int32 | Ended Line id,终点线索引 |
道路元素
有了上面的基本元素,就可以开始在矢量地图中构建更为复杂的道路元素了。我还是从点线面模型出发,讲解下Node.msg、Lane.msg、WayArea.msg这三个最基本道路元素的消息格式吧。
Node
其实就是点,很好理解。因为在 Autoware Tools 中画矢量地图的话,每画一条白线,停止线啥的都是先 Add Node,也就是添加一个点,注解如下。
字段名 | 数据类型 | 描述 |
---|---|---|
nid | int32 | Node id,节点索引 |
pid | int32 | Point id,对应点的索引 |
Lane
Lane是车道线,除了基本线的特征,还需要包含路网信息,所以定义很复杂,如下所示。
字段名 | 数据类型 | 描述 |
---|---|---|
lnid | int32 | Lane id |
did | int32 | Dtlane id,虽然名字包含车道,但实际上它是一个点 |
blid | int32 | Beginning Lane id |
flid | int32 | Finishing Lane id |
bnid | int32 | Beginning Node id |
fnid | int32 | Finishing Node id |
jct | int32 | 这个应该无英文全称,但它用来指定当前车道分支/合并模式,跟底下blid2-4和flid2-4有关 |
blid2-4 | int32 | 这里的blid2,3,4可能会让人疑惑,但其实很好理解,就是合并到当前车道的上一车道不一定就直行的一条,左右转的车道也有可能合并到当前车道 |
flid2-4 | int32 | 同样,我们当前车道不一定只能往前面的车道行驶,在红绿灯路口会有既能直行又能左右转的车道 |
clossid | int32 | Crosswalk id,每条车道前面可能有人行道,人行道也有对应的索引,这个字段有待考证,但我是这么理解的 |
span | float64 | 这个应该也无英文全称,但它代表当前车道线的长度 |
lcnt | int32 | Lane count,同向的车道数 |
lno | int32 | Lane number,本车道线在同向车道中的编号,从左往右开始数 |
lanetype | int32 | Lane Type,用来确定是直行车道还是左右转车道 |
limitvel | int32 | Limit velocity,最高速度 |
refvel | int32 | Reference velocity,参考速度 |
roadsecid | int32 | Road Section id,路段索引,所谓路段就是并排的车道线,这个字段应该是为了方便程序查找相邻车道线而设的 |
lanecfgfg | int32 | Lane change Flag,当前车道是否允许变道,一般红绿灯路口不允许变道 |
linkwaid | int32 | Link Wayarea id,关联可行驶区域索引 |
WayArea
代表可行驶区域,很简单就不赘述了。
字段名 | 数据类型 | 描述 |
---|---|---|
waid | int32 | WayArea id |
aid | int32 | Area id |
以上就是我从设计的角度出发,对Autoware csv格式的矢量地图的解读。虽然只解读了基本元素跟道路元素,但跟规控程序关系比较密切、理解上比较难的部分应该都介绍的很详细了,其他元素应该从同样的角度出发也方便理解的。那就感谢观看,有问题很欢迎交流。