本页面提供了 openpilot 开发和测试流程的全面指南。内容涵盖了环境设置、构建流程、测试框架以及项目中使用的持续集成系统。有关开发所用特定工具的信息,请参阅开发工具。
设置 openpilot 开发环境需要根据您的操作系统安装特定的依赖项。
openpilot 支持在 Ubuntu 和 macOS 平台上进行开发,并提供相应的设置脚本。
适用于 Ubuntu (推荐 24.04 LTS)
此脚本安装了必需的软件包,包括
该脚本还配置了用于与 Panda 设备交互的 udev 规则。
来源:tools/install_ubuntu_dependencies.sh1-125
对于 macOS
此脚本通过 Homebrew 安装必要的依赖项并配置环境。
Python 依赖项使用 pyproject.toml 进行管理,并通过 uv 包管理器安装。
这将创建一个 Python 虚拟环境(.venv)并安装所有必需的包。
关键依赖项组包括
来源:pyproject.toml1-267 tools/install_python_dependencies.sh1-32
为了获得一致的开发环境,可以使用 Docker。
Docker 环境预装了所有必需的依赖项。
来源:Dockerfile.openpilot_base1-82 selfdrive/test/docker_build.sh1-27
openpilot 使用 SCons 作为其构建系统。要构建项目,请
构建系统会编译 C/C++ 组件并准备 Python 模块。
来源:.github/workflows/compile-openpilot/action.yaml1-22
openpilot 拥有一个涵盖单元测试、集成测试和系统测试的全面测试框架。
该项目采用了多种测试方法
测试主要使用 pytest 运行。
openpilot 利用 GitHub Actions 和 Jenkins 维护一个强大的 CI/CD 管道。
GitHub Actions 工作流在每次拉取请求和推送到 master 时运行,执行各种测试。
来源:.github/workflows/selfdrive_tests.yaml1-359
Jenkins 负责在真实硬件上进行特定于设备的测试。
来源:.github/workflows/selfdrive_tests.yaml32-307 Jenkinsfile154-276
进程回放是一种关键的测试方法,它通过回放录制的输入并将其输出与参考数据进行比较,来验证 openpilot 进程的行为。
流程
这种方法可确保不同版本之间的行为一致性,并有助于捕获回归。
模型回放是一种专门的进程回放类型,侧重于神经网络模型。
模型回放测试的关键方面
来源:selfdrive/test/process_replay/model_replay.py1-312
车辆模型测试验证了每个支持车辆的接口。
这些测试有助于与不断增长的支持车辆列表保持兼容性。
来源:.github/workflows/selfdrive_tests.yaml215-250
openpilot 使用专用脚本来构建发布版本。
发布构建过程
来源:release/build_release.sh1-103
发布通过自动化的 GitHub Actions 工作流进行管理。
GitHub Actions 工作流负责
来源:.github/workflows/release.yaml1-55 .github/workflows/prebuilt.yaml1-40
来源:.github/workflows/release.yaml8-54 release/build_release.sh14-100
openpilot 的开发和测试基础设施与多个专用工具集成。
进程/日志转储:用于查看实时或录制数据的工具
selfdrive/debug/dump.py:用于转储通信数据的实用程序模型检查:
selfdrive/modeld/get_model_metadata.py:从 ONNX 模型提取元数据selfdrive/modeld/models/README.md:关于神经网络架构的文档来源:selfdrive/debug/dump.py1-75 selfdrive/modeld/get_model_metadata.py1-38 selfdrive/modeld/models/README.md1-68
openpilot 利用 GitHub 的功能来管理开发工作流程。
该项目还维护专门的 GitHub 工具函数,用于报告测试结果和上传构建产物。
来源: .github/ISSUE_TEMPLATE/pc_bug_report.yml1-43 .github/workflows/stale.yaml1-30 tools/lib/github_utils.py1-115
模型更改需要使用模型回放系统进行仔细验证
关键验证方面包括
来源: selfdrive/test/process_replay/model_replay.py62-110 selfdrive/modeld/fill_model_msg.py1-201 selfdrive/modeld/parse_model_outputs.py1-116
来源: pyproject.toml137-166 .github/workflows/selfdrive_tests.yaml32-164 Jenkinsfile76-119