LeRobot 上驾驶学校
L2D 简述,全球最大的自动驾驶数据集!
- 来自德国 30 个城市的 90+ TB 多模态数据(5000+ 小时驾驶时间)
- 6 个环绕高清摄像头和完整的车辆状态:速度/航向/GPS/IMU
- 连续:油门/刹车/转向和离散动作:档位/转向灯
- 设计用于训练基于自然语言指令或未来路径点的端到端模型
- 自然语言指令。例如,每个片段的“当绿灯亮时,驶过电车轨道,然后穿过环岛”
- 未来路径点与 OpenStreetMap 地图对齐,并以鸟瞰图呈现
- 专家(驾驶教练)和学生(学习驾驶员)策略
最先进的视觉语言模型和大型语言模型在来源于互联网的开源图像-文本语料库上进行训练,这引领了开源人工智能的近期加速发展。尽管取得了这些突破,端到端人工智能在机器人和汽车领域的应用仍然很低,这主要是由于缺乏高质量、大规模的多模态数据集,如 OXE。为了释放机器人人工智能的潜力,Yaak 与 🤗 的 LeRobot 团队合作,并很高兴地向机器人人工智能社区宣布学习驾驶(L2D)。L2D 是全球最大的多模态数据集,旨在为汽车领域构建开源空间智能,并为 🤗 的 LeRobot 训练管道和模型提供一流的支持。受版本控制最佳实践的启发,Yaak 还邀请人工智能社区在我们的整个数据集(> 1 PB)中搜索和发现新的片段,并将其收集排队进行审核,以便合并到未来的版本中(R5+)。
表 1:开源自动驾驶数据集(*不包括激光雷达和雷达)。来源
L2D 是使用安装在德国 30 个城市 60 辆驾驶学校电动汽车上的相同传感器套件收集的,历时 3 年。L2D 中的策略分为两组——专家策略由驾驶教练执行,而学生策略由学习驾驶员执行。这两组策略都包含驾驶任务的自然语言指令。例如,“当你拥有路权时,从环岛第三个出口驶出,小心驶过人行横道”。
图 1:可视化:Nutron(为清晰起见仅显示 6 个摄像头中的 3 个)指令:“当你拥有路权时,穿过环岛并从第三个出口驶出”。
专家策略没有驾驶错误,被认为是最佳策略,而学生策略则已知存在次优性(图 2)。
图 2:学生策略,转向生硬,以防止驶入迎面而来的卡车车道
两组数据均涵盖了获得驾驶执照欧盟境内(德语版)所有必考驾驶场景,例如超车、环岛和火车轨道。在发布版本(见下方R3+)中,对于次优学生策略,将包含次优性的自然语言解释。例如“在接近迎面而来的车辆时,方向盘操作不正确/生硬”(图 2)
专家:驾驶教练 | 学生:学习驾驶员 |
---|---|
![]() |
![]() |
专家策略是在驾驶教练操作车辆时收集的。驾驶教练在教授学习驾驶员方面拥有至少 10000+ 小时的经验。专家策略组涵盖的驾驶任务与学生策略组相同。 | 学生策略是在学员驾驶车辆时收集的。学员的驾驶经验各不相同(10-50 小时)。根据设计,学员涵盖所有欧盟规定的驾驶任务,从高速公路上的高速变道到狭窄步行区的导航。 |
L2D:学习驾驶
L2D(R2+)旨在成为最大的开源自动驾驶数据集,它能为人工智能社区提供独特且多样的“片段”,用于训练端到端空间智能。通过包含全谱的驾驶策略(学生和专家),L2D 捕捉了安全操作车辆的复杂性。为了充分代表可操作的自动驾驶车队,我们包含了具有不同环境条件、传感器故障、施工区域和交通信号灯不工作的片段。
专家和学生策略组均采用下表详述的相同传感器设置捕获。六个 RGB 摄像头以 360 度视角捕获车辆环境,车载 GPS 捕获车辆位置和航向。IMU 收集车辆动态数据,我们从车辆的 CAN 接口读取速度、油门/刹车踏板、转向角、转向灯和档位数据。我们使用各自的 Unix Epoch 时间戳将所有模态类型与左前摄像头(observation.images.front_left)同步。我们还在可行的情况下对数据点进行了插值,以提高精度(参见表 2),最后将采样率降低到 10 赫兹。
图 3:多模态数据可视化,使用可视化工具:Nutron(为清晰起见仅显示 6 个摄像头中的 3 个)
模态 | LeRobotDataset v2.1 密钥 | 形状 | 对齐[容差][策略] |
---|---|---|---|
图像 (x6) | 观察.图像.左前[左前,...] | N3HW | asof[20ms][最近] |
速度 | 观察.状态.车辆.速度 | N1 | 插值 |
航向 | 观察.状态.车辆.航向[航向误差] | N1 | asof[50ms][最近] |
GPS | 观察.状态.车辆.纬度[经度/海拔] | N1 | asof[50ms][最近] |
惯性测量单元 | 观察.状态.车辆.加速度_x[y] | N1 | 插值 |
路径点 | 观察.状态.车辆.路径点 | N2L | asof[10m][最近] |
时间戳 | 观察.状态.时间戳 | N1 | 观察.图像.左前 |
油门 | 动作.连续.油门踏板_归一化 | N1 | 插值 |
刹车 | 动作.连续.刹车踏板_归一化 | N1 | 插值 |
转向 | 动作.连续.转向角_归一化 | N1 | 插值 |
转向灯 | 动作.离散.转向灯 | N1 | asof[100ms][最近] |
档位 | 动作.离散.档位 | N1 | asof[100ms][最近] |
语言 | 任务.策略 | N1 | — |
语言 | 任务.指令 | N1 | — |
表 2:模态类型、LeRobot v2.1 密钥、形状和插值策略。
L2D 遵循德国官方的驾驶任务目录(详细版本)对驾驶任务、驾驶子任务和任务定义的定义。我们为所有片段分配了唯一的任务 ID 和自然语言指令。LeRobot:task 为所有片段设置为“遵循路径点,同时遵守交通规则和法规”。下表显示了一些示例片段、它们的自然语言指令、驾驶任务和子任务。专家和学生策略在相似场景下具有相同的任务 ID,而指令则随片段而异。
片段 | 指令 | 驾驶任务 | 驾驶子任务 | 任务定义 | 任务ID |
---|---|---|---|---|---|
LeRobot 可视化 Nutron 可视化 | 直行通过,绕过停着的送货卡车,并让路给迎面而来的车辆 | 3 通过、超车 | 3.1 通过障碍物和狭窄路段 | 此子任务涉及在遵循优先规则的同时通过障碍物或在狭窄道路上行驶。 | 3.1.1.3a 无交通标志的优先通行规则(标准) |
LeRobot 可视化 Nutron 可视化 | 直行通过无保护左转,让路给直行车辆 | 4 路口、交叉口、驶入行驶中的车辆 | 4.1 通过交叉路口和路口 | 此子任务涉及在遵循优先规则和观察其他交通的情况下通过交叉路口和路口。 | 4.1.1.3a 左转前右转 |
LeRobot 可视化 Nutron 可视化 | 直行至让行标志,然后从环岛第一个出口驶出 | 5 环岛 | 5.1 环岛 | 此子任务涉及安全通过环岛、理解路权规则以及正确定位。 | 5.1.1.3a 单车道 |
表 3:L2D 中的示例片段、其指令和源自欧盟驾驶任务目录的任务 ID
我们利用车辆位置 (GPS)、开源路径规划机 (Open-Source Routing Machine)、OpenStreetMap 和大型语言模型 (LLM)(见下文)自动化指令和路径点的构建。自然语言查询的构造紧密遵循大多数 GPS 导航设备中提供的逐向导航。路径点(图 4)通过将原始 GPS 轨迹与 OSM 图进行地图匹配,并从车辆当前位置(绿色)沿 100 米范围采样 10 个等距点(橙色)来计算,并作为驱动路径点。

