ASAM OpenDRIVE描述了驾驶仿真应用所需的静态道路交通网络(以下简称路网)并提供了标准交换格式说明文档。该标准的主要任务是对道路及道路上的物体进行描述。OpenDRIVE说明文档涵盖对如道路、车道、交叉路口等内容进行建模的描述,但该说明文档中并不包含动态内容。
OpenDRIVE格式使用文件拓展名为xodr的可扩展标记语言(XML)作为描述路网的基础。存储在OpenDRIVE文件中的数据描述了道路的几何形状以及可影响路网逻辑的相关特征(features),例如车道和标志。OpenDRIVE中描述的路网可以是人工生成或来自于真实世界的。OpenDRIVE的主要目的是提供可用于仿真的路网描述,并使这些路网描述之间可以进行转换。
该格式将通过节点(nodes)而被构建,用户可通过自定义的数据扩展节点。这使得各类应用(通常为仿真)具有高度的针对性,同时还保证不同应用之间在交换数据时所需的互通性。
本说明文档使用标准信息结构。以下规则适用于确认章节的规范性:
以下惯例适用于此文件:data types
是根据IEEE标准规定的。
如无另外说明,本说明文档中的所有数值均采用SI单位,例如:
地理位置用空间坐标系定义的单位来说明,可遵循例如WGS 84–EPSG 4326[1]坐标系。
用户可以直接定义某些数据的数量单位。如果数量单位没有被明确定义或无法被解析,则将默认采用SI单位。以下单位可用于直接定义数据:
这些可选的单位只能作为指示牌以及速度标明使用。它们不能作为通用单位使用,比如不能用来定义道路几何形状或其它内容。
为确保符合OpenDRIVE标准,用户需要通过文中的情态动词来辨别强制性要求、建议、允许以及可能性和能力。
在使用情态动词时,以下规则适用:
规定 | 情态动词 |
---|---|
强制性要求:需严格遵守要求以便符合该标准,不得违背。 | shall, shall not |
建议:建议指的是建议多种可能性中最合适的一种,但不提及或排除其它可能性。 | should, should not |
许可:指的是在OpenDRIVE可交付内容的范围内允许采取的措施。 | may, need not |
可能性和能力:这些语言形式用于说明技术、材料、物理或其它方面的可能性或可行性。 | can, can not |
义务与必要性:此类语言形式用于描述OpenDRIVE以外的法律、组织或技术的义务和必要性。 | must, must not |
此文档使用以下拼写惯例:
标记 | 定义 |
---|---|
Code elements | 此格式用于代码元素,例如类和属性的技术名称以及属性值。 |
Code snippets | 此格式用于摘录作为实现示例的代码。 |
Terms | 此格式用于介绍术语表及新术语,并对术语进行强调。 |
Mathematical elements | 此格式用于计算和数学元素。 |
此标记用于描述XML说明文档中的元素的标签。 | |
@attribute | “@”用于标明任意OpenDRIVE元素的属性。 |
OpenDRIVE结构图的建模根据统一建模语言(UML)来进行。有关UML的详细信息,请参见Booch et al.(1997)。
元素的角色标明了其在一个关联中所有的上下文,角色标注在关联指向的物体处。OpenDRIVE类图表使用了配色方案来增强可读性:
在UML模型中,属性被标记为必选和可选。在上图中可以看到属性的标记。如图所示,可选属性带有UML特定的符号[0…1],必选属性则没有任何符号。
在OpenDRIVE中使用ID时,请遵循以下规则:
以下惯例适用于标明曲率:
C u r v a t u r e = 1 / r a d i u s Curvature = 1 / radius Curvature=1/radius
ASAM OpenDRIVE是ASAM仿真标准的一部分,该标准专注于车辆环境的仿真数据。除了ASAM OpenDRIVE,ASAM还提供其它仿真领域的标准,例如ASAM OpenSCENARIO和ASAM OpenCRG。
ASAM OpenDRIVE为路网的静态描述定义了一种存储格式。通过与ASAM OpenCRG结合使用,可以将非常详细的路面描述添加至路网当中。OpenDRIVE和ASAM OpenCRG仅包含静态内容,若要添加动态内容,则需要使用ASAM OpenSCENARIO。三个标准结合则提供包含静态和动态内容的由场景驱动的对交通仿真的描述。
OpenDRIVE 1.6版本包含了在1.5版本中出现过的元素,但这些元素与1.4版本不兼容。为了确保能与1.4版本和1.5版本兼容,这些元素在1.6版本的XML模式中从技术上被定义为可选。在UML模型的注释中,它们被标记为“向后兼容的可选”。
OpenDRIVE数据存储于XML文件中,文件拓展名为.xodr。OpenDRIVE压缩文件的拓展名为".xodrz"(压缩格式gzip)。
OpenDRIVE文件的结构符合XML规则;关联的模式文件在XML中得到引用。用于OpenDRIVE格式的模式文件可从以下链接中读取:https://www.asam.net/standards/detail/opendrive/。
元素被置于层级中。层级大于0的元素是上一层级的子级,层级等于1的元素则为主元素。
可通过用户定义的数据对每个元素进行拓展。此类数据被存储于“用户数据”元素中。
所有在OpenDRIVE中使用的浮点数均为IEEE 754双精度浮点数。为了确保XML表示法中对浮点数的表示精准,应使用已知的保留最小的浮点数打印算法(比如[Burger96],[Adams18])的正确精度来进行执行,或者确保始终生成17位有效的十进制数字(例如,使用"%.17g"ISO C printf修改器)。导入实现应该使用已知的保持精度的浮点读取算法(例如[Clinger90])。
可使用标签在适当的位置对多个文件进行合并。解析该标签后,OpenDRIVE读取器须立刻开始读取作为标签属性的文件。用户有责任确保从包含文件中读取而来的内容与包含开始时的上下文一致。
示例:
原始文件
<planView>
<include file="planview.xml"/>
planView>
包含文件
<planView>
<geometry x="-0.014" y="-0.055" hdg="2.88" length="95.89" s="0.0">
<arc curvature="-0.000490572"/>
geometry>
<geometry x="-92.10" y="26.64" hdg="2.84" length="46.65" s="95.89">
<spiral curvStart="-0.000490572" curvEnd="-0.004661241"/>
geometry>
planView>
所有可在OpenDRIVE文件中使用的属性都能在UML模型里得到完整标注:
文件的起始及结束元素是:
元素是
如无另外说明,本规格文档里的所有示例、图表和描述都假定为靠右行车环境。
OpenDRIVE可以包含外部数据,而如何处理此类数据则视应用而定。附加数据可被置于OpenDRIVE中的任意位置。
应在辅助数据所引用的元素附近对其进行描述。辅助数据包含OpenDRIVE中还未描述或出于特殊原因为某一应用所用的数据,如不同的道路纹理。
在OpenDRIVE中,辅助数据用
元素来表示。它们可被存储在OpenDRIVE任意元素中。
OpenDRIVE允许将外部文件包含在OpenDRIVE文件中,而如何处理该类文件则视应用而定。包含数据用
元素来表示,可被存储在OpenDRIVE里任意位置。
可在OpenDRIVE中对用户生成的元素布局(如路标或标志)进行集成。这些附加的布局设计并不存储在OpenDRIVE中,而是存储在用户应用中。
在OpenDRIVE中,不同布局类型用
元素来表示,其可存储在OpenDRIVE里任意位置。每个
元素之后都可以关联一个或多个对布局进行说明的
元素。
集成到OpenDRIVE的原始数据或来自外部资源的数据质量可能参差不齐。外部数据的质量和准确性可以在OpenDRIVE中得到描述。
对数据质量的描述用
元素来表示。它们可存储在OpenDRIVE中的任意位置。集成到OpenDRIVE、源自于GPS等外部资源的测量数据可能存在误差。以[m]为单位的误差范围可在应用中被列出。道路数据的绝对或相对误差在
元素中用
元素来描述。某些基本数据涵盖了被包括在OpenDRIVE中的原始数据信息,这些原始数据在
元素中用
元素来描述。
OpenDRIVE使用三种类型的坐标系,如下图所示:
若无另外说明,对局部坐标系的查找与定位将相对于参考线坐标系来进行。对参考线坐标系位置与方向的设定则相对于惯性坐标系来开展,具体方法为对原点、原点的偏航角、横滚角和俯仰角以及它们之间的关系进行详细说明。
根据ISO 8855惯性坐标系是右手坐标系,其轴的指向方向如下(见图7):
以下惯例适用于地理参考:
通过依次设置偏航角(heading)、俯仰角(pitch)和横滚角(roll),元素(如物体、标志等)可被置于惯性坐标系中:
图7展示了对应角的正轴与正方向。
航向角 围绕z轴
航向角 = 0.0 x'指向x轴/东边
航向角 = pi/2 x'指向y轴/北边
俯仰角 围绕y'轴
俯仰角 = 0.0 x''/y''面 = x'/y'面
俯仰角 = pi/2 方向x'' = -z' = -z
横滚角 围绕x''轴
横滚角 = 0.0 x'''/y'''面 = x''/y''面
横滚角 = pi/2 方向z''' = -y''
x’/y’/(z’=z) 指的是以偏航角围绕z轴旋转x/y/z轴之后的坐标系。坐标系x’’/(y’’=y’)/z’’指的是以俯仰角围绕y’轴旋转x’/y’/z’轴之后的坐标系。最后,坐标系(x’’’=x’’)/y’’’/z’’’指的是以横滚角旋转x’’/y’’/z’’轴之后的坐标系。
参考线坐标系同样也是右手坐标系,应用于道路参考线。s方向跟随着参考线的切线方向。这里需要说明的是:参考线总是被放置在由惯性坐标系定义的x/y平面里。t方向与s方向成正交。在定义完垂直于x轴和y轴的朝上的h方向后,整个右手坐标系才算完成。被定义的自由度如下:
s s s轴:坐标沿参考线,以[m]为单位,由道路参考线的起点开始测量,在xy平面中计算(也就是说,这里不考虑道路的高程剖面)。
t t t轴:侧面,在惯性x/y平面里向左为正方向。
h h h轴:在右手坐标系中垂直于st平面。
航向角 围绕h轴
航向角 = 0.0 s'沿s方向被指向前
航向角 = pi/2 s'被指向t
横滚角 围绕s'轴
横滚角 = 0.0 s'''/t'''面 = s'/t'面
与惯性系相似,s’/t’/h’与s’’’/t’’’/h’’’指的是围绕偏航角和横滚角旋转后得到的坐标系。如图11所示,通过提供原点坐标以及相对于惯性坐标系原点的方向(偏航角),参考线坐标系可被置于惯性空间中。
超高程导致参考线内产生横滚角。
俯仰角在s/t/h轴坐标系中不可能出现,参考线的高程如下图所示。高程对s的长度不产生影响。
根据ISO 8855局部坐标系是右手坐标系,其轴的指向如下。以下内容适用于非旋转坐标系:
u u u轴:向前匹配 s s s
v v v轴:向左匹配 t t t
z z z轴:向上匹配 h h h
可通过依次设置偏航角、俯仰角和横滚角,将元素(例如物体)置于局部坐标系中:
在局部坐标系中,以下角度得到定义:
航向角 围绕z轴, 0.0 = 东边
航向角 = 0.0 u'沿u方向指向前方
航向角 = pi/2 u'指向t
俯仰角 围绕v'轴
俯仰角 = 0.0 u''/v''面 = u'/v'面
俯仰角 = pi/2 方向x'' = -z' = -z
横滚角 围绕x''轴
横滚角 = 0.0 x'''/y'''面 = x''/y''面
横滚角 = pi/2 方向z''' = -y''
图14展示了对应角的正轴与正方向。局部坐标系只能通过以下方法被置于参考线空间中:如图16所示,在参考线坐标系中提供局部坐标系的原点和相对于参考线坐标系的偏航角。
惯性坐标系、参考线坐标系和局部坐标系将在OpenDRIVE中同时被使用。图17中的示例描述了三个坐标系相对于彼此的位置与方向设定。
空间参考系的标准化由欧洲石油测量集团大地测量学(EPSG)执行,该参考系由用于描述大地基准的参数来定义。大地基准面是相对于地球椭球模型的位置集合的坐标参考系统。
通过使用基于PROJ(一种用于两个坐标系之间数据交换的格式)的投影字符串来完成对大地基准的描述。该数据应标为CDATA
,因为其可能包含会干预元素属性XML语义的字符。
在OpenDRIVE中,关于数据集的地理参考信息在
元素的
元素中得以呈现。Proj字符串(如以下XML示例中所示)包含了所有定义已使用的空间参考系的参数:
关于proj字符串的细节信息,参见https://proj.org/usage/projections.html。投影的定义不能多于一个。若定义缺失,那么则假定为局部笛卡尔坐标系。这里强烈建议使用proj字符串的官方参数组(使用该链接查询字符串:https://epsg.io/)。参数不应被改变。一些空间参考系如UTM具有东向和北向偏移,这里使用+x_0
与+y_0
参数对它们进行定义。若您想应用偏移,请使用
元素,而不是改变所有参数值。
XML示例:
<geoReference>
geoReference>
规则:
应使OpenDRIVE的x和y坐标大致集中在(0;0)周围。在x和y坐标过大的情况下,由于IEEE 754双精度浮点数的精确度有限,在内部使用浮点坐标的应用可能不能够对它们进行精确处理。
道路的走向可以是多种多样的,它们可以是空旷地面上的直线、高速公路上细长的弯道、亦或是山区狭窄的转弯。为从数学角度对所有这些道路线进行正确建模,OpenDRIVE提供了多种几何形状元素。图19展示了5种定义道路参考线几何形状的可行方式。
道路参考线是OpenDRIVE中每条道路的基本元素。所有描述道路形状以及其它属性的几何元素都依照参考线来定义,这些属性包括车道及标志。
按照定义,参考线向 s s s方向伸展,而物体出自参考线的侧向偏移,向 t t t方向伸展。
图20展示了OpenDRIVE中一条道路的不同部分。
在OpenDRIVE中,参考线的几何形状用
元素里的
元素来表示。
元素是每个
元素里必须要用到的元素。
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
s | t_grEqZero | m | [0;∞[ | 起始位置的s坐标 |
x | double | m | ]-∞;∞[ | 起始位置(x惯性) |
y | double | m | ]-∞;∞[ | 起始位置(y惯性) |
hdg | double | rad | ]-∞;∞[ | 起始方向(惯性偏航角) |
length | t_grZero | m | [0;∞[ | 元素的参考线长度 |
以下规则适用于道路参考线:
元素应只包含一个另外说明道路几何形状的元素。
。参考线有可能被指向相反方向。相关内容:
如图22所示,直线是最简单的几何形状元素。它不包含其它属性。
在OpenDRIVE中,直线用
元素里的
元素来表示。
XML示例,
<planView>
<geometry
s="0.0000000000000000e+00"
x="-4.7170752711170401e+01"
y="7.2847983820912710e-01"
hdg="6.5477882613167993e-01"
length="5.7280000000000000e+01">
<line/>
geometry>
planView>
相关内容:道路参考线和道路。
如图23所示,螺旋线是一条描述参考线变化曲率的回旋曲线。螺旋线可被用来描述曲率在
到
连贯的转换。螺旋线是以起始位置的曲率(@curvStart)和结束位置的曲率(@curvEnd)为特征。沿着螺旋线的弧形长度(见
元素@length),曲率从头至尾呈线性。也可以按顺序排列
、
和
几个元素,从而对复杂曲率进行描述。
在OpenDRIVE中,螺旋线用
元素里的
元素来表示。
t_road_planView_geometry_spiral
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
curvStart | double | 1/m | ]-∞;∞[ | 元素开始时的曲率 |
curvEnd | double | 1/m | ]-∞;∞[ | 元素结束时的曲率 |
XML示例:
<geometry s="100.0" x="38.00" y="-1.81" hdg="0.33" length="30.00">
<spiral curvStart="0.0" curvEnd="0.013"/>
geometry>
@curvStart和@curvEnd不应该相同。
相关内容:弧线、参考线、从几何形状元素中生成任意道路、道路。
如图24所示,弧线描述了有着恒定曲率的道路参考线。
在OpenDRIVE中,弧线用
元素里的
元素来表示。
t_road_planView_geometry_spiral
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
curvature | double | 1/m | ]-∞;∞[ | 恒定曲率贯穿元素 |
XML示例:
<planView>
<geometry
s="3.6612031746270386e+00"
x="-4.6416930098385274e+00"
y="4.3409250448366459e+00"
hdg="5.2962250374496271e+00"
length="9.1954178989066371e+00">
<arc curvature="-1.2698412698412698e-01"/>
geometry>
planView>
曲率不应为零。
相关内容:参考线、道路
如图25所示,通过对OpenDRIVE中所有可用的几何形状元素进行组合,以便可以创建诸多种类的道路线。为避免曲率中出现断口,建议使用螺旋线将直线与弧线以及其它有不同曲率的元素进行结合。
三次多项式可用于生成从测量数据导出的复杂道路路线。对于x/y坐标系中沿参考线的给定测量坐标序列,测量对定义线段的多项式极限。局部三次多项式描述了道路的参考线。通过对线段极限处的连续性条件例如线段连续性、切线和/或曲率连续性等进行详细说明,可以对多个三次多项式线段进行融合并且为整个道路走向生成一条全局三次样条插值曲线。另一个优点则是,沿着多项式的路径方式比沿回旋曲线更有效。
以下方程描述了x/y坐标系里三次多项式的插值:
y
(
x
)
=
a
+
b
x
+
c
x
2
+
d
x
3
y(x) = a + bx + cx^2 + dx^3
y(x)=a+bx+cx2+dx3
公式中的多项式参数a、b、c和d用于定义道路的走向。借助参数a-d,坐标系里每个点的y坐标都可以从x坐标中计算出来。图26使用以下的值对在x/y坐标系中的三次多项式进行了展示:
a = 20
b = 0
c = 0.0005
d = 0.0001