opendrive文件的格式
OpenDRIVE 是一种用于描述道路网络的高精度、可扩展的开放标准文件格式。它主要用于自动驾驶、驾驶模拟器、高精度地图和交通仿真等领域。OpenDRIVE 文件通常以 .xodr
为扩展名,并采用 XML 格式。
OpenDRIVE 的核心思想是将道路网络分解为一系列逻辑上独立的道路元素,并通过这些元素的属性和连接关系来描述整个道路系统。
以下是 OpenDRIVE 文件格式的主要组成部分和关键概念的详细介绍:
1. 整体结构
一个 OpenDRIVE 文件是一个 XML 文档,其根元素是 <OpenDRIVE>
。
<OpenDRIVE><header>...</header><road>...</road><road>...</road>...<junction>...</junction><controller>...</controller><station>...</station></OpenDRIVE>
2. 主要元素
2.1 <header>
(头部)
包含文件和道路网络的元数据,如版本、作者、日期、地理范围等。(还有定义opendrive原点经纬度的信息–高精度地图使用)
常用属性:
-
revMajor
,revMinor
: OpenDRIVE 规范的主次版本号。 -
name
: 道路网络的名称。 -
version
: 文件的版本。 -
date
: 文件创建日期和时间。 -
vendor
: 文件创建者或工具的名称。 -
south
,north
,west
,east
: 道路网络的地理边界(可选,用于定义一个包围盒)。
2.2 <road>
(道路)
这是 OpenDRIVE 中最重要的元素,用于描述一条独立的道路。每条道路都有一个唯一的 id
。
常用属性:
id
: 道路的唯一标识符。length
: 道路的参考线长度。junction
: 指示该道路是否属于某个交叉口 (-1
表示不属于任何交叉口,否则为交叉口的id
)。name
: 道路的名称。
子元素:<link>
(连接): 描述道路的逻辑连接关系,即与相邻道路的连接。<predecessor>
: 前一条道路的连接信息。<successor>
: 后一条道路的连接信息。<neighbor>
: 相邻道路(例如,并行的道路)的连接信息。- 这些连接通过
elementId
(连接的道路ID)、elementType
(road 或 junction)、contactPoint
(start 或 end) 来定义。
<type>
(类型): 描述道路的类型,例如town
(城镇),rural
(乡村),highway
(高速公路),pedestrian
(人行道) 等。<planView>
(平面视图): 描述道路的参考线(reference line)在二维平面上的几何形状。这是道路的核心几何定义。- 包含一系列
<geometry>
元素,每个几何元素定义了道路参考线的一部分。 <geometry>
常用属性:s
: 几何元素在道路参考线上的起始 s 坐标(弧长)。x
,y
: 几何元素起始点的全局 X, Y 坐标。hdg
: 几何元素起始点的航向角(heading),以弧度表示,相对于全局 X 轴。length
: 几何元素的长度。type
: 几何元素的类型,可以是:<line>
: 直线。<arc>
: 圆弧,需要curvature
属性。<spiral>
: 缓和曲线(Clothoid),需要curvStart
和curvEnd
属性。<poly3>
: 三次多项式,需要a
,b
,c
,d
系数。<paramPoly3>
: 参数化三次多项式。
- 包含一系列
<elevationProfile>
(高程剖面): 描述道路参考线在垂直方向上的高程变化。- 包含一系列
<elevation>
元素,每个元素定义了某个 s 坐标处的高程曲线。 <elevation>
常用属性:s
(起始 s 坐标),a
,b
,c
,d
(三次多项式系数)。
- 包含一系列
<lateralProfile>
(横向剖面): 描述道路参考线的横向倾斜(超高)。- 包含一系列
<superelevation>
元素,每个元素定义了某个 s 坐标处的超高曲线。 <superelevation>
常用属性:s
(起始 s 坐标),a
,b
,c
,d
(三次多项式系数)。
- 包含一系列
<lanes>
(车道): 描述道路上的车道布局。- 包含
<laneSection>
元素,每个<laneSection>
定义了道路某一段的车道配置。 <laneSection>
常用属性:s
(起始 s 坐标)。<laneSection>
内部包含<left>
,<center>
,<right>
元素,分别描述左侧、中心、右侧车道。- 每个
<left>
,<center>
,<right>
内部包含一个或多个<lane>
元素。 <lane>
常用属性:id
: 车道的唯一标识符(中心车道为 0,左侧为正,右侧为负)。type
: 车道类型(例如driving
,shoulder
,border
,sidewalk
等)。level
: 车道是否与参考线在同一平面(true
或false
)。<width>
: 描述车道宽度,可以使用三次多项式定义宽度随 s 坐标的变化。<roadMark>
: 描述车道线。<border>
: 描述车道边界。<speed>
: 描述车道限速。<access>
: 描述车道访问权限。<link>
: 描述车道之间的连接(例如,车道变道)。
- 包含
<objects>
(物体): 描述道路上的静态或动态物体,如交通标志、交通灯、障碍物等。<signals>
(信号): 描述交通信号灯、交通标志等。<surface>
(路面): 描述路面属性,如摩擦系数等。<controller>
(控制器): 描述交通信号灯控制器。<junctionReference>
(交叉口引用): 引用该道路所属的交叉口。
2.3 <junction>
(交叉口)
描述道路交叉口区域。交叉口是多条道路交汇的地方,其内部的连接关系由 <connection>
元素定义。
常用属性:
id
: 交叉口的唯一标识符。name
: 交叉口的名称。
子元素:<connection>
(连接): 描述交叉口内部的道路连接。id
: 连接的唯一标识符。incomingRoad
: 进入交叉口的道路 ID。connectingRoad
: 离开交叉口的道路 ID。contactPoint
: 连接点(start
或end
)。<laneLink>
: 描述车道级别的连接。
2.4 <controller>
(控制器)
描述交通信号灯控制器,通常与 <signals>
元素关联。
2.5 <station>
(测站)
定义道路上的特定点,例如里程碑或测量点。
3. 坐标系统
OpenDRIVE 使用两种主要的坐标系统:
- 全局坐标系 (Global Coordinates): X, Y, Z 坐标,通常是笛卡尔右手坐标系。X 轴通常指向东,Y 轴指向北,Z 轴指向天顶。
- 道路坐标系 (Road Coordinates):
s
坐标:沿道路参考线的弧长,从道路起点开始计算。t
坐标:垂直于道路参考线的横向距离,通常向左为正,向右为负。h
坐标:垂直于道路参考线的高程。
OpenDRIVE 文件中的几何信息(如<planView>
中的x
,y
,hdg
)通常使用全局坐标系,而高程、超高、车道宽度等则使用道路坐标系进行定义。
4. 关键概念和原则
- 参考线 (Reference Line): 每条道路都有一个唯一的参考线,它是道路几何形状的基础。所有车道和道路属性都相对于这条参考线进行定义。
- 分段定义 (Segmented Definition): 道路的几何形状、高程、横向剖面和车道布局都可以分段定义。这意味着道路的属性可以在不同的 s 坐标处发生变化。
- 逻辑连接 (Logical Connectivity):
<link>
和<junction>
元素定义了道路网络中道路和车道之间的逻辑连接关系,这对于路径规划和交通流仿真至关重要。 - 可扩展性 (Extensibility): OpenDRIVE 允许通过自定义用户数据来扩展其功能。
5. 总结
OpenDRIVE 是一种复杂但功能强大的格式,它提供了对道路网络进行详细和精确描述的能力。理解其分层结构、关键元素和坐标系统对于正确解析和生成 OpenDRIVE 文件至关重要。由于其广泛的应用,OpenDRIVE 已成为自动驾驶和相关领域的重要标准。