C#,自动驾驶技术,ASAM OpenDRIVE BS 1.8.0 规范摘要与C# .NET Parser

news2024/10/24 6:09:18

本文介绍自动驾驶技术的标准之一《ASAM OpenDRIVE》1.8.0 版本的规范摘要,及北京联高软件开发有限公司实现的 C# 版本 xodr 文件(XML) Parser 源代码。

本文档是 ASAM e.V. 的版权财产。 在更改常规许可条款时,ASAM 允许不受限制地分发此标准。因此,ASAM 常规许可条款的 §2 (1) 替换为以下条款:“许可方授予每个人使用标准 ASAM OpenDRIVE 的基本、非排他性和无限制的许可”。

1 术语和定义

桥梁在 ASAM OpenDRIVE 中建模为对象。 带有 bridge 对象的道路通向一座桥。 桥梁对道路的整个横截面有效,除非提供具有进一步限制的车道有效性记录作为子元素。

Bridge
Bridges are modeled as objects in ASAM OpenDRIVE. The road with the bridge object leads over a bridge. Bridges are valid for a road’s complete cross section unless a lane validity record with further restrictions is provided as child element.

 

公共连接

公共路口是 ASAM OpenDRIVE 中的默认路口类型,用于指定可行驶车道可能重叠且车辆可能交叉的区域。

Common junction
Common junctions are the default type of junction in ASAM OpenDRIVE and specify areas where drivable lanes may overlap and traffic may cross.

 

连接道路

连接道路是交叉路口的一部分,连接进出的道路。

Connecting road
Connecting roads are part of a junction and link the roads going in and out.

 

路口

十字路口是没有连接道路的路口。 它们定义了可以显示交叉流量的部分。 交通不会在道口改变道路,例如在铁路道口。

Crossing
Crossings are junctions without connecting roads. They define sections where crossing traffic can appear. Traffic does not change roads at crossings, for example, at railway crossings.

 

直接结

直接交叉路口旨在对可行驶车道可能重叠以进行分叉或合并,但交通不会交叉的入口和出口进行建模。

Direct junction
Direct junctions are intended to model entries and exits where drivable lanes may overlap to split or merge, but traffic does not cross.

 

进入

条目是道路合并到另一条道路的位置。 条目与用于加速车道的元素的 @type 属性的值不同。entry<lane>

Entry
Entries are locations where roads merge into another road. Entries are not the same as the entry value of the @type attribute at the <lane> element which is used for the acceleration lane.

 

退出

出口是道路分叉成其他道路的位置。 出口与用于减速车道的元素的 @type 属性的值不同。exit<lane>

Exit
Exits are locations where a road splits into other roads. Exits are not the same as the exit value of the @type attribute at the <lane> element which is used for the deceleration lane.

 

进场道路

传入道路包含通向交叉路口的车道。

Incoming road
Incoming roads contain lanes that lead into a junction.

 

惯性坐标系

惯性坐标系是符合 ISO 8855 的右手坐标系。

Inertial coordinate system
An inertial coordinate system is a right-handed coordinate system according to ISO 8855.

 

交汇点

交汇点对道路之间的交叉点进行建模。

Junction
Junctions model intersections between roads.

 

“交汇点”组

交汇点组指示路径分配的交汇点属于同一节点,并且通常被视为一个大交汇点,例如环形交叉路口或高速公路交汇处。

Junction group
Junction groups indicate for routing that the grouped junctions belong to the same node and are commonly seen as one big junction, for example roundabouts or highway interchanges.

 

车道

车道是所有道路的重要组成部分。 车道附着到道路参考线,并从内到外定义。

Lane
Lanes are an essential part of all roads. Lanes are attached to the road reference line and are defined from inside to outside.

 

车道偏移

车道偏移使中心车道远离道路参考线。

Lane offset
Lane offsets shift the center lane away from the road reference line.

车道截面

每当车道数量或其功能发生变化时,车道段就会将道路分成多个部分。

Lane section
A lane section splits a road into multiple parts whenever the number of lanes or their function changes.

车道类型

车道具有一种定义其功能的车道类型,例如,驾驶、骑自行车或出口。

Lane type
A lane has one lane type that defines its function, for example, driving, biking, or exit.

车道有效性

通道有效性将信号和对象限制为特定通道。

Lane validity
Lane validities restrict signals and objects to specific lanes.

