路网生成
用 pyodrx 生成参数化 OpenDRIVE(.xodr),支持 7 种布局。
1. 工具参数
1.1 generate_rich_xodr
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
layout |
string | straight |
布局名,见第 2 节 |
params_json |
string | {} |
覆盖默认参数 |
out_dir |
string | llm/output/xodr |
输出目录 |
filename |
string | 自动 | 文件名 |
1.2 list_road_layouts
无参数,返回全部布局名、中文名与默认参数。
2. 7 种布局与默认参数
| 布局 | 含义 | 默认参数 |
|---|---|---|
straight |
直路 | length=200.0, lanes=2, lane_width=3.5 |
highway_curve |
高速弯道 | radius=250.0, angle=90.0, lanes=2, spiral_len=40.0 |
s_curve |
S 弯 | radius=200.0, angle=45.0, lanes=2, spiral_len=30.0 |
cross_junction |
十字路口 | arm_length=80.0, radius=12.0, lanes=2, lane_width=3.5 |
t_junction |
丁字路口 | arm_length=80.0, radius=12.0, lanes=2, lane_width=3.5 |
on_ramp_merge |
匝道合流 | length=200.0, merge_len=80.0, lane_width=3.5 |
off_ramp_diverge |
匝道分流 | length=200.0, diverge_len=80.0, lane_width=3.5 |
3. 参数说明
| 参数 | 适用布局 | 含义 |
|---|---|---|
length |
straight / on_ramp_merge / off_ramp_diverge | 路段总长(米) |
lanes |
straight / 弯道 / 路口 | 单侧车道数 |
lane_width |
全部 | 车道宽(米) |
radius |
弯道 / 路口 | 曲线半径或路口环半径(米) |
angle |
弯道 | 圆弧转角(度) |
spiral_len |
弯道 | 缓和曲线长度(米) |
arm_length |
路口 | 各条臂的长度(米) |
merge_len |
on_ramp_merge | 车道数 1→2 的渐变长度(米) |
diverge_len |
off_ramp_diverge | 车道数 2→1 的渐变长度(米) |
4. 对话示例
列出所有路网布局
生成一个十字路口路网
生成一个匝道合流路网,主路 4 车道、匝道 2 车道
5. 代码示例
from road_builder import write, inspect_road
write("cross_junction", "output/cross_junction.xodr",
{"arm_length": 100.0, "lanes": 2})
info = inspect_road("output/cross_junction.xodr")
print(info["valid"], info["road_count"], info["geometry_count"])
# True 12 28
6. 几何校验
inspect_road() 返回:
| 字段 | 含义 |
|---|---|
valid |
是否通过几何校验 |
road_count |
道路条数 |
geometry_count |
几何段数 |
size_bytes |
文件大小 |
lane_profile |
车道数变化剖面(如匝道 1→2) |
必须调用 adjust_roads_and_lanes()
PlanView.add_geometry() 只把几何存进 _raw_geometries,而 get_element()
遍历的是 _adjusted_geometries。不调用 OpenDrive.adjust_roads_and_lanes()
写出的 .xodr 没有几何,CARLA 加载会一直等到超时。
road_builder.build() 内部已无条件调用,inspect_road() 会检查这一点。
7. 生成结果
| 布局 | 文件大小 | 道路数 | 几何段数 | 生成点 |
|---|---|---|---|---|
| 直路 | 2626 B | 1 | 1 | 2 |
| 高速弯道 | 3071 B | 1 | 1 | 2 |
| S 弯 | 3694 B | 1 | 1 | 2 |
| 十字路口 | 22708 B | 12 | 28 | 12 |
| 丁字路口 | 17023 B | 9 | 21 | 9 |
| 匝道合流 | 4195 B | 1 | 1 | 4 |
| 匝道分流 | 3496 B | 1 | 1 | 3 |
效果图见效果展示。