从设计者的角度看Autoware矢量地图数据格式
2022-12-22 # 实用教程

概述

Autoware csv格式的矢量地图字段名定义是比较神奇,而且由于这个定义是Asia公司提供的没有开源[1]。如果不特地做下记录的话,还是挺难一下子记住的。作为Autoware planning模块的主要输入,好好看一下它,对理解Autoware决策规划的相关代码还是有挺大帮助的。

准备工作

  1. 有关Autoware矢量地图的消息定义可以在这里[2]找到;
  2. 画过矢量地图会更好地帮助我们理解里面的概念,所以我建议大家可以借助这份说明[3]来简单画下csv格式的矢量地图。

基本元素

首先如果让我们来定义高精地图,我们会从哪里出发?我想我的话会从点线面这样的基本模型出发。那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 Junction,它用来指定当前车道分支/合并模式,跟底下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格式的矢量地图的解读。虽然只解读了基本元素跟道路元素,但跟规控程序关系比较密切、理解上比较难的部分应该都介绍的很详细了,其他元素应该从同样的角度出发也方便理解的。那就感谢观看,有问题很欢迎交流。


  1. 1.关于矢量地图的数据格式定义未开源的原因,可在 Autoware.ai 的 issue1158 讨论下 Joshua Whitley 的回复中找到。
  2. 2.Autoware csv 格式的矢量地图消息定义
  3. 3.Autoware Tools 在线矢量地图绘制工具的使用说明
  4. 4.这是看起来比较直观的日本平面直角坐标系,点进去可以查看对应的参考平面信息。总共19个,是跟程序对应的。