车道宽度

车道宽度可沿车道段内的 t 坐标加宽或变窄车道。

Lane width
Lane widths widen or narrow lanes along the t-coordinate within lane sections.

局部坐标系

局部坐标系是符合 ISO 8855 的右手坐标系。

Local coordinate system
A local coordinate system is a right-handed coordinate system according to ISO 8855.

对象

对象通过扩展、界定或补充道路的路线来影响道路。 对象是构成环境的元素,例如建筑物、护栏、电线杆和树木。 与信号不同,对象不会直接影响流量的行为。

Object
Objects influence a road by expanding, delimiting, or supplementing its course. Objects are elements that form the environment, for example, buildings, guard rails, poles, and trees. Objects do not influence the behavior of traffic directly, unlike signals.

 

出境道路

在 ASAM OpenDRIVE 中,传出道路未明确定义为元素或属性。 传入道路用作传出道路。 这些道路被隐式定义为由通向它们的连接道路传出。

Outgoing road
Outgoing roads are not specifically defined as an element or attribute in ASAM OpenDRIVE. Incoming roads serve as outgoing roads. These roads are implicitly defined as outgoing by the connecting roads that lead into them.

 

道路

道路是 ASAM OpenDRIVE 中任何道路网络的核心元素。 每条道路沿一条道路参考线延伸。

Road
Roads are the core elements for any road network in ASAM OpenDRIVE. Each road runs along one road reference line.

 

道路高程

道路高程指定沿道路参考线(即 s 方向)的高程。

Road elevation
Road elevation specifies the elevation along the road reference line, that is in s direction.

 

道路标记

ASAM OpenDRIVE 中的道路标记被定义为车道标记、对象标记(例如停车位)或信号(例如停车线)。

Road marking
Road markings in ASAM OpenDRIVE are defined as lane markings, object markings, for example parking boxes, or signals, for example stop lines.

 

道路参考线

道路参考线定义道路的水平路线,由一个或多个几何图形元素组成。 每条道路都有一条道路参考线。 道路的其他属性 (例如,车道、信号和对象) 是相对于道路参考线定义的。

Road reference line
A road reference line defines the horizontal alignment of a road and consists of one or more geometry elements. Every road has one road reference line. Further properties of the road, for example, lanes, signals, and objects are defined relative to the road reference line.

 

道路参考线坐标系

道路参考线始终位于惯性坐标系定义的 x/y 平面内。 道路参考线坐标系沿道路参考线运行。 它是一个右手坐标系。 S 轴沿道路参考线的切线。 t 轴与 s 轴正交。 右手坐标系是通过定义与 x 轴和 y 轴正交的向上方向来完成的。

Road reference line coordinate system
The road reference line is always located within the x/y-plane defined by the inertial coordinate system. A road reference line coordinate system runs along the road reference line. It is a right-handed coordinate system. The s-axis follows the tangent of the road reference line. The t-axis is orthogonal to the s-axis. The right-handed coordinate system is completed by defining the up-direction h orthogonal to x-axis and y-axis.

 

S 坐标

S 坐标沿道路参考线定义,以米为单位从道路参考线起点开始测量。

s-coordinate
The s-coordinate is defined along the road reference line, measured in meters from the beginning of the road reference line.

 

信号

信号是交通标志、交通信号灯和用于控制和调节道路交通的特定道路标记。

Signal
Signals are traffic signs, traffic lights, and specific road markings for the control and regulation of road traffic.

 

信号控制器

信号控制器将信号周期(请参阅信号周期)应用于信号或信号组(请参阅信号组)。

Signal controller
A signal controller applies a signal cycle (see signal cycle) to a signal or a signal group (see signal group).

 

信号周期

信号周期是一个动态信号的相位(参见信号相位)的有序列表。

Signal cycle
A signal cycle is an ordered list of phases (see signal phase) for one dynamic signal.

 

信号依赖性

信号依存关系通过附加信号来限制或延长一个信号的有效性。 例如,仅对卡车有效的 60 公里/小时限速标志,由附加标志指定。 一个信号可能有多个依赖项。

Signal dependency
Signal dependencies limit or extend the validity of one signal by an additional signal. For example, a speed limit sign of 60 km/h that is only valid for trucks, specified by a supplementary sign. One signal may have multiple dependencies.

 

信号组

每个动态信号都需要恰好位于一个信号组中。

