ADS-DV 2021 的 CAN 架构:7 个 API、8 ms 节流与两套 DBC

作者:

在

结论:2021 版 FS-AI ADS-DV 接口库把无人方程式赛车的 CAN 交互收敛成 7 个函数加两套 DBC:VCU 与 AI 之间的接口为 16 条报文、97 个信号,随车 PCAN-GPS 传感器定义为 23 条报文、67 个信号。真正的工程约束不在接收侧而在发送侧——内部定时器把帧重发周期限制在不小于约 8 ms,推荐每 10 ms 调用一次发送函数,调用过慢会触发整车 ECU 的 CAN 超时诊断。

7 个函数构成的调用契约

库对外只暴露 7 个函数以及配套的数据结构与枚举,方向划分得很干净:初始化一个、VCU 到 AI 一个、AI 到 VCU 一个、IMU 与 GPS 各一个、CAN 统计读写两个。

函数 方向 调用约束
fs-ai_api_init(接口名, debug, simulate) 初始化 debug 非 0 时向 stdout 输出调试信息,否则静默;simulate 非 0 时载入仿真值
fs_ai_api_vcu2ai_get_data() VCU → AI 异步接收,每帧到达即缓冲,取到的总是最新值
fs_ai_api_ai2vcu_set_data() AI → VCU 须足够频繁以免触发 ECU 的 CAN 超时诊断;内部定时器限制重发周期不小于约 8 ms,每 10 ms 调用最优
fs_ai_api_imu_get_data() PCAN-GPS → AI 异步接收,逐帧缓冲
fs_ai_api_gps_get_data() PCAN-GPS → AI 异步接收,逐帧缓冲
fs_ai_api_get_can_stats() 库内部 用于调试 CAN 接收状况
fs_ai_api_clear_can_stats() 库内部 清空统计结构

这里有一个容易被误用的点:simulate 参数载入的仿真数据并不代表车辆运行行为,它只是每次调用 fs_ai_api_vcu2ai_get_data() 时变化一次。它适合验证链路是否连通,不能用于任何算法或控制逻辑的验证。

两套 DBC 与节点划分

节点划分可以从两套 DBC 的分工直接读出来:VCU 与 AI 之间是双向控制接口,PCAN-GPS 是单向传感器源,CAN 统计则是库内的调试支路,不占整车网络节点。

DBC 文件 报文数 信号数 节点角色
ADSDV_2021_VCU_AI_interface_v2.dbc 16 97 VCU ↔ AI,双向:遥测下行、控制上行
PCAN-GPS for ADS-DV.dbc 23 67 PCAN-GPS → AI,单向:IMU 与 GPS 传感数据

值得注意的是报文数与信号量的不对称:传感器侧的报文更多(23 对 16)而信号更少(67 对 97)。这与两类接口的形态一致——VCU 接口把状态与控制量打包进少量高密度报文,GPS/IMU 则按物理量分成多条短报文。库只暴露 2021 赛季 DDT 比赛所必需的那部分接口,完整规范在 ADS-DV_Software_Interface_Specification_v4.0.pdf 中,该文件同时发布在 IMechE 网站上。

2021 相对 2019 的变化

这次发布把交付形态从二进制改成了源码,功能上也补上了新赛季新增的执行器能力。

维度 2019 2021
交付形态 静态库 libfs-ai_api_amd64.a,供静态链接 MIT 源码,可为任意 Linux 架构编译并按需修改
制动能力 未包含调制液压制动 更新的 CAN 接口支持调制液压制动
向后兼容 — 接口向后兼容 2019 车辆
示例程序 — Console 与 Tester 示例程序得到改进
版本状态 — release candidate,供车队参考实现车辆接口代码

对车队来说最有价值的一条是向后兼容:同一份 2021 接口代码可以跑在 2019 车辆上,这意味着制动等执行器能力的差异被吸收在接口层,而不是让每支车队各自维护分支。

构建、运行与证据边界

构建路径很直接:进入 FS-AI_API_Tester 或 FS-AI_API_Console 目录执行 make,库会按需自动构建或重建;随后以接口名为参数运行,虚拟总线用 vcan0,实车接口用 can0。仓库内的 setup.sh 给出 Linux 下配置 CAN 接口与创建 can0、vcan0 的具体命令。

证据边界需要如实标注:素材为固定快照(提交 33bcb61d2519ee1ac4935396d9bf465c6ebc81c1),两份 DBC 均按 Git blob 原样保留;PCAN-GPS 文件可能包含第三方传感器厂商的定义,其独立数据权利并未被确认,再分发前应复核该部分信号来源。仓库为 MIT 许可,许可文件与 README 一并保留。最重要的是,这些文件描述的是赛事用无人方程式车辆,不是量产道路车。

常见问题

2021 版接口相对 2019 版改了什么?

交付形态从静态库 libfs-ai_api_amd64.a 改为 MIT 源码,可为任意 Linux 架构编译并按需要修改;CAN 接口更新以支持新增的调制液压制动能力,同时保持对 2019 车辆的向后兼容;Console 与 Tester 两个示例程序也得到改进。该版本被标注为 release candidate,供车队参考实现车辆接口代码。

发送函数应该多久调用一次?

推荐每 10 ms 调用一次 fs_ai_api_ai2vcu_set_data()。调用必须足够频繁,否则会触发整车 ECU 的 CAN 超时诊断;但过于频繁又会占用总线,因此库内置定时器禁止以小于约 8 ms 的周期重发帧。每 10 ms 调用可以在两者之间取得最优平衡,数据更新会以尽可能快的速度下发到车辆。

simulate 模式的数据可以用来验证算法吗?

不能。文档明确说明仿真数据不代表车辆运行行为,它只是每次调用 fs_ai_api_vcu2ai_get_data() 时变化一次。它适用于确认链路连通与数据结构正确,任何算法或控制逻辑的验证都必须使用真实车辆数据。

这两套 DBC 能直接用到量产车上吗?

不能。它们描述的是 IMechE FS-AI ADS-DV 赛事用无人方程式车辆的 VCU 与 AI 接口以及随车 PCAN-GPS 传感器定义,不是量产道路车的网络定义。此外 PCAN-GPS 文件可能包含第三方传感器厂商定义,其数据权利未独立确认,再分发前应复核来源并保留 MIT 归属。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/fs-ai-ads-dv-2021/README.md(7 个函数的调用契约、8 ms 节流与 10 ms 建议、构建运行方式与规范文档出处)
  • 项目 01 —— public-can-dbc-datasets/additional/fs-ai-ads-dv-2021/SOURCE.md(两套 DBC 的报文与信号数、快照提交、权利与证据边界)

免责声明

本文所述内容来自公开开源仓库的说明文件与数据库文件,描述对象为赛事用无人方程式车辆,不代表任何量产道路车的网络定义,也未经实车验证。两份 DBC 均按固定快照原样保留,其中 PCAN-GPS 部分可能包含第三方传感器厂商定义,其独立数据权利并未被确认,再分发前应复核来源并保留 MIT 许可与归属。涉及车辆控制与执行器的改动请在封闭场地、专业人员监督下并遵守赛事规则进行。

更新记录

  • 2026-10-14 初稿

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注