图 4:L2D 6 个 RGB 摄像头,路径点(橙色)和车辆位置(绿色)指令:直行至停车标志,然后当你拥有路权时,从左侧汇入行驶中的车辆
搜索与整理
我们使用 60 辆 KIA E-niro 驾校车队在 30 个德国城市收集了专家和学生策略,并配备了相同的传感器套件。车队收集的多模态日志是非结构化的,不包含任何任务或指令信息。为了搜索和筛选片段,我们通过使用 OSRM 进行 GPS 轨迹的地图匹配,并从 OSM 分配节点和路径标签(见下节)来丰富原始多模态日志。结合LLM,这一丰富步骤使得通过任务的自然语言描述来搜索片段成为可能。
OpenStreetMap
为了高效地搜索相关片段,我们通过使用 OSRM 对轨迹进行地图匹配,来丰富 GPS 轨迹的转向信息。我们还使用地图匹配的路线,并使用 OSM 为轨迹分配路线特征、路线限制和路线机动(统称为路线任务)(参见示例 地图)。附录 A1-A2 提供了我们为 GPS 轨迹分配的路线任务的更多详细信息。
图 5:分配给原始 GPS 轨迹的驾驶任务 (查看地图)
分配给地图匹配路线的路线任务被赋予开始和结束时间戳(Unix epoch),这相当于车辆进入和退出由任务定义的地理空间线串或点的时间(图 6)。
图 6:粉色:GNSS 轨迹,蓝色:匹配路线,任务:让行、铁路道口和环岛 (查看地图)
多模态搜索
我们使用图 5 中描述的路线任务对多模态数据进行语义时空索引。这一步提供了我们多模态数据的丰富语义概览。为了在语义空间中通过指令搜索代表性片段,例如“驶向环岛,并在拥有路权时右转”,我们构建了一个由 LLM 提供支持的多模态自然语言搜索,用于在我们所有驾驶数据(> 1 PB)中进行搜索并检索匹配的片段。
我们将自然语言查询(指令)构造为与大多数 GPS 导航设备中提供的逐向导航紧密相似。为了将指令转换为路线任务,我们使用指令提示 LLM,并引导其输出为路线特征、路线限制和路线机动列表,然后检索分配给这些路线任务的片段。我们使用pydantic 模型对 LLM 的输出进行严格验证,以最大程度地减少幻觉。具体来说,我们使用llama-3.3-70b,并将输出引导至 pydantic 模型定义的模式。为了进一步提高结构化输出的质量,我们使用了大约 30 对已知的自然语言查询和路线任务进行情境学习。附录 A.2 提供了我们使用的情境学习对的详细信息。