Signal group
Each dynamic signal needs to be in exactly one signal group.

 

信号相位

动态信号的一个阶段是语义状态(参见 信号状态)与(可能是无限的)持续时间的组合,它指定了这个语义状态处于活动状态的时间。 该术语不要与英语土木工程术语 stage 或德语术语 phase 混淆。

Signal phase
A phase of a dynamic signal is the semantic state (see signal state) in combination with a (possibly infinite) duration, which specifies how long this semantic state is active. This term is not to be confused with the English civil engineering term stage or the German term phase.

 

信号参考

信号引用将信号链接到另一个信号或对象。 一个信号可能有多个信号引用。 不应将信号参考术语与用于将信号连接到多条道路的元素混淆。<signalReference>

Signal reference
Signal references link a signal to another signal or object. One signal may have multiple signal references. The signal reference term should not to be confused with the <signalReference> element that is used to link a signal to multiple roads.

 

信号状态

动态信号的状态是信号的语义状态和可观察状态的组合。

Signal state
A state of a dynamic signal is the combination of the semantic and the observable state of a signal.

 

信号同步组

多个信号组(参见 信号组)应保持同步,并且其信号周期 (参见信号周期)具有相同的有限持续时间,可以但不要求映射到同步组。 此映射可用于指示每当通过 ASAM OpenSCENARIO 或其他方式设置一个信号组的相位时,该同步组中的其他信号组应设置为其信号周期中的相应位置。

Signal synchronization group
Multiple signal groups (see signal group) which should be kept synchronized and whose signal cycles (see signal cycle) have the same finite duration can, but are not required to be mapped to a synchronization group. This mapping can be used to indicate that whenever the phase of one signal group is set, by an ASAM OpenSCENARIO TrafficSignalControllerAction or otherwise, the other signal groups in that synchronization group should be set to the corresponding position in their signal cycles.

 

滑道

在转弯车道上,驾驶员可以在不驶入主交叉路口的情况下改变道路。

Slip lane
On a slip lane a driver can change roads without driving into the main intersection.

 

静态路网

由静态对象丰富且在模拟运行时不会更改的已连接道路的集合。

Static road network
Collection of connected roads enriched by static objects that do not change during runtime of a simulation.

 

跃程高

跃程高指定沿道路参考线的横向坡度。 超高是为横截面定义的,并且可以在道路参考线方向上变化。

Superelevation
Superelevation specifies the transverse slope along the road reference line. Superelevation is defined for a cross section and can vary in road reference line direction.

 

T 坐标

t 坐标定义为与道路参考线正交的横向位置。

t-coordinate
The t-coordinate is defined as the lateral position orthogonal to the road reference line.

 

隧道

隧道在 ASAM OpenDRIVE 中建模为对象。 带有 tunnel 对象的道路定义道路的一部分,即隧道或地下通道。

Tunnel
Tunnels are modeled as objects in ASAM OpenDRIVE. The road with the tunnel object defines the part of the road that is the tunnel or the underpass.

 

虚拟交汇点

虚拟路口管理不间断道路内的连接,例如,停车场的入口和出口以及人行横道。

Virtual junction
Virtual junctions manage connections within an uninterrupted road, for example, entries and exits to parking lots, and pedestrian crossings.

 

VMS 板

在 ASAM OpenSCENARIO 的模拟期间,可变消息板可以更改其值。

VMS board
Variable message boards can change their values during the simulation in ASAM OpenSCENARIO.

2 通用架构简介

ASAM OpenDRIVE 数据存储在扩展名为 . 压缩的 ASAM OpenDRIVE 文件的扩展名为 (compression format: )。xodrxodrzgzip

ASAM OpenDRIVE 文件结构符合 XML 规则;关联的架构文件在 XML 中引用。 ASAM OpenDRIVE 格式的架构文件可以从“可交付成果”部分检索。

元素被组织成多个级别。 级别大于零 (0) 的元素是前一个级别的子元素。 级别为一 (1) 的元素称为主元素。

每个元素都可以使用用户定义的数据进行扩展。 此数据存储在用户数据元素中。

ASAM OpenDRIVE 中使用的所有浮点数都是 IEEE 754 [12] 双精度浮点数。 为了确保在 XML 表示形式中准确表示浮点数,实现应使用已知的正确准确性,保留最小浮点打印算法 (例如 [13]、[14]) 或确保始终生成 17 个有效十进制数字,例如使用“%.17g”ISO C printf 修饰符。 导入实现应使用已知的正确精度保留浮点读取算法(例如 [15])。

