《OpenDRIVE1.6规格文档》2
目录
- 7.6.2 利用三次多项式创建道路
- 7.7 参数三次曲线
- 7.7.1 使用参数三次曲线生成道路
- 8 道路
- 8.1 道路段以及横截面的属性
- 8.2 道路连接
- 8.3 道路类型
- 8.3.1 道路类型的限速
- 8.4 高程的方法
- 8.4.1 道路高程
- 8.4.2 超高程
- 8.4.3 形状定义
- 8.5 道路表面
7.6.2 利用三次多项式创建道路
如图27所示,在x/y坐标系中描述的三次多项式并不适合用来描述带有任意方向的曲线段。为了对在给定x坐标上带有两个或更多y坐标的曲线段进行处理,可根据与局部u/v坐标系的关系来对三次多项式段进行定义。局部u/v坐标系的使用提高了曲线定义的灵活性。以下方程式得以使用:
v ( u ) = a + b u + c u 2 + d u 3 v(u) = a +bu + cu^2 + du^3 v(u)=a+bu+cu2+du3
应遵循以下方式对局部u/v坐标系方向进行选择:使用在递增的u坐标上的函数v(u)来表达曲线。
图27 不能用三次多项式参数来表示的曲线
通常来说,u/v坐标系与s/t坐标系在线段的起始位置(@x,@y)和起始方向@hdg(关于这两点在<geometry>
元素中有详细说明)上是一致的。这一选择的结果就是多项式参数a=b=0(见图28)。作为一个附加选项,局部u/v坐标系可相对于起始点(@x,@y)被旋转,做法为规定一个不等于0的多项式参数@b。
在这里,反正切arctan(@b)定义了相对于局部u/v坐标系的多项式的偏航角。可通过设置一个不等于0的多项式参数@a(见图29)来获得当(@x,@y)应被定位于u=0时,沿v坐标轴对u/v 坐标系原点的额外位移。参数u有可能随着0到曲线终点在u坐标轴上的投影而发生变化。对于给定的参数u,局部坐标v(u)定义了局部u/v坐标系内曲线上的点。
v ( u ) = a + b u + c u 2 + d u 3 v(u) = a + bu + cu^2 + du^3 v(u)=a+bu+cu2+du3
考虑到<geometry>
元素中说明的位移和旋转参数@a、@b、(@x,@y)和@hdg,在给定的u坐标上最终的x/y曲线位置如图29所示。
图28 从a u/v坐标系到a x/y坐标系的转变(a=b=0)
图29 从a u/v坐标系到a x/y坐标系的转变(a!=0 和b!=0)
在OpenDRIVE中,三次多项式用<geometry>
元素里的<poly3>
元素来表示。
t_road_planView_geometry_poly3
表9 poly3元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
a | double | m | ]-∞;∞[ | 多项式参数a |
b | double | 1/m | ]-∞;∞[ | 多项式参数b |
c | double | 1/m^2 | ]-∞;∞[ | 多项式参数c |
d | double | 1/m^3 | ]-∞;∞[ | 多项式参数d |
XML示例:
<geometrys="0.0000000000000000e+00"x="-6.8858131487889267e+01"y="4.1522491349480972e-01"hdg="6.5004409066736524e-01"length="2.5615689718113455e+01"><poly3a="0.0000000000000000e+00"b="0.0000000000000000e+00"c="1.4658732624442020e-02"d="-5.7746497381565959e-04"/>
</geometry>
<geometrys="2.5615689718113455e+01"x="-4.8650519031141869e+01"y="1.5778546712802767e+01"hdg="2.9381264033570398e-01"length="3.1394863696852912e+01"><poly3a="0.0000000000000000e+00"b="0.0000000000000000e+00"c="-1.9578575382799307e-02"d="2.3347864348004167e-04"/>
</geometry>
以下规则适用于三次多项式:
- 三次多项式可被用于描述在测量数据可用的情况下道路的走向。
- 若局部u/v坐标系与s/t坐标系起始点一致,那么多项式参数a=b=0。
<geometry>
元素的起始点(@x,@y)定位在局部u/v坐标系的v轴上。- 多项式参数a和b应为0,以确保参考线的平滑。
相关内容:参数三次曲线、地理坐标参考、道路、从几何形状元素生成任意道路线。
7.7 参数三次曲线
参数三次曲线被用于描述从测量数据中生成的复杂曲线。参数三次曲线相较于三次多项式更为灵活,它能描述更多种类的道路线。与在x/y坐标系中被定义或被当成局部u/v坐标系的三次多项式比起来,x坐标与y坐标的插值是通过它们自身的样条相对于共同的插值参数p而进行的。
7.7.1 使用参数三次曲线生成道路
只需使用x轴和y轴便可以用参数三次曲线生成道路。为保持三次多项式的连贯性,可利用u轴和v轴同时将它们计算到三次多项式里。
u ( p ) = a U + b U ⋅ p + c U ⋅ p 2 + d U ⋅ p 3 u(p) = aU + bU\cdot p+cU \cdot p^2 + dU \cdot p^3 u(p)=aU+bU⋅p+cU⋅p2+dU⋅p3
v ( p ) = a V + b V ⋅ p + c V ⋅ p 2 + d V ⋅ p 3 v(p) = aV + bV \cdot p + cV \cdot p^2 + dV \cdot p^3 v(p)=aV+bV⋅p+cV⋅p2+dV⋅p3
若无另外说明,插值参数p则在[0;1]范围内。另外,也可在 [0; @length of <geometry>
]的范围内对其赋值。与三次多项式相似,有着变量u和v的局部坐标系可被任意放置和旋转。
为简化描绘,局部坐标系可与s/t坐标系在起始点(@x,@y)和起始方向@hdg上保持一致:
- u点在局部s方向,即沿参考线在起始点上。
- v点在局部t方向,即从参考线在起始点上作横向偏移。
- 参数@aU、@aV和@bV应为零。
如图26、27和28所示,给参数@aU、@aV、和@bV赋予非零值会导致s/t坐标系的偏移和旋转。在为已知参数p定义曲线上的点后,在考虑相对于参数@aU、@aV、@bU、@bV、起始坐标(@x,@y)和起始方向@hdg所规定的位移和方向的前提下,u值和v值会被转换成x/y坐标系里的值。
这里需注意的是:插值参数p和<geometry>
元素中起始点(@x,@y)和与参数p相关的点(x§,y§)之间弧线实际长度是非线性关系。通常来说,只有起点和终点参数p=0和p=@length(选项@pRange=arcLength)与弧线的实际长度一致。考虑到<geometry>
元素中说明的位移和旋转参数@a、@b、(@x,@y) 和@hdg,在给定的u坐标上最终的x/y曲线位置如图29所示。
图30 为u坐标插值所做的参数三次多项式
图31 为v坐标插值所做的参数三次多项式
图32 参数三次多项式
在OpenDRIVE中,参数三次曲线用<geometry>
元素里的<paramPoly3>
元素来表示。
t_road_planView_geometry_poly3
表10 paramPoly3元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
aU | double | m | ]-∞;∞[ | 多项式参数a |
bU | double | 1/m | ]-∞;∞[ | 多项式参数b |
cU | double | 1/m^2 | ]-∞;∞[ | 多项式参数c |
dU | double | 1/m^3 | ]-∞;∞[ | 多项式参数d |
aV | double | m | ]-∞;∞[ | 多项式参数a |
bV | double | 1/m | ]-∞;∞[ | 多项式参数b |
cV | double | 1/m^2 | ]-∞;∞[ | 多项式参数c |
dV | double | 1/m^3 | ]-∞;∞[ | 多项式参数d |
pRange | e_paramPoly3_pRange | 1/m^3 | arcLength; normalized |
参数p的范围 Case arcLength: [0, @length of <geometry> ]; Case normalized: [0, 1]
|
XML示例,
<planView><geometrys="0.000000000000e+00"x="6.804539427645e+05"y="5.422483642942e+06"hdg="5.287405485081e+00"length="6.565893957370e+01"><paramPoly3aU="0.000000000000e+00"bU="1.000000000000e+00"cU="-4.666602734948e-09"dU="-2.629787927644e-08"aV="0.000000000000e+00"bV="1.665334536938e-16"cV="-1.987729787588e-04"dV="-1.317158625579e-09"pRange="arcLength"></paramPoly3></geometry>
</planView>
以下规则适用于参数三次曲线:
- 若局部u/v坐标系与s/t坐标系的起始点一致,那么多项式参数系数为@aU=@aV=@bV=0。
- 若@pRange=“arcLength”,那么p可在[0, @length from
<geometry>
]范围内对其赋值。 - 若@pRange=“normalized”,那么p可在[0, 1]范围内对其赋值。
- 多项式参数aU、bU和aV应为0,以确保参考线的平滑。
相关内容:三次多项式、地理坐标参考、道路、从几何形状元素生成任意道路
8 道路
路网在OpenDRIVE中用<road>
元素来表示。每条道路都沿一条道路参考线延伸。一条道路必须拥有至少一条宽度大于0的车道。OpenDrive中的道路可以与真实路网中或为应用而设的路网中的道路相提并论。每条道路由一个或多个<road>
元素描述。一个<road>
元素可以覆盖一条长路、交叉口之间较短的路,或甚至多条道路。只有在道路的属性不能在先前<road>
元素中得到描述或需要一个交叉口的情况下,才应开始一个新的<road>
元素。
相关内容:参考线、道路连接、车道。
UML模型,
图33 用于道路的UML模型
图34 用于道路几何形状的UML模型
表11 道路元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
name | string | - | - | 道路的名称,可以随意选择 |
length | t_grZero | - | - | xy平面中参考线的总长度;无需考虑被高程影响的长度变化。 |
id | string | - | -;[0;∞[ | ID在数据库中是唯一的。若其形式是一个整数,它则应符合uint32_t且不超出给定范围。 |
junction | string | - | -;-1 | 交叉口的ID,道路作为联接道路属于该交叉口(无则使用= -1) |
rule | e_trafficRule | - | ]-∞;∞[ | 使用道路的基本规则;RHT = 靠右行车,LHT = 靠左行车。当缺少此属性时,将假定为RHT。 |
8.1 道路段以及横截面的属性
某些道路属性是基于道路横截面得到描述的,道路横截面是道路参考线上给定点处的道路正交视图。超高程是一种与道路横截面相关的属性。如果元素对道路横截面有效,那么它对道路参考线上给定点处的整个宽度都有效。其它道路属性是基于道路平面图得到描述的,其中包括车道和道路高程。这些属性称为道路段,其描述了道路的各个部分以及它们沿道路参考线s坐标的特定属性。对道路段有效的属性仅对特定车道有效,可能对整个道路宽度无效。这意味着可为不同属性(例如道路类型或车道段)创建不同的道路段,方式是使用新的起始s坐标以及<road>
元素中的附加元素。两个给定s-起始位置之间的差别隐式地指定了组的长度。段的存储必须按s坐标升序来进行。
8.2 道路连接
为了能够在路网中行进,道路必须相互连接。道路可以连接到其它道路或交叉口上(孤立的道路除外)。图35的场景展示了禁止、允许以及建议的道路连接方式。非常重要的是,相互连接的道路的车道及其参考线需与其前驱以及后继道路的车道及其参考线直接连接。如果参考线连接正确,则应该避免重叠或断口,但不完全禁止。
图35 允许、禁止以及建议的道路连接
图36的场景展示了在交叉口外可行的道路连接方式,其中包括两条同向、反向或汇聚的道路。如果这两条参考线相互不连接,则也无法实现道路连接。
图36 可行的道路连接场景
图37 可行的路口内道路连接场景
在OpenDRIVE中,道路连接用<road>
元素里的<link>
元素来表示。<predecessor>
以及<successor>
元素在<link>
元素中被定义。对于虚拟和常规的交叉口来说,<predecessor>
以及<successor>
元素必须使用不同的属性组。
图38 用于道路连接的UML模型
t_road_link
如果道路与一条后继、前驱或相邻道路连接,该属性则遵循道路头文件。孤立的道路可忽略该元素。
t_road_link_predecessorSuccessor
对于虚拟交叉口和常规交叉口,应使用不同的属性设置。@contactPoint须用于常规交叉口;@elementS和@elementDir则须用于虚拟交叉口。
表12 道路连接前驱以及后继元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
elementId | string | - | - | 被连接的元素ID |
elementType | e_road_link_elementType | - | road; junction | 被连接的元素类型 |
contactPoint | e_contactPoint | - | start; end | 被连接元素中的连接点 |
elementS | t_grEqZero | m | - | 用于虚拟交叉口的连接点contactPoint的备选;标明了前驱中的连接,意为不在前驱的起点或终点。只能用于"road"元素类型 |
elementDir | e_elementDir | - | +;- | 该属性将在用elementS定义连接时提供,它标明了道路进入的前面道路的方向。 |
以下规则适用于道路连接:
- 只有在连接清晰的情况下,才能直接连接两条道路。如果与前驱或后继的关系模糊,则必须使用交叉口。
- 道路可将其它道路或交叉口作为其后继或前驱,它也可以没有后继或前驱。
- 道路亦可作为自身的后继或前驱。
相关内容:参考线、交叉口、车道连接。
8.3 道路类型
道路类型(例如高速公路以及乡村公路)定义了道路的主要用途以及相关的交通规则。道路类型对于整个道路横截面均有效。通过在沿参考线的给定点上定义不同道路类型,可在<road>
元素中根据需要改变道路类型。道路类型将持续有效,直到另一个道路类型被定义。在OpenDRIVE中,道路类型用<road>
元素中的<type>
元素来表示。道路类型本身在@type属性中被给定。
t_road_type
道路类型元素对于整个道路横截面持续有效,直到新的道路类型元素出现或者道路结束。
表13 道路类型元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
s | t_grEqZero | m | [0;∞[ | 起始位置的s坐标 |
type | e_roadType | - | - | 道路的国家/地区代号,参见ISO 3166-1,alpha-2代号。 |
country | e_countryCode | - | - | 道路的国家/地区代号,参见ISO 3166-1,alpha-2代号。 |
以下规则适用于道路类型:
- 当道路类型有变更时,必须在父级
<road>
元素中创建一个新的<type>
元素。 - 可添加国家/地区代号以及州标识符至
<type>
元素中,以便对适用于该道路类型的国家交通规则进行详细说明。相关数据并不存储在OpenDRIVE中,它将存储于应用中。 - 只能使用ALPHA-2 国家/地区代号,ALPHA-3 国家/地区代号不能得以使用,原因是只有ALPHA-2 国家/地区代号才支持州标识符。
- 单独车道可能与其所属道路的类型不同。道路类型和车道类型代表不同的属性,若有具体说明,那么两种属性都为有效。
相关内容:车道类型、道路段以及横截面的属性
8.3.1 道路类型的限速
可为道路类型设置速度限制(限速)。若道路类型已更改且在路段中已有速度限制存在,由于道路类型并不拥有全局有效的速度限制,因此需要一个新的速度元素。必须为每个道路类型元素单独定义限速。在OpenDRIVE中,速度限制用<type>
元素里的<speed>
元素来表示。
t_road_type_speed
该属性结合了特定的道路类型对默认的最大允许速度进行定义。
表14 道路类型速度元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
max | t_maxSpeed | - | no limit; undefined; [0,∞[ | 起始位置的s坐标 |
unit | e_unitSpeed | - | - | 最大属性的单位。关于值,请参见"单位"。 |
以下规则适用于速度限制:
- 最大速度可以被定义为每个道路类型元素的默认值。
- 单独车道可以有不同于其所属道路的速度限制,其将被定义为
<laneSpeed>
。 - 源自标志的限速必须始终被优先考虑。
相关内容:道路类型、道路段和横截面的属性、标志
8.4 高程的方法
有几种方法可以抬高道路或道路的一部分:
- 道路高程详细说明了沿道路参考线(s方向)的高程。
- 通过使用超高程以及形状定义,横断面图将对与t方向参考线正交的高程进行详细说明。
道路高程的类型参见图39。
图39 高程的类型
s长度不随着高程变化。
8.4.1 道路高程
一条道路可沿其参考线被抬高,需根据每个在参考线上给定点的道路横截面来对道路高程进行定义。高程以米为单位,道路的默认高程为零。若使用了地理坐标参考,则根据地理坐标参考对零进行定义。在OpenDRIVE中,高程用<elevationProfile>
元素中的<elevation>
元素来表示。
t_road_elevationProfile_elevation
该属性定义了参考线上给定点处的高程元素。此外,必须沿参考线按升序对元素进行定义。s的长度不随高程而改变。
表15 高程元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
s | t_grEqZero | m | [0;∞[ | 起始位置的s坐标 |
a | double | m | ]-∞;∞[ | 多项式的参数a |
b | double | 1 | ]-∞;∞[ | 多项式的参数b |
c | double | 1/m | ]-∞;∞[ | 多项式的参数c |
d | double | 1/m² | ]-∞;∞[ | 多项式的参数d |
使用以下三次多项式函数来计算道路高程:
e l e v ( d s ) = a + b ⋅ d s + c ⋅ d s 2 + d ⋅ d s 3 elev(ds) = a + b \cdot ds + c \cdot ds^2 + d \cdot ds^3 elev(ds)=a+b⋅ds+c⋅ds2+d⋅ds3
其中, e l e v elev elev是是给定位置上的高程(惯性z), a , b , c , d a,b,c,d a,b,c,d是系数, d s ds ds是沿着参考线上新高程元素的起点与给定位置之间的距离。每当新的元素出现,ds
则清零。使用以下公式对高程值的绝对位置进行计算:
s = s s t a r t + d s s = s_{start} + ds s=sstart+ds
其中, s s s是参考线坐标系中的绝对位置, s s t a r t s_{start} sstart是元素在参考线坐标中的起始位置。
以下规则适用于道路高程:
- 道路必须沿其参考线被抬高。
- 道路高程可单独或者结合超高程以及道路形状被定义。
- 对高程元素的定义必须按升序进行。由于高程可以上下移动,元素必须被连接到参考线上的相应位置。
- 道路高程的定义持续有效,直到该类型的下一个元素得到定义。
相关内容:超高程、形状定义。
8.4.2 超高程
超高程是横断面图的一部分,它描述了道路的横坡。它可用于将道路往内侧倾斜,从而使车辆更容易驶过。如图40所示,对于被超高程抬高的道路而言,道路的t轴不与下层地形平行。因此,横断面图的定义适用于整个道路横截面。超高程不改变车道的实际宽度,但它会影响被投影的宽度。超高程的默认值为零。
超高程从数学角度被定义为围绕参考线的道路横截面的倾斜角。这意味着超高程对于向右边倾斜的道路具有正值,对于向左边倾斜的道路具有负值。为简化上述示例,图40示例中的参考线平行于y轴。
图40 超高程
在OpenDRIVE中,超高程用<lateralProfile>
元素中的<superelevation>
元素来表示。
t_road_lateralProfile_superelevation
该属性被定义为围绕着s轴的路段倾斜角。必须沿参考线按升序定义元素。元素的参数将持续有效,直到下一个元素开始或道路参考线结束。道路的超高程程默认为零。
表16 超高程元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
s | t_grEqZero | m | [0;∞[ | 起始位置的s坐标 |
a | double | rad | ]-∞;∞[ | 多项式的参数a,超高程在@s(ds=0)处 |
b | double | rad/m | ]-∞;∞[ | 多项式的参数b |
c | double | rad/m^2 | ]-∞;∞[ | 多项式的参数c |
d | double | rad/m^3 | ]-∞;∞[ | 多项式的参数d |
通过使用以下三次多项式函数,对超高程进行计算:
s E l e v ( d s ) = a + b ⋅ d s + c ⋅ d s 2 + d ⋅ d s 3 s_{Elev}(ds) = a + b\cdot ds + c \cdot ds^2 + d \cdot ds^3 sElev(ds)=a+b⋅ds+c⋅ds2+d⋅ds3
其中, s E l e v s_{Elev} sElev是给定位置的超高程, a , b , c , d a,b,c,d a,b,c,d是系数, d s ds ds是沿参考线上超高程元素的起点与给定位置之间的距离。
每当新的元素出现,ds
则清零。超高程的绝对位置的计算方式如下:
s = s s t a r t + d s s = s_{start} + ds s=sstart+ds
其中, s s s是在参考线坐标系中的绝对位置, s s t a r t s_{start} sstart是元素在参考线坐标系中的起始位置。
以下规则适用于超高程:
- 超高程的定义必须适用于整个道路横截面。
- 通过使用@level属性,道路的单条车道。
相关内容:从道路高程中排除车道、道路高程、形状定义。
8.4.3 形状定义
由于某些横向道路形状过于复杂,仅使用超高程来描述是不够的。通过形状则能够更详细地描述在参考线上给定点处的道路横截面的高程。这意味着,一个有多个t值的s坐标上可以拥有多个形状定义,从而对道路的弯曲形状进行描述。
如果不结合超高程而使用了形状,车道的实际宽度可能会由于其曲线的形状而被改变。相对于平面图的投影宽度不受影响。如果结合超高程而使用了形状(如图41所示),相对于超高程状态的道路投影宽度不会变化,但相对于平面图的投影宽度会有变化。如图42所示,被定义的t范围必须最少要覆盖到整个<road>
元素的最大t展开式。
图41展示了如何对两个横断面图之间的高度信息进行计算。该图中的横断面图处于 s R 1 s_{R1} sR1并拥有五个多项式定义,而处于 s R 2 s_{R2} sR2的横断面图则拥有三个多项式定义。可使用图41中的公式对两个横断面图之间的一个点以及线性插值进行计算。
图41 道路形状最小的t-定义范围
典型的应用案例是高速测试跑道以及路拱上的弯曲路面。形状的默认值为零。
图42 形状定义(左边)与超高程相结合(右边)
t_road_lateralProfile_shape
该属性被定义为相对于参考水平面路段的路面。一个拥有不同t值的s位置上可存在多个形状,从而对道路的弯曲形状进行描述。
表17 形状元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
s | t_grEqZero | m | [0;∞[ | 起始位置的s坐标 |
t | double | m | ]-∞;∞[ | 起始位置的t坐标 |
a | double | m | ]-∞;∞[ | 多项式参数a,相对高度@t (dt=0) |
b | double | 1 | ]-∞;∞[ | 多项式参数b |
c | double | 1/m | ]-∞;∞[ | 多项式参数c |
d | double | 1/m^2 | ]-∞;∞[ | 多项式参数d |
通过以下多项式函数可对横断面图的形状进行计算:
h S h a p e ( d s ) = a + b ⋅ d t + c ⋅ d t 2 + d ⋅ d t 3 h_{Shape}(ds) = a + b \cdot dt + c \cdot dt^2 + d \cdot dt^3 hShape(ds)=a+b⋅dt+c⋅dt2+d⋅dt3
其中, h S h a p e h_{Shape} hShape是给定位置参考平面上方的高度, a , b , c , d a,b,c,d a,b,c,d是系数, d t dt dt是形状元素起点和给定位置之间垂直于参考线的距离。
每当新的元素出现,dt
则清零。形状值的绝对位置用如下方式计算:
t = t s t a r t + d t t = t_{start} + dt t=tstart+dt
其中, t t t是参考线坐标系中的绝对位置, t s t a r t t_{start} tstart是元素在参考线坐标系中的起始位置。
以下规则适用于形状:
- 可结合超高程以及道路高程对形状进行定义。
- 在使用形状时,不应该存在任何车道偏移。
相关内容:道路高程、道路超高程、路段以及横截面的属性。
8.5 道路表面
OpenDRIVE并不包含对道路表面的描述,该类描述则包含在OpenCRG中,但OpenDRIVE可以引用在OpenCRG中生成的数据。两者均不包含有关道路表面视觉展示的数据。借助OpenCRG可以对更细节化的道路表面属性进行建模,例如图43中的卵石或坑洼。
图43 CRG文件中定义的道路表面
如CRG的名称所示,CRG数据被置于常规网格中,该网格是沿参考线被布置的(类似OpenDRIVE的道路参考线)。在每个网格位置上,它都包含了在真实道路上测量到的绝对高程和某些附加数据,这些数据可以对相对于参考线的高程差进行计算。将OpenDRIVE和CRG数据进行结合的关键在于对两条参考线之间的相关性以及一条使用两者高程数据的规则进行定义。CRG数据可能会与OpenDRIVE道路参考线有偏差(参见@tOffset),其方向可能与道路布局方向相同或者相反(参见方向)。
图44 沿参考线放置一个OpenCRG文件
可在不同模式下将CRG数据应用于给定的OpenDRIVE道路。@mode = attached附加。出于对@tOffset以及@sOffset参数的考虑,CRG数据集的参考线将被替换为OpenDRIVE道路的参考线。通过对CRG网格的评估以及@zOffset和@zScale的应用后得出CRG局部高程值,该值会被添加到OpenDRIVE道路的表面高程数据中(该数据衍生于高程、超高程以及横坡的组合)。无需考虑道路的全方位几何是否匹配,这个模式可用于将相对于原始CRG数据的参考线的道路表面信息从任意CRG道路转移到OpenDRIVE道路中。CRG道路的原始位置、偏航角、曲率、高程以及超高程均不在考虑范围内。CRG网格的评估是沿OpenDRIVE参考线,而不是沿CRG参考线而进行的。
( u v ) C R G = ( s − s O f f s e t t − t O f f s e t ) O p e n D R I V E \begin{pmatrix} u \\ v \end{pmatrix}_{CRG} = \begin{pmatrix} s-s_{Offset} \\ t-t_{Offset} \end{pmatrix}_{OpenDRIVE} (uv)CRG=(s−sOffsett−tOffset)OpenDRIVE
图45 OpenCRG附加模式,attached
图46 具有高程的OpenCRG附加模式
该模式与附加模式基本无异,唯一与附加模式不同的是只有CRG数据的高程值会被作为关注对象(即OpenDRIVE高程被设置为零)。为了避免出现问题,需准确地将@sStart及@sEnd设置为CRG数据的边界,否则可能会出现如下图中的高度为零的缺口。
图47 具有高程参考线的OpenCRG attached0模式
@mode = genuine。CRG数据集参考线的起点相对于OpenDRIVE道路参考线上的点位于由@sStart、@sOffset和@tOffset定义的位置上。通过为横向以及纵向偏移、偏航角(@hOffset)以及高程(@zOffset)提供偏移值,可以明确OpenCRG与OpenDRIVE各自的参考线之间的相关性。在真实(genuine)模式中,CRG数据会完全取代OpenDRIVE高程数据,也就是说,会直接从CRG数据中计算出道路表面给定点的绝对高程(可把这看成将OpenDRIVE高程、超高程和横坡均设为零时,对CRG和OpenDRIVE数据进行合并)。若使用该方法, 必须确保CRG数据的几何形状在一定的范围内与下层的OpenDRIVE道路几何是匹配的。
( u v ) C R G = ( c o s ( p O f f s e t ) s i n ( p O f f s e t ) − s i n ( p O f f s e t ) c o s ( p O f f s e t ) ) ( s − s O f f s e t t − t O f f s e t ) O p e n D R I V E \begin{pmatrix} u \\ v \end{pmatrix}_{CRG} = \begin{pmatrix} cos(p_{Offset}) & sin(p_{Offset}) \\ -sin(p_{Offset}) & cos(p_{Offset}) \end{pmatrix} \begin{pmatrix} s-s_{Offset} \\ t-t_{Offset} \end{pmatrix}_{OpenDRIVE} (uv)CRG=(cos(pOffset)−sin(pOffset)sin(pOffset)cos(pOffset))(s−sOffsett−tOffset)OpenDRIVE
图48 OpenCRG附加模式;genuine真实
@mode = global:
数据集仅从给定轨道或交叉口记录中引用,但并无平移或旋转转换可被应用。CRG文件中的所有数据保留在其原生的坐标系中。高程数据被认作为是惯性数据,也就是AS IS。
@orientation
由于CRG数据可能只覆盖了道路表面部分,所以必须确保衍生于OpenDRIVE数据的高程信息在有效的CRG范围外依然可以得以使用。在OpenDRIVE中,道路表面用<road>
元素里的<surface>
元素来表示,OpenCRG中描述的数据则用<surface>
元素里的元素来表示。
若在给定位置的相同物理属性(属性用途)具备一个以上的CRG条目,那么OpenDRIVE文件内出现顺序中的最后一个条目必须作为相关条目。所有其它的条目则被忽略。
图49 OpenCRG方向
( u v ) C R G = ( 0 − 1 − 1 0 ) ( s − s O f f s e t t − t O f f s e t ) O p e n D R I V E \begin{pmatrix} u \\ v \end{pmatrix}_{CRG} = \begin{pmatrix} 0 & -1\\ -1 & 0 \end{pmatrix} \begin{pmatrix} s-s_{Offset} \\ t-t_{Offset} \end{pmatrix}_{OpenDRIVE} (uv)CRG=(0−1−10)(s−sOffsett−tOffset)OpenDRIVE
方向属性在OpenCRG的u/v坐标系的原点处沿着CRG文件进行旋转。same值的旋转角度为0,opposite值则为180°。T-偏移不被方向属性所影响。
t_road_surface_CRG
表18 道路表面CRG元素的属性
名称 | 类型 | 单位 | 值 | 描述 |
---|---|---|---|---|
file | string | - | - | 包含CRG数据的文件名称 |
sStart | t_grEqZero | m | [0;∞[ | CRG数据应用的开始(s坐标) |
sEnd | t_grEqZero | m | [0;∞[ | CRG应用的结束(s坐标) |
orientation | e_direction | - | same; opposite |
CRG数据集相对于父级<road> 元素的方向
|
mode | e_road_surface_CRG_mode | - | attached; attached0; genuine; global | 道路表面数据的附加模式,请见详细说明 |
purpose | e_road_surface_CRG_purpose | - | elevation; friction | CRG文件包含的数据的物理用途;在属性缺失的情况下,数据会被视作为高程数据处理。 |
sOffset | double | m | ]-∞;∞[ | CRG中心线与道路的参考线之间的s-偏移(默认为0.0) |
tOffset | double | m | ]-∞;∞[ | CRG中心线与道路的参考线之间的t-偏移(默认为0.0) |
zOffset | double | m | ]-∞;∞[ | CRG中心线与道路的参考线之间的z-偏移(默认为0.0) |
zScale | double | - | ]-∞;∞[ | 用于道路表面描述的z-比例因子(默认为1.0) |
hOffset | double | rad | ]-∞;∞[ | CRG中心线与道路参考线之间的偏航角偏移(只用于真实genuine模式,默认为0.0) |
XML示例:
<surface><CRG file="fancyData.crg" sStart="0.0" sEnd="100.0" orientation="same" mode="attached" tOffset="0.0"></CRG>
</surface>
相关内容:道路。
《OpenDRIVE1.6规格文档》2相关推荐
- 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条
http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...
- java下载pdf6_疯狂java讲义第6版 电子版(pdf格式)
疯狂java讲义第6版pdf是李刚打造的经典java编程图书的最新版,为了帮助更多的读者能真正掌握Java编程,感受到Java语言的魅力,领会到Java编程的快乐,作者根据多年来的Java授课经验,精 ...
- 《疯狂Java讲义精粹》读书笔记2 ------ 多态
-----------------<疯狂Java讲义精粹>2读书笔记--------------- Java引用变量有两个类型: · 编译时类型(由声明该变量时使用的类型决定) · 运行时 ...
- java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...
[java]代码库import javax.swing.*; import java.awt.image.*; import java.awt.datatransfer.*; import javax ...
- 《疯狂Java讲义》学习笔记 第六章 面向对象(下)
<疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...
- 李刚疯狂java讲义第3_【Java】-NO.16.EBook.4.Java.1.009-【疯狂Java讲义第3版 李刚】- 泛型...
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.009-[疯狂Java讲义第3版 李刚]- 泛型 Style:EBook Series:Java Si ...
- [疯狂Java讲义精粹] 第十三章|类加载机制与反射
java.lang.reflect包下的接口和类, 包括Class, Method, Filed,Constructor和Array等, 这些类分别代表类, 方法, Field, 构造器和数组, Ja ...
- 疯狂Java讲义:P200接口
接口 Output package lee; public interface Output {//接口里定义的成员变量只能是常量int MAX_CACHE_LINE=50;//接口里定义的只能是pu ...
- 疯狂Java讲义_Chapter4_编写控制台的五子棋游戏
编写控制台的五子棋游戏 昨天复习了下<疯狂Java讲义>,完成前几章的习题, 现在基本完成了控制台五子棋游戏的编写,能够按照要求 保证用户下和电脑下的棋上不能已经有棋子 判断横.竖.左斜. ...
- 《疯狂Java讲义》读书笔记5
目录 Java的集合类 Inerator 接口 Set 集合 HashSet 类 LinkedHashSet 类 TreeSet 类 EnumSet 类 List 集合 ArrayList 和 Vec ...
最新文章
- R语言层次聚类:通过内平方和WSS选择最优的聚类K值、可视化不同K下的BSS和WSS、通过Calinski-Harabasz指数(准则)与聚类簇个数的关系获取最优聚类簇的个数
- MySQL默认配置文件位置发生改变后如何查找
- Backup and Restore in SharePoint 2010
- Android开发实例之多点触控程序
- 巧妙的查看FORM中的 LOV查询语句
- 你们班上的同学现在都怎么样了?
- java sonar教程_SonarQube配置与使用教程.PDF
- 中国电子协会考评中心_中国电子学会考评中心和CPA青少年编程能力等级测评有什么不同?...
- 【自动化测试】在做自动化测试之前你需要知道的
- python的格式化输入_如何在python中读取格式化的输入?
- mysql随机姓名_mysql 随机生成姓名函数,及模拟大量测试数据
- 2022年最新最全最牛的编程语言排名,让人大开眼界
- 20.4.26工作感想
- html 在线测试 鱼缸,新做的草缸教程,看1遍你也会做,鱼缸造景其实很简单
- java 雪崩效应,Hystrix 解决服务雪崩效应
- 仿淘宝头像上传功能(一)——前端篇。
- raid5磁盘阵列原理以及实现
- 初创小公司需不需要合伙人?
- aws 云存储 Linux sdk,aws-sdk for JavaScript 对接私有云对象存储
- c语言中argc和argv[ ]的作用及用法