deanlee/openpilot-cabana

GitHub: deanlee/openpilot-cabana

一款开源的CAN总线数据可视化与分析工具,支持多源数据捕获、DBC文件编辑解码和信号图形化展示。

Stars: 15 | Forks: 2

![截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7c029fd3c8063243.png) ## Cabana: CAN 总线可视化与分析工具 Cabana 是一个基于 Qt 的图形化工具,用于查看、分析和逆向工程原始 CAN 总线数据。它支持创建和编辑 DBC (Database CAN) 文件,随时间绘制信号图,以及可选的同步视频回放。 Cabana 最初由仓库作者为 [openpilot](https://github.com/commaai/openpilot) 开发,现在作为一个独立的、通用的 CAN 分析工具进行维护。 它支持多种 CAN 数据源,包括: | 数据源 | 描述 | | :--- | :--- | | **Openpilot route** | 回放记录的 openpilot 驾驶数据(本地或通过 comma connect) | | **Vector ASC log** | 来自 CANalyzer、CANoe 或任何兼容记录器的 `.asc` 文件 | | **candump log** | 使用 `candump -l` (SocketCAN) 记录的 `.log` 文件 | | **PEAK TRC log** | 来自 PEAK PCAN-View / PCAN-Explorer 的 `.trc` 文件(v1.x 和 v2.x) | | **SocketCAN** | 从 SocketCAN 接口(例如 `can0`)实时捕获 | | **comma.ai Panda** | 从 USB 连接的 Panda 设备实时捕获 | | **ZMQ / Msgq** | 通过网络从 comma 设备实时流式传输 | 不需要安装 openpilot。Cabana 适用于汽车诊断、CAN 逆向工程、研究以及任何涉及 CAN 网络的项目。 ## 前置条件 在运行或编译 **openpilot-cabana** 之前,请安装这些依赖项。 ### Ubuntu / Debian ``` sudo apt update sudo apt install -y g++ clang capnproto libcurl4-openssl-dev libzmq3-dev libssl-dev libbz2-dev libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libavdevice-dev libavfilter-dev libffi-dev libgles2-mesa-dev libglfw3-dev libglib2.0-0 libjpeg-dev libncurses5-dev libusb-1.0-0-dev libzstd-dev libcapnp-dev libx11-dev libxcb1-dev libxcb-xinerama0-dev libxcb-cursor-dev opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev qt6-base-dev qt6-tools-dev qt6-tools-dev-tools libqt6charts6-dev libqt6svg6-dev libqt6serialbus6-dev libqt6opengl6-dev ``` ## 克隆, 编译 ### 克隆仓库 ``` git clone https://github.com/deanlee/openpilot-cabana.git cd openpilot-cabana git submodule update --init --recursive ``` ### 安装 Python 包 ``` python3 -m pip install --upgrade pip python -m pip install --no-cache-dir scons numpy "cython>=3.0" setuptools pycapnp ``` ### 构建 ``` scons ``` ## 下载预编译二进制文件 你也可以从 [Releases](https://github.com/deanlee/openpilot-cabana/releases) 页面下载预编译的二进制文件: ``` # 设为可执行文件 chmod +x cabana-linux-x86_64 # 运行 demo route ./cabana-linux-x86_64 --demo ``` ## 使用说明 ``` $ ./cabana -h Usage: ./cabana [options] route Options: -h, --help Displays help on commandline options. --help-all Displays help including Qt specific options. --demo use a demo route instead of providing your own --auto Auto load the route from the best available source (no video): internal, openpilotci, comma_api, car_segments, testing_closet --qcam load qcamera --ecam load wide road camera --msgq read can messages from msgq --panda read can messages from panda --panda-serial read can messages from panda with given serial --socketcan read can messages from given SocketCAN device --zmq read can messages from zmq at the specified ip-address messages --data_dir local directory with routes --no-vipc do not output video --dbc dbc file to open Arguments: route the drive to replay. find your drives at connect.comma.ai ``` ## 示例 ### 在演示模式下运行 Cabana 要使用内置的演示路线运行 Cabana,请使用以下命令: ``` cabana --demo ``` ### 加载特定路线 要加载特定路线进行回放,请将路线作为参数提供: ``` cabana "a2a0ccea32023010|2023-07-27--13-01-19" ``` 将 "0ccea32023010|2023-07-27--13-01-19" 替换为你想要的路由标识符。 ### 使用多个摄像头运行 Cabana 要使用多个摄像头运行 Cabana,请使用以下命令: ``` cabana "a2a0ccea32023010|2023-07-27--13-01-19" --dcam --ecam ``` ### 从 comma 设备流式传输 CAN 报文 [通过 SSH 连接到你的设备](https://github.com/commaai/openpilot/wiki/SSH) 并使用以下命令启动桥接: ``` cd /data/openpilot/cereal/messaging/ ./bridge & ``` 然后使用设备的 IP 地址运行 Cabana: ``` cabana --zmq ``` 将 <ipaddress> 替换为你 comma 设备的 IP 地址。 从设备流式传输时,Cabana 会将 CAN 报文记录到本地目录。默认情况下,此目录是 ~/cabana_live_stream/。你可以在 Cabana 中通过菜单 -> 工具 -> 设置来更改日志目录。 与设备断开连接后,你可以从流选择器对话框 -> 浏览本地路线重放记录的 CAN 报文。 ### 从 Panda 流式传输 CAN 报文 要从连接的 Panda 读取 CAN 报文,请使用以下命令: ``` cabana --panda ``` ### 打开 Vector ASC 日志文件 Cabana 可以打开以 Vector ASC 格式记录的 CAN 日志(由 CANalyzer、CANoe、PEAK 和许多其他工具生成)。 启动 Cabana 而不带参数,并在流选择器中选择 **ASC Log** 选项卡,或者打开多个文件以自动拼接拆分的日志: ``` cabana ``` 分段记录(记录器在每个文件边界重新开始时间戳)会被无缝拼接成一个连续的时间线。 ### 打开 candump 日志文件 Cabana 支持使用 Linux `candump` 实用程序通过 `-l` (log) 标志捕获的日志: ``` # 在设备上记录 candump -l can0 # 生成:candump-2026-03-08_120000.log ``` 在流选择器中选择 **candump** 选项卡,并浏览一个或多个 `.log` 文件。多个文件会根据时间戳自动合并和排序——这在长时间捕获被分割成多个段时非常有用。 文件中每个唯一的 CAN 接口名称(例如 `can0`, `can1`)都会映射到单独的总线通道。 ### 打开 PEAK TRC 日志文件 Cabana 支持使用 PEAK 硬件工具(如 PCAN-View 和 PCAN-Explorer)记录的 CAN 日志。 支持两种格式版本: - **v1.x** — 时间戳是相对于日志开始的毫秒偏移量,单通道 - **v2.x** — 时间戳是 `hh:mm:ss.sss` 格式的挂钟时间,带有可选的每帧通道列 在流选择器中选择 **TRC** 选项卡,并浏览一个或多个 `.trc` 文件。多个文件会自动拼接,通道号(文件中基于 1)会映射到 Cabana 中基于 0 的总线索引。 ### 使用流选择器对话框 如果你在没有任何参数的情况下运行 Cabana,将会弹出一个流选择器对话框,允许你选择数据源。 ``` cabana ``` ## 二进制活动分析 Cabana 对每个字节执行实时统计分析,帮助你一眼识别数据模式。 | 颜色 | 模式 | 含义 | | :--- | :--- | :--- | | 🟩 **绿色** | **递增** | 当字节值稳定上升时检测到(例如,计数器)。 | | 🟥 **红色** | **递减** | 当字节值稳定下降时检测到。 | | 🟧 **橙色** | **翻转** | 识别在状态之间来回翻转的位(例如,标志位)。 | | 🟪 **紫色** | **杂乱** | 没有明显趋势的高熵数据(例如,CRC/加密)。 | | ⬜ **灰色** | **静态** | 表示数据当前处于非活动状态或最近未更改。 | ## 贡献者
标签:ASC日志, CAN总线, CAN总线分析, CAN总线可视化, Comma.ai, DBC文件编辑器, HEX编辑, Linux工具, openpilot, Panda设备, PEAK TRC, Qt6, SocketCAN, Veh, ZMQ, 云资产清单, 信号绘图, 数据记录, 数据重放, 桌面应用, 汽车安全, 汽车诊断, 汽车黑客, 端口探测, 自动驾驶, 车载网络, 逆向工具, 逆向工程