2.1 属性

可在 ASAM OpenDRIVE 文件中使用的所有属性在 UML 模型中都进行了完全注释:

  • 如果单位适用于某个属性,则这些单位根据 “单位” 部分进行说明。

  • 类型:描述属性的数据类型。它可以是原始数据类型(例如 string、double、float),也可以是引用此规范中描述的对象的复杂数据类型。

  • Value:Value 确定给定属性相对于指定类型的值范围。

2.2 根元素

2.3 HEADER

3 Overview of elements

 

4 附加数据

ASAM OpenDRIVE 提供了包含外部数据的可能性。 此数据的处理取决于应用程序。 其他数据可以放置在 ASAM OpenDRIVE 中的任何位置。

5 坐标系简介

ASAM OpenDRIVE 使用三种类型的坐标系:

  • 惯性 x/y/z 坐标系

  • 道路参考线 s/t/h 坐标系

  • 本地 u/v/z 坐标系

5.1 基本坐标系

5.2 地理配准

空间参考系统由欧洲石油调查组大地测量学 (EPSG:32632 WGS 84 / UTM zone 32N [16])标准化,并由描述大地基准面的参数定义。 大地基准面是相对于地球的椭球体模型的位置集合的坐标参考系统。

大地基准面由根据 PROJ 的投影字符串描述,即两个坐标系之间数据交换的格式。 此数据应标记为 CDATA,因为它可能包含干扰元素属性的 XML 语法的字符。

6 几何元素

公路路线可以有许多不同的形状。 开阔的地面上有长而直的道路,高速公路上有细长的弯道,山区有狭窄的转弯。 为了以数学上正确的方式对所有这些道路进行建模,ASAM OpenDRIVE 提供了各种几何元素:

  • 直线

  • 具有线性变化曲率的缓和曲线或回旋线

  • 具有恒定曲率的圆弧

  • 参数化三次多项式

  • 三次多项式 (已弃用)

7 道路 Road

道路的一些属性是根据道路的横截面来描述的。 道路横截面是道路参考线上给定点处的道路正交视图。 引用道路横断面的特性的一个示例是 superelevation。 对道路横截面有效的元素对道路参考线上给定点处的道路整个宽度有效。

其他道路属性根据道路的平面图进行描述。 这包括车道和道路高程。 对于这些属性,使用术语 road section。 道路横断面描述道路的各个部分及其沿道路参考线的 s 坐标的特定属性。 对路段有效的特性可能对道路的整个宽度无效,而仅对特定车道有效。

这意味着可以为不同的属性(如道路类型或车道部分)创建截面。 截面由元素中的附加元素使用新的起始 s 坐标创建。 截面的长度由两个给定的 s-start 位置之间的差异隐式给出。 各节应按 s 坐标的升序存储。<road>

 

 

8 泳道 Lane

在 ASAM OpenDRIVE 中,车道是所有道路的重要组成部分。 车道附着到道路的道路参考线,并从内到外定义。 最小道路定义需要一条中央车道和一条具有定义宽度的附加车道。 每条道路的车道数量没有限制。

中间车道没有宽度,用作车道编号的参考。 中间车道本身的车道 ID 为 0。 其他车道的编号从中间车道开始:车道编号向右下降,表示负 t 方向,向左上升,表示正 t 方向。

其他车道属性

其他 lane 属性描述 lanes 的使用或其他物理属性。 车道属性是按车道部分定义的,但可能会在该部分内更改。 如果没有专门为 lane section(车道段)定义特性,则应用程序可以应用默认特性。

通道类型是按通道定义的。 车道类型定义车道的主要用途及其相应的交通规则。

