菜单

开发工具

相关源文件

本文档概述了 openpilot 仓库中可用的开发和调试工具。这些工具对于使用 openpilot 的开发人员至关重要,它们能够进行日志分析、CAN 总线调试、数据可视化和仿真。有关从源代码构建 openpilot 的信息,请参阅 构建系统,有关测试方法,请参阅 测试框架

工具概述

openpilot 中的主要开发工具包括:

  • Replay:重放记录的驾驶会话,用于测试和开发
  • Cabana:分析 CAN 消息,具有可视化和 DBC 编辑功能
  • PlotJuggler:可视化日志和实时流的时间序列数据
  • LogReader:提供对日志文件的编程访问

这些工具在 openpilot 开发生态系统中的位置如下:

来源:tools/replay/README.md tools/cabana/mainwin.cc tools/plotjuggler/README.md tools/lib/logreader.py

回放系统

Replay 系统通过回放记录的消息来模拟驾驶会话,这些消息的记录方式与原始记录完全一致。这使得开发和测试无需实际驾驶汽车。

架构

来源:tools/replay/replay.h tools/replay/replay.cc tools/replay/seg_mgr.h tools/replay/main.cc

主要功能

  • 路线回放:回放 Comma 服务器或本地存储的任意路线
  • 回放控制:暂停、恢复和调整回放速度(0.2 倍到 3 倍)
  • 时间导航:跳转到特定时间点或事件(接管、警报)
  • 多摄像头支持:查看道路、驾驶员和广角摄像头
  • 消息发布:通过 MSGQ 或 ZMQ 发布消息以进行系统集成
  • 分段缓存:缓存数据以实现更流畅的回放

用途

控制台界面在回放时提供了额外的控制

  • 空格键:暂停/恢复
  • S/Shift+S:向前/向后跳过 10 秒
  • M/Shift+M:向前/向后跳过 60 秒
  • E/D:跳转到下一个接管/取消接管
  • +/-:调整回放速度

来源:tools/replay/README.md tools/replay/main.cc tools/replay/consoleui.cc

Cabana

Cabana 是一款强大的 CAN 总线分析器,允许开发人员检查、解码和可视化 CAN 消息。它对于添加对新车辆的支持和调试车辆集成问题特别有用。

架构

来源:tools/cabana/mainwin.h tools/cabana/mainwin.cc tools/cabana/cabana.cc tools/cabana/streams/replaystream.h

UI 组件

Cabana 的界面包含多个面板:

  1. 消息面板:列出所有 CAN 消息及其 ID、频率和计数
  2. 二进制视图:显示所选消息的原始字节,并进行位级检查
  3. 信号视图:显示当前 DBC 文件中的解码信号
  4. 图表面板:绘制信号随时间变化的图表
  5. 视频面板:显示同步的摄像头录像(如果可用)

主要功能

  • 多源支持:连接到回放日志、实时车辆或 SocketCAN 设备
  • DBC 管理:加载、编辑、创建和保存 DBC 文件
  • 信号定义:使用可视化工具创建和修改信号定义
  • 时间序列绘图:可视化信号随时间的变化
  • 视频同步:在 CAN 数据旁边查看同步的视频
  • 信号分析工具:查找相似的位模式并识别信号
  • CSV 导出:导出数据以供外部分析

用途

来源:tools/cabana/cabana.cc tools/cabana/SConscript

PlotJuggler

PlotJuggler 是一个可视化工具,允许开发人员绘制 openpilot 日志中的时间序列数据。它对于分析和比较信号随时间的变化特别有用,有助于模型调优和系统性能分析。

架构

来源:tools/plotjuggler/juggle.py tools/plotjuggler/README.md

主要功能

  • 时间序列可视化:绘制 openpilot 日志中的信号
  • 布局模板:用于常见分析任务的预配置布局
  • 实时流:连接到正在运行的 openpilot 实例或回放
  • 信号比较:在同一图上比较多个信号
  • CAN 数据支持:解析和绘制 CAN 数据,支持自动 DBC 选择
  • 可定制视图:为特定的分析需求创建自定义布局

用途

来源:tools/plotjuggler/juggle.py tools/plotjuggler/README.md

LogReader

LogReader 是一个用于读取和处理 openpilot 日志文件的实用程序库。它提供了一个编程接口,用于访问日志数据并提取特定消息。

架构

来源:tools/lib/logreader.py tools/lib/tests/test_logreader.py

主要功能

  • 多源支持:从各种来源读取日志(本地、Comma API、OpenpilotCI)
  • 格式处理:支持不同的日志格式(rlog、qlog)和压缩(bz2、zst)
  • 消息过滤:提取特定消息类型
  • 并行处理:并行处理分段以提高性能
  • 时间序列转换:将日志数据转换为时间序列格式以进行绘图
  • 自动源选择:自动尝试不同的源,直到找到有效的源

用途

来源:tools/lib/logreader.py tools/lib/README.md

集成与工作流程

这些工具已集成到全面的开发工作流程中。

来源:README.md tools/replay/README.md tools/plotjuggler/README.md

构建和编译

这些工具使用 SCons 构建系统进行构建。它们的配置方式如下:

Replay

replay 工具是从 tools/replay 目录中的源文件构建的

replay_lib_src = ["replay.cc", "consoleui.cc", "camera.cc", "filereader.cc", 
                   "logreader.cc", "framereader.cc", "route.cc", "util.cc", 
                   "seg_mgr.cc", "timeline.cc", "api.cc"]

它依赖于以下库:

  • libavutil, libavcodec, libavformat(视频解码)
  • libbz2, libzstd(压缩)
  • libcurl(网络访问)
  • libyuv(图像处理)
  • ncurses(控制台 UI)

来源:tools/replay/SConscript

Cabana

Cabana 使用 Qt 构建,并依赖于:

  • Qt5 库(Widgets、Core、Network 等)
  • OpenCL 用于 GPU 加速
  • openpilot 生态系统中的各种库

构建会创建一个 cabana_lib 和 cabana 二进制文件,其中包含特定于不同平台(macOS vs Linux)的组件。

cabana_lib = cabana_env.Library("cabana_lib", [
    'mainwin.cc', 'streams/socketcanstream.cc', 'streams/pandastream.cc',
    'streams/devicestream.cc', 'streams/livestream.cc', 'streams/abstractstream.cc', 
    'streams/replaystream.cc', 'binaryview.cc', 'historylog.cc', 'videowidget.cc', 
    'signalview.cc', 'streams/routes.cc', 'dbc/dbc.cc', 'dbc/dbcfile.cc', 
    'dbc/dbcmanager.cc', 'utils/export.cc', 'utils/util.cc',
    'chart/chartswidget.cc', 'chart/chart.cc', 'chart/signalselector.cc', 
    'chart/tiplabel.cc', 'chart/sparkline.cc', 'commands.cc', 'messageswidget.cc', 
    'streamselector.cc', 'settings.cc', 'detailwidget.cc', 'tools/findsimilarbits.cc', 
    'tools/findsignal.cc'
])

来源:tools/cabana/SConscript

PlotJuggler

PlotJuggler 是一个独立的二进制文件,由 juggle.py 脚本下载和安装。该脚本负责下载适用于相应平台的二进制文件(Linux x86_64、Linux aarch64、macOS arm64 或 macOS x86_64)。

来源:tools/plotjuggler/juggle.py

结论

openpilot 中的开发工具提供了一个全面的套件,用于分析、调试和改进系统。无论您是为新车辆添加支持、调查错误还是调整参数,这些工具都能提供有效处理 openpilot 复杂系统所需的功能。