菜单

概述

相关源文件

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 消息。

该系统处理

  • 车辆指纹识别,用于识别品牌和型号
  • 通用命令和车辆特定协议之间的转换
  • 从 CAN 消息读取车辆状态
  • 管理每个车辆平台特定的安全限制

来源: selfdrive/car/card.py, selfdrive/test/process_replay/process_replay.py:101-102, selfdrive/car/tests/test_car_interfaces.py

视觉与感知

视觉系统处理摄像头输入,以了解道路环境。

  1. modeld:运行神经网络以进行车道检测、路径预测和物体检测。
  2. calibrationd:维护摄像机校准,以实现像素与真实世界坐标之间的准确映射。
  3. dmonitoringd:监控驾驶员的面部,以检测其注意力。

来源: selfdrive/test/process_replay/process_replay.py:583-591

规划与控制

规划和控制组件决定车辆应前往何处以及如何到达。

  1. plannerd:根据视觉模型输出生成驾驶规划,包括横向(转向)和纵向(速度)轨迹。
  2. controlsd:将规划转化为车辆的具体控制指令,通过 PID 控制器或模型预测控制处理横向和纵向控制。
  3. paramsd:学习车辆特定参数,如侧倾、转向比和转向扭矩,以提高控制精度。

来源: selfdrive/controls/controlsd.py:28-58, selfdrive/test/process_replay/process_replay.py:510-516

定位

定位系统确定车辆的位置和姿态。

  1. locationd:融合来自 GPS、IMU 和基于摄像机的视觉里程计的数据以估计车辆姿态。
  2. calibrationd:提供相机校准数据,用于精确的视觉里程计。
  3. paramsd:学习影响定位的车辆参数。

来源: selfdrive/controls/controlsd.py:46-48, selfdrive/test/process_replay/process_replay.py:538-542

进程交互

下表列出了关键进程及其在系统中的作用。

进程主要作用关键输入关键输出
selfdrived主控制器modelV2, carState, driverMonitoringStateselfdriveState
controlsd车辆控制selfdriveState, carState, longitudinalPlan, modelV2carControl
modeld视觉处理roadCameraState, wideRoadCameraStatemodelV2
plannerd路径规划modelV2, carState, liveParameterslongitudinalPlan, driverAssistance
locationd定位cameraOdometry, IMU, GPSlivePose
dmonitoringd驾驶员监控driverCameraStatedriverMonitoringState
paramsd参数学习livePose, carStateliveParameters
calibrationd相机标定cameraOdometryliveCalibration
card汽车接口canMessages, carControlcarState, sendcan

来源: selfdrive/test/process_replay/process_replay.py:460-590

系统运行流程

当 openpilot 运行时,会持续循环执行以下序列:

  1. 收集摄像头帧和车辆 CAN 数据。
  2. 视觉模型处理摄像头帧,检测车道线、路缘和其他车辆。
  3. 驾驶员监控系统检查驾驶员是否专注。
  4. 规划系统生成期望的路径和速度剖面。
  5. 控制系统计算转向和加速指令以跟随规划的路径。
  6. 通过汽车接口将指令发送到车辆。
  7. 该过程以大约 100Hz 的频率(控制)和 20Hz 的频率(视觉处理)重复。

来源: selfdrive/controls/controlsd.py:212-218

车辆支持

openpilot 支持 30 多个制造商的 300 多种车型。支持通过车辆特定的接口实现,这些接口处理与每辆车系统通信的细节。

车辆支持按以下方式分类:

  • 品牌/型号/年份
  • 支持的功能(横向控制、纵向控制、从停止状态恢复)
  • 所需硬件

有关支持的车辆的更多详细信息,请参阅 CARS.md

来源: docs/CARS.md

开发和测试基础设施

openpilot 包含强大的测试基础设施,以确保其可靠性。

  1. 进程回放:通过输入记录数据来测试单个进程,并验证其输出。
  2. 汽车模型测试:验证汽车接口实现是否对所有支持的车辆都能正常工作。
  3. 回归测试:确保新更改不会破坏现有功能。

来源: 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

  • 开发工具(C/C++ 编译器、Python 开发头文件)
  • 用于网络、图形和硬件通信的库。
  • 用于各种计算任务的 Python 依赖项。

对于 macOS

  • 用于开发和库的 Homebrew 包。
  • Python 依赖项与 Ubuntu 类似。

来源: tools/ubuntu_setup.sh, tools/mac_setup.sh, tools/install_ubuntu_dependencies.sh, tools/install_python_dependencies.sh, pyproject.toml

系统要求

openpilot 有以下系统要求才能有效运行:

  • Python 3.11 或更高版本(但低于 3.13)
  • 支持 CUDA 的 GPU 用于神经网络处理(用于开发)。
  • 用于更新和云功能的连接。
  • 足够的存储空间用于日志记录。

来源: pyproject.toml:2-4

版本控制

openpilot 遵循语义版本控制方案。当前版本是 0.9.9。

每次发布都会改进驾驶模型、增加车辆支持并修复错误。发行说明提供了每个版本新增功能的详细信息。

来源: common/version.h:1, RELEASES.md