可用的车道类型包括:

  • shoulder:道路边缘的软边界。

  • border:路边的硬边界。 它通常与可驾驶车道的高度相同。

  • driving:不是其他类型之一的正常可驾驶道路。

  • stop: 高速公路上的紧急停车用硬路肩

  • restricted:汽车不应行驶的车道。车道的高度与可行驶车道相同。 通常,车道用线条分隔,并且通常还包含虚线。

  • parking: 带停车位的车道。

  • median:位于相反方向的行车道之间的车道。 它通常用于在大型道路上分隔城镇的交通。

  • biking:为骑行者预留的车道。

  • walking:行人可以行走的车道。

  • curb:路缘石。 路缘石的高度通常与相邻的可行驶车道不同。

  • entry:用于与主干道平行并合并到主干道的路段的车道。 它主要用于加速车道。

  • exit:用于与主干道平行并通向主干道出口的路段的车道。 主要用于减速车道。

  • onRamp: 从农村或城市道路通往高速公路的匝道。

  • offRamp:从高速公路通往乡村城市道路的匝道。

  • connectingRamp:连接两条高速公路的匝道,例如高速公路交叉口。

  • slipLane:驾驶员在不驶入主交叉路口的情况下改变道路的车道。

  • none:位于道路最外侧边缘的空间,没有实际内容。 它的唯一目的是让应用程序注册 ASAM OpenDRIVE 仍然存在,以防(人类)驾驶员离开道路。

Road markings

9 交汇点简介

交叉路口可以连接两条以上的道路。

存在四种类型的交汇点:

  • 公共路口是具有可行驶车道的路口,这些车道可以重叠并且车辆可以穿过。

  • 直接交叉路口是指交通可以改变道路但不能与其他交通交叉的交叉路口。

  • 虚拟路口是主干道未中断的路口。

  • 十字路口是交通无法改变道路的路口。

 

10 对象简介

对象是通过扩展、界定或补充道路路线来影响道路的项目。 最常见的例子是停车位、人行横道和交通障碍。

图 108 显示了使用 width、length 和 height 的角度对象的边界框,以及使用 radius 和 height 的圆形对象的边界框。

可以使用元素进一步描述复杂对象。 如果定义了元素,它将取代边界框。<outline><outline>

ASAM OpenDRIVE 中的对象不会更改其位置。

它们可以声明为 dynamic 或 static:

  • 动态对象是静态的,但具有一个或多个可移动部分。 例如隧道或风车中的风扇。

  • 静止的物体是完全静止的,没有任何可移动的部件。 例如建筑物或树木。

对象是按元素定义的。<road>

 

11 信号简介

信号是交通标志、交通信号灯和用于控制和调节道路交通的特定道路标记。

 

图 124 显示了 ASAM OpenDRIVE 的示例信号定义。

信号具有不同的功能和属性:

  • 它们用于控制交通行为,例如,通过限速和转弯限制,以及提醒道路交通注意危险情况。

  • 它们可以是静态的,也可以是动态的。 静态信号(例如停车标志)不会改变其含义。 动态信号(如交通信号灯或可变留言板)在仿真过程中可能会改变其含义。 它们的动态内容可以在 ASAM OpenSCENARIO 中定义。

信号应相对于特定道路放置。 使用 s 和 t 坐标描述信号相对于道路参考线的位置。 信号灯的位置应清楚地表明它们属于哪条道路或车道以及其有效性从哪里开始。 应避免对其解释的歧义。

每个国家/地区的交通规则都不同。 信号的国家/地区在 @country 属性中指定。 在 ASAM OpenDRIVE 中放置信号时,应考虑特定国家/地区的立法和交通规则。 法规变更由规则生效的年份表示。 可以在元素中的元素中定义整个 ASAM OpenDRIVE 文件的流量规则。<defaultRegulations><header>

信号的 @height 和 @width 属性不是必需的,但建议使用这些属性来正确表示信号。 @length 属性可用于指定信号的粗细。

不与交通绑定的道路标记不被定义为信号,而只是被定义为对象。

具有 @type 和 @subtype 属性的信号只有在与 @country 和 @countryRevision 属性组合时才是唯一的。 由于一些在 ASAM OpenDRIVE 中被视为信号的元素,例如交通信号灯,没有任何官方的 @type和@subtype表示形式,这些在 Signal reference 1.0.0 中指定。 它们可以与适当的 @type、@subtype 和 @country=“OpenDRIVE” 一起使用。

12 铁路简介

除了道路之外,ASAM OpenDRIVE 还可以对基于轨道的交通系统(即有轨电车和有轨电车)进行建模。 ASAM OpenDRIVE 不能用于复杂的铁路网络和铁路信号。 ASAM OpenDRIVE 仅描述公路和铁轨交汇处的铁路网络。

UML 模型中的元素

<railroad> 元素

在 ASAM OpenDRIVE 中,铁路由元素中的元素表示。<railroad><road>

