inomotech-foss/can-rosetta

GitHub: inomotech-foss/can-rosetta

通过将未知 CAN 总线数据与手机传感器、仪表盘视频和 OBD-II 诊断的平行语料进行关联,自动逆向识别车辆 CAN 信号含义并生成 DBC 文件的基础模型工具包。

Stars: 1 | Forks: 0

CAN-Rosetta

一个用于逆向工程车辆 CAN 总线的基础模型和工具包 — 通过将未知总线与已知的手机传感器和仪表盘视频的平行语料库进行关联 grounding 来实现。

License: Apache-2.0 status: alpha

现代车辆会在其 CAN 总线上广播数百种信号 —— 车速、RPM、 踏板位置、各车轮转速、电池温度 —— 但几乎没有任何 相关文档。通过标准化的 **OBD-II** 和 **UDS** 诊断协议可以读取少量信号;其余的则是 未记录的原始字节流,并且因品牌、型号和年款而异。 **CAN-Rosetta 负责解码该数据流。** 秘诀就在它的名字里。就像 罗塞塔石碑通过将埃及象形文字与已知的 希腊语文本配对来进行解码一样,我们通过在原始总线旁记录一个*已知含义信号的平行语料库*来解码 CAN: - 放置在支架上的手机记录 **GPS 速度/航向** 和 **IMU 加速度**, - 可选择**录制仪表盘视频**,以便我们 OCR 读取真实的仪表数值, - 外加我们可以通过 **OBD-II / UDS** 主动读取的每一个值。 然后,我们在原始总线中找出与这些已知 参考同步变化的字节。GPS 上的速度和 CAN 总线上的速度是*相同的物理量*;任何与 GPS 速度相关性 r≈1.0 的两个字节**就是**速度 信号,而线性回归会为你提供比例和偏移量。对每个 参考重复此操作,你就能重构车辆的信号数据库。 ## 系统 三个组件,共享一种[会话数据格式](docs/data-format.md): | 组件 | 位置 | 功能 | |-----------|-------|--------------| | [`edge/autopi`](edge/autopi) | 车辆内 (AutoPi) | **发现**可用信号(快速目录扫描 + 慢速暴力扫描)并**持续记录**每一个 CAN 帧 | | [`companion/ios`](companion/ios) | 驾驶员的 iPhone | 高频记录 **IMU + GPS** 并可选**录制仪表盘视频**,所有数据均带有 UTC 时间戳 | | [`server`](server) | 任何具备 CPU/GPU 的地方 | **对齐**时钟,**提取**位字段候选,根据参考信号**识别**信号,并训练**基础模型** | ``` AutoPi ──► can/frames.parquet + can/discovery.json ─┐ ├──► server ──► DBC + labels + model iPhone ──► phone/motion.jsonl + location + video ─┘ ``` 查看 [docs/architecture.md](docs/architecture.md) 了解全貌,以及 [docs/methodology.md](docs/methodology.md) 了解五阶段流水线及 识别背后的数学原理。 ## 如何发现信号 两个互补的层级(详情见[方法论](docs/methodology.md)): 1. **经典基线(目前已可用,完全无监督)。** 枚举每个 周期帧中每一个合理的位字段,与参考信号对齐, 并根据相关性 / 互信息 / 事件共现性进行排序。物理 先验条件(速度 ≥ 0,加速度 = d(速度)/dt,通过齿轮比关联 RPM↔速度) 用于消除歧义。输出:排序后的假设 → 一个 **DBC** 文件。 2. **基础模型(研究方向)。** 对大量*无标签*的多车辆 CAN 数据进行自监督预训练,以学习 汽车总线的潜在语法(周期、计数器、 校验和、多路复用)。基于对齐的手机/OBD/OCR 标签进行微调,教会它从信号的行为指纹中识别信号*类型* —— 这样一来,只需少得多的标签化驾驶数据,就能解码一辆全新的汽车。基线生成用于训练模型的标签; 而模型则缩小了基线运行所需的搜索空间。 ## 快速开始(server,基于合成数据) 本仓库提供了一个小型的合成示例会话,因此你无需任何硬件即可端到端地运行识别 流水线: ``` cd server pip install -e ".[dev]" canrosetta identify ../datasets/sample-session --out /tmp/out # → 打印排序后的 signal hypotheses 并写入 /tmp/out/annotations.json + 一个 .dbc pytest ``` edge 和 companion 应用在它们各自的 README 中有各自的构建/运行说明。 ## ⚠️ 安全与法律 本工具仅供**在你拥有或获得明确授权进行测试的车辆上**使用。发现过程严格**只读** —— 没有写入操作,没有执行器/例程控制,也没有安全访问或编程会话服务。即便如此,探测实时总线仍然存在风险。**在连接车辆之前,请阅读 [SAFETY.md](SAFETY.md)**,且切勿在驾驶时运行发现程序。 ## 贡献 欢迎提交 Issue 和 PR —— 请参见 [CONTRIBUTING.md](CONTRIBUTING.md)。这是一个 [inomotech-foss](https://github.com/inomotech-foss) 项目,基于 [Apache-2.0](LICENSE) 协议开源。
标签:CAN总线, 云资产清单, 信号识别, 基础模型, 时序数据库, 自动驾驶, 车联网, 边缘计算, 逆向工具, 逆向工程