openpilot 是一个开源驾驶辅助系统,旨在为支持的车辆提供高级驾驶自动化功能。本文档提供了系统架构、关键组件及其交互的技术概述。
openpilot 构建为一系列相互作用的进程,负责处理驾驶任务的各个方面,从传感器数据处理到车辆控制。该系统设计运行在专用硬件(如 comma three)上,并通过标准化的通信协议与车辆系统进行接口。
有关支持的车辆信息,请参阅 支持的车辆。
下图说明了 openpilot 的高层架构,展示了主要组件及其交互。
来源: selfdrive/controls/controlsd.py, selfdrive/test/process_replay/process_replay.py, selfdrive/car/card.py
openpilot 的功能分布在多个进程中,这些进程通过发布/订阅消息系统进行通信。系统采用模块化设计,每个进程都有特定的职责。
来源: selfdrive/controls/controlsd.py, selfdrive/test/process_replay/process_replay.py, selfdrive/car/card.py
openpilot 使用发布/订阅消息系统进行进程间通信。每个进程都可以发布消息到特定主题,并订阅以接收来自其他主题的消息。
关键消息主题包括:
modelV2:神经网络视觉输出carState:当前车辆状态carControl:对车辆的控制指令liveCalibration:相机校准参数livePose:车辆位置和姿态longitudinalPlan:速度控制规划selfdriveState:openpilot 系统的核心状态来源: selfdrive/controls/controlsd.py:37-42
汽车接口系统提供了一个抽象层,允许 openpilot 与不同的汽车品牌和型号协同工作。它将 openpilot 的通用命令转换为车辆特定的 CAN 消息。
该系统处理
来源: selfdrive/car/card.py, selfdrive/test/process_replay/process_replay.py:101-102, selfdrive/car/tests/test_car_interfaces.py
视觉系统处理摄像头输入,以了解道路环境。
来源: selfdrive/test/process_replay/process_replay.py:583-591
规划和控制组件决定车辆应前往何处以及如何到达。
来源: selfdrive/controls/controlsd.py:28-58, selfdrive/test/process_replay/process_replay.py:510-516
定位系统确定车辆的位置和姿态。
来源: selfdrive/controls/controlsd.py:46-48, selfdrive/test/process_replay/process_replay.py:538-542
下表列出了关键进程及其在系统中的作用。
| 进程 | 主要作用 | 关键输入 | 关键输出 |
|---|---|---|---|
| selfdrived | 主控制器 | modelV2, carState, driverMonitoringState | selfdriveState |
| controlsd | 车辆控制 | selfdriveState, carState, longitudinalPlan, modelV2 | carControl |
| modeld | 视觉处理 | roadCameraState, wideRoadCameraState | modelV2 |
| plannerd | 路径规划 | modelV2, carState, liveParameters | longitudinalPlan, driverAssistance |
| locationd | 定位 | cameraOdometry, IMU, GPS | livePose |
| dmonitoringd | 驾驶员监控 | driverCameraState | driverMonitoringState |
| paramsd | 参数学习 | livePose, carState | liveParameters |
| calibrationd | 相机标定 | cameraOdometry | liveCalibration |
| card | 汽车接口 | canMessages, carControl | carState, sendcan |
来源: selfdrive/test/process_replay/process_replay.py:460-590
当 openpilot 运行时,会持续循环执行以下序列:
来源: selfdrive/controls/controlsd.py:212-218
openpilot 支持 30 多个制造商的 300 多种车型。支持通过车辆特定的接口实现,这些接口处理与每辆车系统通信的细节。
车辆支持按以下方式分类:
有关支持的车辆的更多详细信息,请参阅 CARS.md
来源: docs/CARS.md
openpilot 包含强大的测试基础设施,以确保其可靠性。
来源: selfdrive/test/process_replay/test_processes.py, selfdrive/car/tests/test_car_interfaces.py, selfdrive/test/process_replay/process_replay.py
openpilot 可以在 Linux、macOS 或 Docker 容器中进行开发。该系统有几个依赖项:
对于 Ubuntu
对于 macOS
来源: tools/ubuntu_setup.sh, tools/mac_setup.sh, tools/install_ubuntu_dependencies.sh, tools/install_python_dependencies.sh, pyproject.toml
openpilot 有以下系统要求才能有效运行:
来源: pyproject.toml:2-4
openpilot 遵循语义版本控制方案。当前版本是 0.9.9。
每次发布都会改进驾驶模型、增加车辆支持并修复错误。发行说明提供了每个版本新增功能的详细信息。
来源: common/version.h:1, RELEASES.md