最近在领克数据记录车机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 开发系列》导航
- 01 LynkCoTrack架构总览
- 02 LynkCoTrack: VHAL以及ECarX反射数据源
- 03 OBD-UDS 协议
- 04 RaceChrono BLE 广播
- 05 HUD 副屏
- 06 副屏仪表皮肤
- 07 ESP32 桥接
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
云曦的秘密基地
本文地址: LynkCoTrack 架构总览
本文地址: LynkCoTrack 架构总览