3. 道路网络基础

在 RoadRunner 中,道路网络并不是一条“画出来的带子”,而是由车道(Lane)、路肩(Shoulder)、人行道(Sidewalk)、道路标线(Road Marking)、交通标志(Traffic Sign)与信号灯(Traffic Signal)共同构成的语义化结构。理解这些对象的层级关系,是后续做交叉口、匝道、停车场和场景仿真的前提。本节先建立“横断面—标线—标志—信号”的整体认知,再给出可落地的创建顺序。

一、核心原理:道路横断面的语义分层

RoadRunner 的道路由中心线(Centerline)驱动,沿中心线向两侧生成车道。每条车道有独立的宽度、行驶方向、限速和连接关系。横断面从内到外通常依次为:中央分隔带或双黄线 → 行车道 → 路缘(Curb)→ 路肩 → 人行道。路肩不是行车道,它用于紧急停车、排水和侧向支撑;人行道则属于行人域,与车行域通过路缘石在几何上分离。标线、标志和信号灯是叠加在道路网络之上的“控制层”,它们不改变几何,但决定交通语义。

关键认知:几何决定“车能走哪里”,标线与信号决定“车该怎么走”。两者必须一致,否则仿真中会出现车辆压线、逆行或信号冲突。

二、六类对象的创建方法与参数

在 RoadRunner 中,推荐按“先几何、后控制”的顺序创建,避免反复重建道路。下表给出每类对象的核心参数与创建入口。

对象核心参数创建入口常见取值/说明
车道 Lane宽度、方向、限速、连接Road 工具沿中心线生成城市道路 3.25–3.75 m;高速 3.75 m
路肩 Shoulder宽度、类型、是否可行驶Road 属性面板 Shoulder0.5–2.5 m,通常不可行驶
人行道 Sidewalk宽度、高度、路缘偏移Sidewalk 工具或 Road 属性1.5–3.0 m,高出路面 0.12–0.15 m
道路标线 Marking类型、颜色、线宽、虚实Marking 工具 / Lane Marking白实线、白虚线、黄双实线
交通标志 Sign类型、朝向、高度、位置Sign 工具 + 资源库限速、停车、让行、指示
信号灯 Signal相位、灯组、配时、朝向Signal 工具 + 相位编辑器直行/左转/右转分相

创建车道时,先确定中心线走向,再在属性面板中设置车道数与单侧宽度。RoadRunner 会自动生成车道边界,但边界线型需要手动指定:实线表示禁止变道,虚线表示允许变道。路肩通常跟随车道自动生成,若道路两侧功能不同,可分别设置左右路肩宽度。人行道建议使用独立工具绘制,并通过路缘高度与车行域分离,这样在导出 OpenDRIVE 时能保留正确的行人拓扑。

# 典型城市道路横断面参数(单侧)
lane_width      = 3.50 m
lane_count      = 2        # 同向两条车道
shoulder_width  = 1.00 m
sidewalk_width  = 2.00 m
curb_height     = 0.15 m
speed_limit     = 50 km/h

三、标线、标志与信号灯的协同

标线是“静态控制”,信号灯是“动态控制”,标志是“规则提示”。三者必须与车道方向一致。例如,一条左转专用车道,其地面应有左转箭头标线,路口前应设置左转指示标志,信号灯应包含左转相位。若只画了箭头却没有对应相位,仿真车辆会在路口等待或错误通行。

信号灯的创建分三步:先在路口放置信号灯杆,再为每个灯组绑定进口道和转向,最后在相位编辑器中定义红、黄、绿时长。RoadRunner 支持将信号相位导出为 OpenDRIVE 的 <signal> 与 <controller> 结构,因此相位命名建议使用“进口道_转向”格式,例如 NB_Left、EB_Through,便于后续脚本读取。

实操建议:先完成所有车道连接,再统一添加标线;标线添加完成后,最后放置标志和信号灯。这样可避免因道路调整导致标线错位。

四、案例:一个标准十字路口的创建流程

  1. 绘制两条互相垂直的中心线,交叉口处保留足够长度。
  2. 为每条道路设置双向四车道,单侧两条,宽度 3.5 m。
  3. 在交叉口四个进口道分别添加左转、直行、右转车道,并设置车道连接。
  4. 添加路肩与人行道,人行道在路口处断开并设置人行横道。
  5. 绘制停止线、人行横道线、导向箭头和车道分界线。
  6. 放置限速标志、让行标志和指路标志。
  7. 放置四组信号灯,绑定进口道,配置直行与左转相位。
  8. 检查车道连接、标线连续性和信号相位是否一致。
道路网络横断面与交叉口控制层 横断面(由内到外) 人行道 路肩 行车道 中央 行车道 路肩 人行道 标线类型 白虚线:可变道 白实线:禁止变道 双黄线:分隔对向 交叉口控制层 50 让 图例与创建顺序 行车道:先定中心线与车道数 路肩:跟随车道自动生成 人行道:独立绘制并设路缘高 标线:最后统一添加 信号灯:绑定进口道与相位 标志:朝向与高度需一致 顺序:车道 → 路肩 → 人行道 → 标线 → 标志 → 信号

五、常见误区与复盘

  • 误区一:先画标线再调车道。车道宽度一变,标线全部错位。应坚持“几何优先”。
  • 误区二:路肩当车道用。路肩在 OpenDRIVE 中通常标记为不可行驶,若误设为行车道,仿真车辆会驶入路肩。
  • 误区三:人行道与车道共面。缺少路缘高度会导致行人与车辆拓扑混淆,导出后行人可能出现在车道上。
  • 误区四:信号相位与车道转向不匹配。左转车道没有左转相位,车辆会在路口长时间等待或闯红灯。
  • 误区五:标志朝向错误。标志应面向来车方向,否则在仿真中不可见或语义相反。
复盘检查清单:① 每条车道是否有明确方向和限速;② 标线是否与车道边界一致;③ 人行道是否通过路缘与车行域分离;④ 每个信号灯是否绑定正确的进口道和转向;⑤ 标志朝向是否面向来车。五项全部通过,再进行场景仿真。

掌握以上六类对象的语义与创建顺序后,道路网络就具备了可仿真的基础结构。后续的交叉口连接、匝道设计和场景脚本,都建立在这一层“几何 + 控制”的准确表达之上。