比亚迪 / Proton 的 openpilot 移植:指纹规模与功能替换边界

作者:

在

结论:bukapilot 是 openpilot 之上的维护型补丁集,目标是把 ADAS 带到马来西亚在售车型(尤其 Perodua 与 Proton),并在既有能力上补齐完整的右舵支持。落到 CAN 适配层,判断一个车型「算不算移植完成」要看两件事:DBC 字典有没有映射、指纹有没有登记。按这个口径,BYD ATTO 3 有 2 组指纹(144 与 110 个地址),Proton X50 有 1 组(179 个地址),而 Proton S70 与 X90 只有 DBC 映射、没有指纹,属于未完成的端口条目。

车型移植的两张表:DBC 映射与指纹

移植数据集中在两个 values.py 里:一份按品牌给出 CAR 常量、DBC 字典与指纹字典,另一份给出 HUD 倍率。DBC 字典走 openpilot 的 dbc_dict 形式,第二项为 None,即未登记雷达侧 DBC。HUD 倍率直接影响仪表与抬头显示上的速度呈现,BYD 侧为 0.718,Proton 侧为 1.035 且在源码里留着「Todo」标记,说明它仍是待标定的值。

品牌 车型常量 DBC 字典 指纹组数 HUD 倍率
BYD ATTO3 = "BYD ATTO 3" byd_general_pt(雷达侧 None) 2 0.718
Proton S70 = "PROTON S70" proton_general_pt(雷达侧 None) 0 1.035(Todo)
Proton X50 = "PROTON X50" proton_general_pt(雷达侧 None) 1 1.035(Todo)
Proton X90 = "PROTON X90" proton_general_pt(雷达侧 None) 0 1.035(Todo)

指纹规模与非 8 字节 DLC

指纹记录的是「地址到长度」的映射,是车型识别的第一道判据。三组的规模差异很大,而真正有价值的信号藏在那些长度不等于 8 的地址里。

指纹 地址数 长度非 8 的地址 地址范围
ATTO 3 指纹一 144 204:20、287:5、385:3、682:2、1542:2、1798:3 85 – 2027
ATTO 3 指纹二 110 287:5、385:3、682:2、1542:2、1798:3 85 – 1832
Proton X50 指纹 179 385:3、1542:2、1798:3 32 – 2025

把三组放在一起比对,能读出三条结论。其一,ATTO 3 的两组指纹共有 107 个地址,第一组独有 37 个、第二组独有 3 个,说明第二组几乎是第一组的子集,多数组差异来自配置或年款导致的报文增减。其二,三组指纹共有 17 个地址,其中 385(长度 3)、1542(长度 2)、1798(长度 3)长度都不是 8,这类跨品牌稳定的短帧通常是通用或诊断相关报文,不应作为车型特征。其三,X50 的 179 个地址里有 159 个不在 ATTO 3 两组指纹的并集(147 个地址)之内,两个品牌的报文空间基本不重叠,因此 DBC 也必须分成 byd_general_pt 与 proton_general_pt 两套。

另有一个需要单独确认的点:ATTO 3 第一组指纹里出现 204:20,长度 20 超出经典 CAN 的 8 字节上限。它可能来自 CAN FD 采集,也可能来自采集工具的合并口径,在把它写进匹配规则之前必须先确认采集链路。

功能替换边界:哪些被替换,哪些叠加

移植不只是接上 CAN,还要说清接管了哪些原厂功能。README 把这件事分成「所有受支持车型」与「特定受支持车型」两层,处理逻辑完全不同。

功能 所有受支持车型 特定受支持车型
LKA 原厂 LKA 被替换,仅在用户启用后生效 同上
LDW 原厂 LDW 被替换 同上
ACC 不替换 原厂 ACC 被替换
FCW 不声明 在原厂 FCW 之外叠加运行
AEB、自动远光、盲区警示、侧向碰撞警示 原厂功能一律保留 原厂功能一律保留

这套划分的工程含义是:横向控制(LKA/LDW)是移植的必选项,纵向控制(ACC)只在完成标定的车型上接管,前向碰撞预警采取「叠加而非替换」以保留原厂兜底,其余主动安全功能不动。开发车端口时,也应按同样的层次逐项确认,而不是一次性接管全部。

数据上传与责任边界

默认情况下驾驶数据会上传到项目方服务器。日志范围按项列出,可退出性并不一致,做合规评估时要逐项核对。

