看了下前面的开发笔记,简直是东一榔头西一棒子,毫无重点……不知道在开发个啥
下面是阅读这篇Apollo 高精地图解析文章学习整理的内容
Apollo高精地图数据格式采用(XML)文件格式的数据组织方式,是基于国际通用的OpenDrive规范,在其基础上,将车道边界形状的表述方式从曲线方程和偏移改为绝对坐标序列;新增了禁停区、人行横道、减速带等元素;新增了路口(junction)与路口内元素的关联关系(incoming Road通过Connecting Roads与out-going道路相连),增加了车道中心线到真实道路边界的距离、停止线与红绿灯的关联关系;
我从docker拉取的镜像中拿到base_map.xml,它是最完整的,包含了所有道路和车道几何形状和标识的地图。
xml格式的文件是被用来传输数据,是为了可以在不兼容的系统之间传输数据而设计的,大家用纯文本格式读取彼此的数据就行。
第一行是XML声明,版本1.0和编码UTF-8
第二行是描述文档的根元素,就是说本文档是OpenDRIVE
里面分为三个部分<header><road><junction>,其中road和junction有很多
<road>
有属性id和junction,也就是道路编号和这条道路对应的路口
下面分为四个部分<link><objects><signals><lanes>
<link>
没有属性,下面有子元素<predecessor>和<successor>,额,前任和继任?
两个子元素数目不一定,属性都有elementType="road",elementId,contactPoint="start"or"end"
看起来predecessor都是start,successor都是end
<objects>
没有属性,下面有子元素<object>,也可能没有
<object>属性有id和type,种类有:crosswalk,stopline,暂时只看到这俩
crosswalk的<object>的子是没有属性的<outline>,孙是<cornerGlobal>属性x,y,z
stopline的<object>的子是没有属性的<geometry>,孙是没有属性的<pointSet>,里面有三个重孙<point>属性x,y,z
<signals>
没有属性,下面有子元素<signal>,也可能没有
<sigal>属性有id和type,type种类有stopSign,trafficLight,如果是trafficLight的话,还会有属性layoutType="mix3Vertical"
stopSign的<signal>比较简单,子<stopline>,孙<objecReference>属性id,这是两种signal都有的部分
trafficLight的<signal>就比较复杂了,有<outline><stopline>和三个id分别为0,1,2的三个<subSignal>
trafficLight和前面的crosswalk很像,<outline>下是<cornerGlobal>属性x,y,z
<stopline>和stopSign的<signal>一样
<subSignal>有id和type="circle"两个属性,下面一个<centerPoint>属性x,y,z
<lanes>
没有属性,内容很多
下面第一层<laneSection>属性singleSide="true"or"false"
再下一层<boundaries><center><right>
<boundaries>
有两个子<boundary>分别是属性type="leftBoundary"or"rightBoundary",子是没有属性的<geometry>,孙是没有属性的<pointSet>,里面有三个重孙<point>属性x,y,z(这和前面的objects-object(stopline)一样)
<center>
center-lane-border-geometry-pointSet-point这样的层次,最后<point>属性依然x,y,z
lane-border-geometry这三个子元素都有属性
<right>
下面有一个<lane>
再下层是<centerLine><border><link><speed><sampleAssociates><objectOverlapGroup><junctionOverLapGroup><LaneOverlapGroup>
<junction>
下面有几个部分,<outline><connection><objectOverlapGroup>,其中前两个是一定有的,第三个不一定
<outline>下是<cornerGlobal>属性x,y,z
所有出现outline的地方:crosswalk,trafficLight,junction
地图解析
Apollo提供了解析xml格式地图的程序:opendrive_adapter.cc
在Apollo内部的数据地图的格式为proto,各定义在modules/map/proto路径下的.proto文件下
Apollo提供了一些函数获取元素,并且提供高精地图元素获取的方法实现类:apollo::hdmap::HDMapImpl