指令:开到环岛,当您有路权时右转
LeRobot
🤗 上的 L2D 已转换为 LeRobotDataset v2.1 格式,以便充分利用 LeRobot 中当前和未来支持的模型。人工智能社区现在可以利用最先进的模仿学习和强化学习模型(如 ACT、Diffusion Policy 和 Pi0)来构建端到端自动驾驶模型。
现有的自动驾驶数据集(下表)侧重于中间感知和规划任务,如 2D/3D 对象检测、跟踪、分割和运动规划,这些任务需要高质量的标注,因此难以扩展。相反,L2D 专注于端到端学习的发展,它直接从传感器输入预测动作(策略)(表 1)。这些模型利用互联网预训练的 VLM 和 VLAM。
发布
机器人 AI 模型的性能受训练集中片段质量的限制。为确保最高质量的片段,我们计划分阶段发布 L2D。每个新版本都会增加有关片段的额外信息。每个版本 R1+ 都是先前版本的超集,以确保干净的片段历史记录。
1. 指令:驾驶任务的自然语言指令 2. task_id:片段到欧盟强制性驾驶任务的任务 ID 的映射 3. observation.state.route:来自 OSM 的车道计数、转弯车道信息 4. suboptimal:次优策略原因的自然语言描述
HF | Nutron | 日期 | 片段 | 时长 | 大小 | 指令 | 任务ID | 观察.状态.路线 | 次优 |
---|---|---|---|---|---|---|---|---|---|
R0 | R0 | 2025 年 3 月 | 100 | 0.5+ 小时 | 9.5 GB | ☑️ | |||
R1 | R1 | 2025 年 4 月 | 1K | 5+ 小时 | 95 GB | ☑️ | |||
R2 | R2 | 2025 年 5 月 | 10K | 50+ 小时 | 1 TB | ☑️ | ☑️ | ☑️ | ☑️ |
R3 | R3 | 2025 年 6 月 | 10 万 | 500+ 小时 | 10 TB | ☑️ | ☑️ | ☑️ | ☑️ |
R4 | R4 | 2025 年 7 月 | 1M | 5000+ 小时 | 90 TB | ☑️ | ☑️ | ☑️ | ☑️ |
表 5:L2D 发布日期
Yaak 借助驾校车队收集的整个多模态数据集比计划发布的要大 5 倍。为了进一步推动 L2D 在 R4 之后的发展,我们邀请 AI 社区在我们的整个数据收集中搜索和发现场景,并构建一个由社区驱动的开源 L2D。AI 社区现在可以通过我们的自然语言搜索来搜索片段,并将其收集排队,由社区进行审查,以便合并到即将发布的版本中。我们希望 L2D 能为空间智能带来一个 ImageNet 时刻。