数据项 默认状态 可否关闭
路面相机、CAN、GPS、IMU、磁力计、热传感器、崩溃与操作系统日志 记录并上传 仅在设置中显式退出驾驶员相机一项,其余未说明可关闭
驾驶员朝向相机 默认记录 可在设置中显式 opt-out
麦克风 不录制 不适用
数据使用权 授予项目方不可撤销、永久、全球范围的使用权 使用即视为同意

责任侧同样写得很硬:软件以 MIT 许可发布(部分组件按各自许可),但被明确定性为 alpha 质量的 research-only 软件,不是产品;使用者须自行遵守当地法律法规,无明示或默示担保,并须就使用该软件产生的一切索赔向项目方作出赔偿与免责。性能限制也被逐条列出:恶劣能见度、相机被遮挡或损坏、车身贴膜贴纸或橡胶涂层造成的遮挡、设备安装不当、急弯与匝道路口的转向扭矩上限、受限车道与施工区、大横坡或强侧风、极热极冷、强光直射、坡道窄路与蜿蜒道路。它不会自动驾驶,也不减轻驾驶者必须付出的注意力;变道时它无法查看盲区,确认安全后由人工轻推方向盘发起。

常见问题

bukapilot 与 openpilot 是什么关系?

bukapilot 是 openpilot 的维护型补丁集,目标是支持马来西亚在售车型(尤其 Perodua 与 Proton),使用为这些车型专门设计的硬件,并在 openpilot 既有能力之上补齐完整的右舵支持。它实现 ACC、LKA、FCW、LDW,并在启用时叠加基于相机的驾驶员监测;作为 openpilot 的补丁集,它也继承了 openpilot 的软件安全模型,并针对补丁部分逐步补充增量测试。

为什么 Proton S70 与 X90 不能算已适配?

因为它们在 values.py 里只有 DBC 映射(proton_general_pt)而没有指纹条目。指纹是车型识别的第一道判据,缺失意味着无法在实车上完成确定的车型匹配;同为 Proton 的 X50 则有 1 组含 179 个地址的指纹。此外 Proton 侧的 HUD 倍率 1.035 在源码里仍带 Todo 标记,属于待标定值。

指纹里的 204:20 该怎么理解?

它表示地址 204 的帧长度为 20 字节,超出经典 CAN 的 8 字节上限,可能来自 CAN FD 采集或采集工具的合并口径。在把它写进车型匹配规则之前必须先确认采集链路与总线类型,否则会在不支持该长度的接口上造成误匹配。

默认会上传哪些数据,能不能关掉?

默认上传驾驶数据,日志包括路面朝向相机、CAN、GPS、IMU、磁力计、热传感器、崩溃与操作系统日志;驾驶员朝向相机默认记录但可在设置中显式退出;麦克风不录制。使用即视为授予项目方不可撤销、永久、全球范围的数据使用权,除驾驶员相机外其余项的关闭方式在文档中未作说明。

bukapilot 会接管原厂 AEB 和盲区警示吗?

不会。文档要求保留车辆其他全部原厂功能,明确列举的包括 FCW、自动紧急制动(AEB)、自动远光、盲区警示与侧向碰撞警示。被替换的是原厂 LKA 与 LDW;在受支持的特定车型上,原厂 ACC 被替换,而 bukapilot 的 FCW 是在原厂 FCW 之外叠加运行,不是替换。

延伸阅读

参考资料

  • 项目 01 —— public-can-dbc-datasets/additional/alienware-sa-bukapilot-byd-proton/README.md(项目定位、功能替换层次、限制清单、数据上传与许可责任条款)
  • 项目 01 —— public-can-dbc-datasets/additional/alienware-sa-bukapilot-byd-proton/selfdrive/car/byd/values.py(ATTO 3 的 DBC 映射、HUD 倍率与两组指纹)
  • 项目 01 —— public-can-dbc-datasets/additional/alienware-sa-bukapilot-byd-proton/selfdrive/car/proton/values.py(S70/X50/X90 的 DBC 映射、HUD 倍率与 X50 指纹)

免责声明

本文所述内容为公开开源项目的移植数据与文档摘录,不代表车辆制造商或项目方的官方承诺。素材自身已声明:该软件为 alpha 质量的 research-only 版本,不是产品,无明示或默示担保,使用者须自行遵守当地法律法规并承担相应责任;它不会自动驾驶,也不减轻驾驶者必须付出的注意力。文中指纹地址与长度均按公开文件统计,未经实车复现,不同年款、市场与配置可能存在差异,涉及行车安全的改装请务必在封闭场地与专业监督下进行。

更新记录

  • 2026-10-14 初稿

评论

发表回复

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