UML class: t_road_railroad
XML tag:   <railroad> (Multiplicity: 0..1)

应沿道路应用的所有铁路定义的容器。

可用的 railroad 元素集目前仅限于道岔的定义。 所有其他条目都应被现有元素覆盖,例如 track definition by 、 signal definition by 等。 特定于铁路的元素是在有轨电车应用程序的背景下定义的。<road><signal>

13 Parser

北京联高软件开发有限公式实现的 C# 版本xodr Parser。

纯 C#;

支持xml格式 *.xodr 文件的解析;

支持转为 json;

支持曲线、曲面的连接、过度、插值计算;

支持各种实体的显示;

部分源代码:

using System;
using System.Collections;
using System.Collections.Generic;

namespace OpenDrive
{
    [Serializable()]
    public class t_junctionGroup : _OpenDriveElement
    {
        /// <summary>
        /// Unique ID within database
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// Name of the junction group. May be chosen freely.
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// Type of junction group
        /// </summary>
        public string type { get; set; } = "";

        /// <summary>
        ///
        /// </summary>
        public List<t_junctionGroup_junctionReference>? junctionReference { get; set; } = null;

        public t_junctionGroup() { }
    }
}
using System;
using System.Collections;
using System.Collections.Generic;

namespace OpenDrive
{
    public class t_road_objects_object
    {
        #region Attributes
        /// <summary>
        /// Indicates whether the object is dynamic or static, 
        /// default value is “no” (static). Dynamic object cannot change its position.
        /// </summary>
        public string dynamic { get; set; }
        /// <summary>
        /// Heading angle of the object relative to road direction
        /// </summary>
        public double hdg { get; set; } = 0.0;
        /// <summary>
        /// Height of the object’s bounding box.
        /// @height is defined in the local coordinate system u/v along the z-axis
        /// </summary>
        public double height { get; set; } = 0.0;
        /// <summary>
        /// Unique ID within database
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// Length of the object’s bounding box, alternative to @radius.
        /// @length is defined in the local coordinate system u/v along the u-axis
        /// </summary>
        public double length { get; set; } = 0.0;
        /// <summary>
        /// Name of the object. May be chosen freely.
        /// </summary>
        public string name { get; set; }
        /// <summary>
        /// "+" = valid in positive s-direction
        /// "-" = valid in negative s-direction
        /// "none" = valid in both directions
        /// (does not affect the heading)
        /// </summary>
        public string orientation { get; set; }
        /// <summary>
        /// Alternative to @pitch and @roll. 
        /// If true, the object is vertically perpendicular to the road surface at 
        /// all points and @pitch and @roll are ignored. Default is false.
        /// </summary>
        public bool perpToRoad { get; set; }
        /// <summary>
        /// Pitch angle relative to the x/y-plane
        /// </summary>
        public double pitch { get; set; }
        /// <summary>
        /// radius of the circular object’s bounding box, alternative to @length and @width. 
        /// @radius is defined in the local coordinate system u/v
        /// </summary>
        public double radius { get; set; }
        /// <summary>
        /// Roll angle relative to the x/y-plane
        /// </summary>
        public double roll { get; set; }
        /// <summary>
        /// s-coordinate of object’s origin
        /// </summary>
        public double s { get; set; }
        /// <summary>
        /// Variant of a type
        /// </summary>
        public string subtype { get; set; }
        /// <summary>
        /// t-coordinate of object’s origin
        /// </summary>
        public double t { get; set; }
        /// <summary>
        /// Type of object. 
        /// For a parking space, the <parkingSpace> element may be used additionally.
        /// </summary>
        public string type { get; set; }
        /// <summary>
        /// Validity of object along s-axis (0.0 for point object)
        /// </summary>
        public double validLength { get; set; }
        /// <summary>
        /// Width of the object’s bounding box, alternative to @radius.
        /// @width is defined in the local coordinate system u/v along the v-axis
        /// </summary>
        public double width { get; set; }
        /// <summary>
        /// z-offset of object’s origin relative to the elevation of the road reference line
        /// </summary>
        public double zOffset { get; set; }

        #endregion

