Apollo2.5开发笔记(4)高精地图细节

看了下前面的开发笔记,简直是东一榔头西一棒子,毫无重点……不知道在开发个啥

下面是阅读这篇Apollo 高精地图解析文章学习整理的内容

Apollo高精地图数据格式采用(XML)文件格式的数据组织方式,是基于国际通用的OpenDrive规范,在其基础上,将车道边界形状的表述方式从曲线方程和偏移改为绝对坐标序列;新增了禁停区、人行横道、减速带等元素;新增了路口(junction)与路口内元素的关联关系(incoming Road通过Connecting Roads与out-going道路相连),增加了车道中心线到真实道路边界的距离停止线与红绿灯的关联关系

我从docker拉取的镜像中拿到base_map.xml,它是最完整的,包含了所有道路和车道几何形状和标识的地图。

xml格式的文件是被用来传输数据,是为了可以在不兼容的系统之间传输数据而设计的,大家用纯文本格式读取彼此的数据就行。

第一行是XML声明,版本1.0和编码UTF-8

第二行是描述文档的根元素,就是说本文档是OpenDRIVE

里面分为三个部分

,其中road和junction有很多

 

有属性id和junction,也就是道路编号和这条道路对应的路口

下面分为四个部分

没有属性,下面有子元素,额,前任和继任?

两个子元素数目不一定,属性都有elementType="road",elementId,contactPoint="start"or"end"

看起来predecessor都是start,successor都是end

 

没有属性,下面有子元素,也可能没有

属性有id和type,种类有:crosswalk,stopline,暂时只看到这俩

crosswalk的的子是没有属性的,孙是属性x,y,z

stopline的的子是没有属性的,孙是没有属性的,里面有三个重孙属性x,y,z

没有属性,下面有子元素,也可能没有

属性有id和type,type种类有stopSign,trafficLight,如果是trafficLight的话,还会有属性layoutType="mix3Vertical"

 

stopSign的比较简单,子,孙属性id,这是两种signal都有的部分

 

trafficLight的就比较复杂了,有和三个id分别为0,1,2的三个

trafficLight和前面的crosswalk很像,下是属性x,y,z

和stopSign的一样

有id和type="circle"两个属性,下面一个属性x,y,z

 

没有属性,内容很多

下面第一层属性singleSide="true"or"false"

再下一层

有两个子分别是属性type="leftBoundary"or"rightBoundary",子是没有属性的,孙是没有属性的,里面有三个重孙属性x,y,z(这和前面的objects-object(stopline)一样)

center-lane-border-geometry-pointSet-point这样的层次,最后属性依然x,y,z

lane-border-geometry这三个子元素都有属性

下面有一个

再下层是


下面有几个部分,,其中前两个是一定有的,第三个不一定

下是属性x,y,z

所有出现outline的地方:crosswalk,trafficLight,junction

 

地图解析 

Apollo提供了解析xml格式地图的程序:opendrive_adapter.cc

在Apollo内部的数据地图的格式为proto,各定义在modules/map/proto路径下的.proto文件下

Apollo提供了一些函数获取元素,并且提供高精地图元素获取的方法实现类:apollo::hdmap::HDMapImpl

你可能感兴趣的:(Apollo2.5开发笔记(4)高精地图细节)