deanlee/openpilot-cabana
GitHub: deanlee/openpilot-cabana
一款开源的CAN总线数据可视化与分析工具,支持多源数据捕获、DBC文件编辑解码和信号图形化展示。
Stars: 15 | Forks: 2

## 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, 云资产清单, 信号绘图, 数据记录, 数据重放, 桌面应用, 汽车安全, 汽车诊断, 汽车黑客, 端口探测, 自动驾驶, 车载网络, 逆向工具, 逆向工程