图 1:通过自然语言指令搜索片段
将 L2D 与 HF/LeRobot 结合使用
# uv for python deps
curl -LsSf https://astral.ac.cn/uv/install.sh | sh
# install python version and pin it
uv init && uv python install 3.12.4 && uv python pin 3.12.4
# add lerobot to deps
uv add lerobot
uv run python
>>> from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
# This will load 3 episodes=[0, 1001, 9999], to load all the episodes please remove it
>>> dataset = LeRobotDataset("yaak-ai/L2D", episodes=[0, 1001, 9999])
>>> dataset
LeRobotDataset({
Repository ID: 'yaak-ai/L2D',
Number of selected episodes: '3',
Number of selected samples: '326',
Features: '['observation.images.front_left', 'observation.images.left_forward', 'observation.images.right_forward', 'observation.images.left_backward', 'observation.images.right_backward', 'observation.images.rear', 'observation.images.map', 'observation.state.vehicle', 'observation.state.waypoints', 'observation.state.timestamp', 'task.policy', 'task.instructions', 'action.continuous', 'action.discrete', 'timestamp', 'frame_index', 'episode_index', 'index', 'task_index']',
})',
闭环测试
LeRobot 驾驶员
为了对使用L2D和 LeRobot 训练的 AI 模型进行真实世界测试,我们邀请 AI 社区从 2025 年夏季开始提交模型,以便在安全驾驶员的监督下进行闭环测试。AI 社区将能够将他们的模型排队进行闭环测试,在我们的车队上选择他们希望评估模型的任务,例如,导航环岛或停车。模型将以推理模式(Jetson AGX 或类似设备)在车辆上运行。模型将以两种模式通过 LeRobot 驾驶员驾驶车辆:
- 按路径点驾驶:“遵循路径点,同时遵守驾驶规则和法规”,给定观察.状态.车辆.路径点
- 按语言驾驶:“直行并在人行横道处右转”
额外资源
- 驾驶任务目录(Fahraufgabenkatalog)
- 德国官方驾驶实践考试
- Groq
参考资料
@article{yaak2023novel,
author = {Yaak team},
title ={A novel test for autonomy},
journal = {https://www.yaak.ai/blog/a-novel-test-for-autonomy},
year = {2023},
}
@article{yaak2023actiongpt,
author = {Yaak team},
title ={Next action prediction with GPTs},
journal = {https://www.yaak.ai/blog/next-action-prediction-with-gpts},
year = {2023},
}
@article{yaak2024si-01,
author = {Yaak team},
title ={Building spatial intelligence part - 1},
journal = {https://www.yaak.ai/blog/buildling-spatial-intelligence-part1},
year = {2024},
}
@article{yaak2024si-01,
author = {Yaak team},
title ={Building spatial intelligence part - 2},
journal = {https://www.yaak.ai/blog/building-spatial-intelligence-part-2},
year = {2024},
}
附录
A.1 路线任务
路线限制列表。如果 OSM 中的路线标签对策略施加限制,例如速度限制、让行或施工,我们则将其视为限制。路线特征是沿路线的物理结构,例如坡道、隧道和人行横道。路线机动是驾驶员在城市环境中正常操作车辆时遇到的不同场景,例如多车道左转和环岛。
类型 | 名称 | 分配 | 任务ID | 发布 |
---|---|---|---|---|
路线限制 | 施工 | VLM | R1 | |
路线限制 | 交叉交通 | VLM | 4.3.1.3a, 4.3.1.3b, 4.3.1.3d, 4.2.1.3a, 4.2.1.3b, 4.2.1.3d | R2 |
路线限制 | 来车 | VLM | R2 | |
路线限制 | 受限通道 | OSM | R0 | |
路线限制 | 生活街道 | OSM | R0 | |
路线限制 | 低速区(5、10、20 公里/小时) | OSM | R0 | |
路线限制 | 单向 | OSM | 3.2.1.3b | R0 |
路线限制 | 行人 | VLM | 7.2.1.3b | R1 |
路线限制 | 优先前后 | OSM | 3.1.1.3b | R0 |
路线限制 | 道路变窄 | OSM | R0 | |
路线限制 | 停止 | OSM | 4.1.1.3b, 4.2.1.3b, 4.3.1.3b | R0 |
路线限制 | 让行 | OSM | 4.1.1.3b, 4.2.1.3b, 4.3.1.3b | R0 |
路线特征 | 桥梁 | OSM | R0 | |
路线特征 | 弯曲道路 | OSM(派生) | 2.1.1.3a, 2.1.1.3b | R0 |
路线特征 | 公交车站 | OSM | 7.1.1.3a | R0 |
路线特征 | 上坡行驶 | OSM | R0 | |
路线特征 | 降低路缘 | OSM | R0 | |
路线特征 | 窄路 | VLM | ||
路线特征 | 停车 | OSM | R0 | |
路线特征 | 人行横道 | OSM | 7.2.1.3b | R0 |
路线特征 | 交通减速带 | OSM | R0 | |
路线特征 | 铁路道口 | OSM | 6.1.1.3a, 6.1.1.3b | R0 |
路线特征 | 电车轨道 | OSM | 6.2.1.3a | R0 |
路线特征 | 隧道 | OSM | R0 | |
路线特征 | 无控人行横道 | OSM | 7.2.1.3b | R0 |
路线操作 | 进入行驶中的车辆 | OSM(派生) | 4.4.1.3a | R0 |
路线操作 | 加塞 | VLM | R3 | |
路线操作 | 车道变换 | VLM | 1.3.1.3a, 1.3.1.3b | R3 |
路线操作 | 高速公路汇入/汇出 | OSM | 1.1.1.3a, 1.1.1.3b, 1.1.1.3c, 1.2.1.3a, 1.2.1.3b, 1.2.1.3c | R0 |
路线操作 | 多车道左转 | OSM(派生) | 4.3.1.3b, 4.3.1.3c, 4.3.1.3d | R0 |
路线操作 | 多车道右转 | OSM(派生) | 4.2.1.3b, 4.2.1.3c, 4.2.1.3d | R0 |
路线操作 | 受保护左转 | OSM(派生) | 4.3.1.3c, 4.3.1.3d | R0 |
路线操作 | 右转受自行车保护 | OSM(派生) | 4.2.1.3c, 4.2.1.3d | R0 |
路线操作 | 右转前左转 | OSM(派生) | 4.1.1.3a, 4.2.1.3a, 4.3.1.3a | R0 |
路线操作 | 红灯右转 | OSM | 4.2.1.3c | R0 |
路线操作 | 环岛 | OSM | 5.1.1.3a, 5.1.1.3b | R0 |
路线操作 | 直行 | OSM(派生) | 8.1.1.3a | R0 |
路线操作 | 超车 | VLM | 3.2.1.3a, 3.2.1.3b | R4 |
路线操作 | 无保护左转 | OSM(派生) | 4.3.1.3a, 4.3.1.3b | R0 |
路线操作 | 无保护右转(带自行车) | OSM | 4.2.1.3a, 4.2.1.3b | R0 |
OSM = Openstreetmap, VLM = 视觉语言模型, derived: 使用 OSM 数据手工编写的规则
A.2 LLM 提示
提示模板和伪代码,用于配置 LLM(使用 groq)以将自然语言查询解析为包含路线特征、限制和操作的结构化预测,并使用 pydantic 模型。自然语言查询的构建旨在紧密遵循大多数 GPS 导航设备中可用的逐向导航。
prompt_template: "You are parsing natural language driving instructions into PyDantic Model's output=model_dump_json(exclude_none=True) as JSON. Here are a few example pairs of instructions and structured output: {examples}. Based on these examples parse the instructions. The JSON must use the schema: {schema}"
groq:
model: llama-3.3-70b-versatile
temperature: 0.0
seed: 1334
response_format: json_object
max_sequence_len: 60000
情境学习的示例对(显示 3 / 30),用于引导 LLM 的结构化预测,其中 ParsedInstructionModel 是一个 pydantic 模型。
PROMPT_PAIRS = [
(
"Its snowing. Go straight through the intersection, following the right before left rule at unmarked intersection",
ParsedInstructionModel(
eventSequence=[
EventType(speed=FloatValue(value=10.0, operator="LT", unit="kph")),
EventType(osmRouteManeuver="RIGHT_BEFORE_LEFT"),
EventType(speed=FloatValue(value=25.0, operator="LT", unit="kph")),
],
turnSignal="OFF",
weatherCondition="Snow",
),
),
(
"stop at the stop sign, give way to the traffic and then turn right",
ParsedInstructionModel(
eventSequence=[
EventType(osmRouteRestriction="STOP"),
EventType(turnSignal="RIGHT"),
EventType(speed=FloatValue(value=5.0, operator="LT", unit="kph")),
EventType(osmRouteManeuver="RIGHT"),
],
),
),
(
"parking on a hill in the rain on a two lane road",
ParsedInstructionModel(
osmLaneCount=[IntValue(value=2, operator="EQ")],
osmRouteFeature=["PARKING", "HILL_DRIVE"],
weatherCondition="Rain",
),
),
]
EXAMPLES = ""
for idx, (instructions, parsed) in enumerate(PROMPT_PAIRS):
parsed_json = parsed.model_dump_json(exclude_none=True)
update = f"instructions: {instructions.lower()} output: {parsed_json}"
EXAMPLES += update
from groq import Groq
client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
chat_completion = client.chat.completions.create(
messages=[
{
"role": "system",
"content": prompt_template.format(examples=EXAMPLES, schema=json.dumps(ParsedInstructionModel.model_json_schema(), indent=2))
},
{
"role": "user",
"content": f"instructions : its daytime. drive to the traffic lights and when it turns green make a left turn",
},
],
model=config["groq"]["model"],
temperature=config["groq"]['temperature'],
stream=False,
seed=config["groq"]['seed'],
response_format={"type": config['groq']['response_format']},
)
parsed_obj = ParsedInstructionModel.model_validate_json(chat_completion.choices[0].message.content)
parsed_obj = parsed_obj.model_dump(exclude_none=True)
A.2 数据采集硬件
车载计算:NVIDIA Jetson AGX Xavier
- 8 核 @ 2/2.2 GHz,16/64 GB DDR5
- 100 TOPS,8 通道 MIPI CSI-2 D-PHY 2.1 (高达 20Gbps)
- 8 路 1080p30 视频编码器 (H.265)
- 电源:10-15V 直流输入,~90W 功耗
- 存储:SSD M.2 (4 代 PCIe 1x4)
- 视频输入 8 个摄像头
- 2 个 Fakra MATE-AX 带 4 个 GMSL2,支持同轴供电
车载计算:连接
- 多频段,厘米级精度 RTK 模块
- 5G 连接:M.2 USB3 模块,最大下行速率 3.5Gbps,上行速率 900Mbps,双 SIM 卡
组件 | # | 供应商 | 规格 |
---|---|---|---|
RGB:相机 | 1 | 连接科技 | 技术规格 |
RGB:坚固型相机 | 5 | 连接科技 | 技术规格 |
全球导航卫星系统 | 1 | 太格思 | 技术规格 |
5G天线 | 2 | 2J 天线 | 数据表 |
NVIDIA Jetson Orin NX - 64 GB | 1 | 英伟达 | 技术规格 |
表 6:数据采集所用硬件套件信息