        #region Elements
        /// <summary>
        ///
        /// </summary>
        public List<t_road_objects_object_repeat>? repeat { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public t_road_objects_object_outline? outline { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public t_road_objects_object_outlines? outlines { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public List<t_road_objects_object_material>? material { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public List<t_road_objects_object_validity>? validity { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public t_road_objects_object_surface? surface { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public t_road_objects_object_markings? markings { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public t_road_objects_object_parkingSpace? parkingSpace { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public t_road_objects_object_borders? borders { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public t_road_objects_object_skeleton? skeleton { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public List<t_road_objects_object_tunnel>? tunnel { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public List<t_road_objects_object_bridge>? bridge { get; set; } = null;
        /// <summary>
        ///
        /// </summary>
        public List<t_road_objects_objectReference>? objectReference { get; set; } = null;
        #endregion

        public t_road_objects_object() { }
    }
}

联系联高软件,获取全套C#源代码。

14 参考资料

各种解释器的参考代码。

1 C/C++:A very simple OpenDRIVE parser

A very simple OpenDRIVE parsericon-default.png?t=O83Ahttps://github.com/JensKlimke/xsd2cpp

2 XML+C++:openDRIVE convert dev

https://github.com/pageldev/libOpenDRIVEicon-default.png?t=O83Ahttps://github.com/pageldev/libOpenDRIVE

3 XML+C++:This serves as an OpenDRIVE parser 

An OpenDRIVE parser icon-default.png?t=O83Ahttps://github.com/Brucknem/GuidedResearch

4 XML+C++: openDRIVE Praser

     https://gitee.com/a4zhangfei/OpenDrivePrasericon-default.png?t=O83Ahttps://gitee.com/a4zhangfei/OpenDrivePraser

5 XML+Python: parse-and-visualize-xodr

A project for parsing opendrive .xodr file and visualization using matplotlib.icon-default.png?t=O83Ahttps://github.com/fiefdx/pyopendriveparser

6 XML+Python/C++: Read opendrive with python/c++ parser

https://github.com/esmini/esmini.giticon-default.png?t=O83Ahttps://github.com/esmini/esmini.git

7 XML+C++: Easily accessible C++ object structure of  OpenDRIVE

https://github.com/DLR-TS/xodricon-default.png?t=O83Ahttps://github.com/DLR-TS/xodr

未完待续。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gateway 整合 spring security oauth2

微服务分布式认证授权方案 在分布式授权系统中&#xff0c;授权服务要独立成一个模块做统一授权&#xff0c;无论客户端是浏览器&#xff0c;app或者第三方&#xff0c;都会在授权服务中获取权限&#xff0c;并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…

【原创】统信UOS如何安装最新版Node.js(20.x)

注意直接使用sudo apt install nodejs命令安装十有八九会预装10.x的老旧版本Node.js&#xff0c;如果已经安装的建议删除后安装如下方法重装。 在统信UOS系统中更新Node.js可以通过以下步骤进行&#xff1a; 1. 卸载当前版本的Node.js 首先&#xff0c;如果系统中已经安装了N…

Maven进阶——坐标、依赖、仓库

目录 1.pomxml文件 2. 坐标 2.1 坐标的概念 2.2 坐标的意义 2.3 坐标的含义 2.4 自己项目的坐标 2.5 第三方项目坐标 3. 依赖 3.1 依赖的意义 3.2 依赖的使用 3.3 第三方依赖的查找方法 3.4 依赖范围 3.5 依赖传递和可选依赖 3.5.1 依赖传递 3.5.2 依赖范围对传…

推荐一个开源非线性视频编辑器:Kdenlive

Kdenlive是一个开源的视频编辑软件&#xff0c;项目始于约2003年。它基于Qt和KDE框架库构建&#xff0c;大部分视频处理由MLT框架完成&#xff0c;同时依赖其他开源项目如FFmpeg、frei0r、movit、ladspa、sox等。 软件特点&#xff1a; - 多轨视频编辑&#xff1a;支持多个音频…

大数据新视界 -- 大数据大厂之大数据和增强现实(AR)结合:创造沉浸式数据体验

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP

文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整&#xff0c;仅供参考&#xff01; 除WEB&#xff0c;RE&#xff0c;PWN外&#xff0c;其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…

springboot066人事系统(论文+源码)_kaic

基于vue的人事系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为学校以及一些培训机构&#xff0c;都在用信息化战术来部署线上学习以及线上考试&#xff0c;可以与线下的考试有机的结合在一起&#xff0c;实现基于vue的人事系统在技术上已成熟。本文介绍…

u盘装win10系统提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”解决方法

我们在u盘安装原版win10 iso镜像时&#xff0c;发现在选择硬盘时提示了“windows无法安装到这个磁盘,选中的磁盘采用GPT分区形式”&#xff0c;直接导致了无法继续安装下去。出现这种情况要怎么解决呢&#xff1f;下面小编分享u盘安装win10系统提示“windows无法安装到这个磁盘…

信息安全工程师(53)网络安全审计机制与实现技术

前言 网络安全审计机制是指为了保护网络安全并发现潜在风险和漏洞而进行的一系列审计活动。审计的目的是检查并评估网络系统的安全性&#xff0c;以确保其符合相关法律法规和安全标准。 一、网络安全审计机制的重要性 网络安全审计机制对于保护组织的信息资产和敏感数据至关重要…

简单的 curl HTTP的POSTGET请求以及ip port连通性测试

简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目&#xff0c;需要到客户那边进行项目部署&#xff0c;项目部署完成后我们需要进行项目后端接口的测试功能&#xff0c;但是由于客户那边么有条件安装类似于postman这种的测试工具&am…

CSS3文本阴影、文本换行、文本溢出、文本修饰、文本描边的使用

1.文本阴影&#xff1a;text-shadow 2.文本换行&#xff1a; white-space&#xff1a;pre&#xff08;可以理解为按原文显示&#xff09; white-space&#xff1a;pre-wrap&#xff08;不会超出父容器&#xff09; 3.文本溢出 text-overflow&#xff1a;ellipsis一般配合文本…

人工智能的未来:变革生活与工作的新篇章

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;我们正站在一个前所未有的变革时代。AI不仅重新定义了医疗、企业运营和日常生活的各个方面&#xff0c;还潜移默化地改变着我们的思维方式和工作习惯。本文将深入探讨人工智能技术的应用前景&#xff0c;以及…

web前端-html:简单创建表格表单相结合的网页

效果&#xff1a; <body><form action"这里如果为空表单提交后不会有任何操作"method"get"<label for"edit">用户名</label><input type"text" name"用户名" id"最好不要空&#xff0c;id属性…

【MySQL】详解MySQL数据类型

一、数据类型 各类型的数值范围&#xff1a; 在MySQL中&#xff0c;整型可以指定是有符号的和无符号的&#xff0c;默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。对于int类型可能存放不下的数据&#xff0c;尽量不使用unsigned&#xff0c;unsigned int 同样可…

分布式链路追踪-01初步认识SkyWalking

一 SkyWaling是什么&#xff1f; Skywalking是分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统&#xff0c;提供分布式追踪、服务网格遥…

信发软件之电脑版拖动——未来之窗行业应用跨平台架构

一、电脑版拖动 二、电脑版随意移动函数 var _movefalse;//移动标记 var _x,_y;//鼠标离控件左上角的相对位置 $("#"宿主id).click(function(){ }).mousedown(function(e){ _movetrue; _xe.pageX-parseInt($("#"宿主id).css("left")); _ye…

Spring Boot论坛网站:安全特性与性能优化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

计算机网络(十二) —— 高级IO

#1024程序员节 | 征文# 目录 一&#xff0c;预备 1.1 重新理解IO 1.2 五种IO模型 1.3 非阻塞IO 二&#xff0c;select 2.1 关于select 2.2 select接口参数解释 2.3 timeval结构体和fd_set类型 2.4 socket就绪条件 2.5 select基本工作流程 2.6 简单select的服务器代…

论文解读 | ECCV2024 AutoEval-Video:一个用于评估大型视觉-语言模型在开放式视频问答中的自动基准测试...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 陈修元&#xff0c;上海交通大学清源研究院硕士生 概述 总结来说&#xff0c;我们提出了一个新颖且具有挑战性的基准测试AutoEvalVideo&#xff0c;用于全…

蓝牙资讯|iOS 18.1 正式版下周推送,AirPods Pro 2耳机将带来助听器功能

苹果公司宣布将在下周发布 iOS 18.1 正式版&#xff0c;同时确认该更新将为 AirPods Pro 2 耳机带来新增“临床级”助听器功能。在启用功能后&#xff0c;用户首先需要使用 AirPods 和 iPhone 进行简短的听力测试&#xff0c;如果检测到听力损失&#xff0c;系统将创建一项“个…