最近在领克数据记录车机App上花费了大量时间,现在记录下领克2023款的车机技术路线。

研发背景:原厂仪表盘非赛道模式下,机油温度/涡轮压力/变速箱油温这些原厂统统不给看 ╭(╯^╰)╮ 想知道发动机状态全靠猜。既然原厂不给,那就自己动手。借助于车机打包时不删除sudo组件的安全性问题,只要拿到车机的adb权限,就可以逆向分析车机内的数据来源。刚好,OSN系统中的TestAPP很好的保留了VHAL和AdaptAPI两个测试App。读取到数据后,就可以显示数据到HUD(选配),仪表盘(借助导航飞屏),车机显示器上了。

一、数据来源

  • VHAL: 逆向后的车机系统里有VHAL数据源,能直接读一部分信号。
  • UDS信号: OBD诊断口 + UDS诊断请求能读的信号最全,代价是OBD轮询采样率很低,界面数据容易跳变。
  • 加速度计: G值是最容易的,车机内置的加速度计就能直接算出,不过需要做一次零位校准。
  • AdaptAPI: 车机的驾驶模式/真实车速等信号都在这里,有个16Hz的请求限制,高了慢了都不给数据。

二、数据源及数据平滑

有些数据有多个来源,例如方向盘转角,可以从车机上VHAL读取,也可以从OBD上的UDS诊断读取。

与其定义多个信号,不如直接让单个信号选择多个来源,默认车机能直读就优先走车机信号,读不了的再去走OBD读。

(谁能想到车机能读一些数据但不多呢?)大部分数据车机还是封锁了,SOME/IP是个半成品,只给一点点

现在数据有了,但是频率不算高。VHAL轮询上限能到30Hz,但是OBD读取频率,就和设备有关系了。

  • Vbox: 最最拉胯的设备,仿ELM327的低端芯片,蓝牙下一秒钟只有10~15个信号,不能说能用吧,和能用也没有什么关系了。
  • OBDLink系列: 能用,但是达不到人上人级别,价格虚高,性价比委实有点低了。BLE模式能到30+信号/秒,勉勉强强可以用一用。
  • 自己搞ESP32: 快,还是得人自己做硬件,能到60+信号/秒,够覆盖基础高频信号和少量低频信号。

只要没有直接接入动力总线,OBD的上限就是如此了。每个信号请求返回也要差不多40ms,对于扭矩/转速这些本应该高频的数据来说,OBD读取的频率和延迟,会给数据显示带来明显的跳变,这对实时数据读取/遥测是不可接受的了,这你能忍吗?(手动狗头)。

所以需要对数据做插值计算,让数据看起是平滑的,因此插值器会做easeOutCubic过渡,不外推。同时档位、驾驶模式等离散信号不进插值,不然3→4档能给你显示出3.6档(你在尝试造一辆不存在的车)。

三、车机的坑

  • VHAL有刹车信号,但从不更新。领克的网关过滤了刹车信号,VHAL里永远是0x6400占位符。
  • SOME/IP是超级半成品,有但是只有心跳包。至于数据哪里来的,你别问我,我也不知道。
  • 仪表飞屏和HUD投影,音乐信息显示是同一块虚拟盘,分区没调好就一起炸。
  • VHAL不是标准工具,ECarX超级定制版,你问为什么?可能是他们的KPI哈哈哈哈。

四、写在最后

整套东西能展开讲的细节不少,一篇塞完就太长了。后面慢慢补每个部分的坑。


《LynkCoTrack 开发系列》导航