「Eclipse Kuksa」— 车载应用开发者的“敲钟锤”
撰文:赵玉龙 / 陈雯雯|编辑/校审:王晓峰
⚠ 全文总长约含5000字,预计您的阅读时间为10分钟
壹
一个独立开发者的白日梦
智能网联汽车的兴起引发了互联网之后的又一次科技革命,抒写了又一波的造福神话。特斯拉汽车的CEO埃隆·马斯克(Elon Mask)已经超过比尔·盖茨(Bill Gates)成为了全球第二富有的人,而中国已有5家车企跻身全球车企市值前十强。
越来越多的人开始慢慢意识到,汽车的功能再也不仅仅局限于把你简单的从A点带到B点 —— 它正在慢慢地向车载移动终端进化,例如变成一台带有“四个轮子的手机”。抑或者说,它开始慢慢地变成一个新的“生活空间”。
图:车载移动终端
作为一名有理想的程序员,你有没有想过去开发一款像抖音一样风靡全球的车载应用,然后你带着你的小伙伴们一起去纽约交易所敲钟,最后赢取白富美走上人生巅峰?
正当你流着口水畅想未来的时候,你程序员的理工思维突然给了你一个大嘴巴子!你想什么呢!车载应用?还风靡全球?别做梦了!
先不说每个OEM的车载OS本身就有很大的区别(不像目前的主流手机市场内只有两套系统),而更重要的是,你必须搞明白该如何为你开发的车载应用APP获得有效的车辆数据。
你可能会说:“这个简单,使用用户在打开车载应用的时候必须点“同意以上条款”才能继续正常使用!” 你又天真了不是!就算是用户同意,整车厂同意了吗?不要忽略一点,你的车载应用APP根本没有获取车内数据的权限!因为整车厂是不会把这些数据轻易提供给第三方使用的!
OK,可能此时你还有些许不服。那咱们就假设某天整车厂脑袋被改锥扎了突然同意像第三方无偿提供车内数据,把一辆车放到你的面前跟你说了句“Enjoy yourself!”。当你兴奋的搂起袖子,摩拳擦掌准备大干一场的时候,你会突然发现:你或许根本就不知道如何从从车内获取自己所需的数据!因为整辆车除了一个OBD接口能勉强读出一些数据之外,其他地方你根本找不到下手之处!此时,你心里一定在想,要是车内能多一些接口就好了!
没错,这次你终于说到点子上了。
接口,最重要的就是接口!
无论是软件接口还是硬件接口,没有它们,你根本就别想从车内拿到你想要的数据!
上面这个段子就是想告诉大家:一个独立的APP开发人员要想使用车内数据开发一款车载应用是非常非常困难的,无论是技术上还是业务上,你都会遇到很多道坎。
而接下来,我们要跟各位介绍的这个开源项目「Eclipse Kuksa」,就是针对上述难题而推出的一套有效解决方案!
贰
The Big Picture
软件定义汽车的浪潮,驱使着每个汽车制造商都在自行开发软件密集型的汽车系统。但是,“孤岛式”的开发模式也为它们在行业内带来了巨大的挑战。车联网,软件的OTA更新和维护,自动驾驶,电动出行等领域对能够跨平台使用的技术创新的需求与日俱增。而建立车云业务的方案标准可显著改善此领域内的综合开发活动,并在不影响安全性的同时向外部应用程序,服务提供商和开源世界打开了市场。
博世(Bosch),作为全球最大的汽车供应商,近几年在汽车软件和平台方面进行了诸多的开发和研究。
例如,为了推进汽车软件标准化,降低汽车软件的开发成本,博世推出了越来越多的开源项目,比如我们上次为大家介绍的“冰羚”(一种基于零拷贝和共享内存技术来优化进程间通信的中间件)。
而我们本文的主角「Eclipse Kuksa」,则是博世推出的另一个极具发展潜力的开源项目。
此时你一定想知道,「Eclipse Kuksa」究竟是什么?
简单的讲,「Eclipse Kuksa」是一个通过车内和互联网连接将各种车辆连接到云的平台。该平台将得到集成的开源软件开发环境的支持,包括各种专门的技术用以应对物联网,云和数字时代的软件挑战。
Kuksa这个名字源于芬兰的一种古老的雕刻木杯Guksi。这种木杯必须与好友分享,并最终由好友馈赠,不能自己购买。而「Eclipse Kuksa」这个开源项目正是希望把这种“分享的精神”,带入到汽车软件行业里。
图:芬兰的一种古老的雕刻木杯
「Eclipse Kuksa」生态系统将为车内平台,云平台和应用程序开发IDE提供各种跨框架和跨领域的综合环境,它是一套完整的网联汽车领域工具栈。
图:Eclipse Kuksa生态系统
「Eclipse Kuksa」的主要功能是能够在云中收集,存储和分析车辆数据,以及传输各种信息比如云计算结果,软件维护更新甚至是提供全新的应用程序。
尽管Eclipse IoT生态系统中存在着许多IoT解决方案,但是「Eclipse Kuksa」则结合了必要的现有技术并填补了汽车领域对互联嵌入式实时性的特殊需求方面的空白。
叁
技术细节
「Eclipse Kuksa」构建了一个将车辆连接到云并支持开发智能网联汽车应用程序的平台,它主要由以下三部分组成:
Eclipse Kuksa IDE
Eclipse Kuksa 云平台
Eclipse Kukse 车载平台
下面就让我们一一来对它们做一个简单的介绍:
Eclipse Kuksa IDE:它是一个基于Eclipse的IDE,它既可以作为插件安装在MS Visual Studio Code上,也可以直接作为一个定制化的Eclipse Che Assembly进行使用。
「Eclipse Kuksa」提供了各种API用于实现基于AGL(基于Eclipse Che的Eclipse Kuksa IDE)或docker的车内应用程序,或提供给「Eclipse Kuksa」应用商店中已构建的APP使用。 这使得现有的通信接口可以直接被访问并进行安全的数据传输,存储,管理和身份验证,而不必使用另外的措施来处理或解释数据。
「Eclipse Kuksa」同时还支持针对云和车辆组件的新应用程序的简化部署:只需按一下按钮即可完成配置,构建和部署,而无需进一步配置或处理。开发者可以根据不同的应用程序选择使用不同的开发工具(例如日志记录,调试,跟踪等)。语法高亮显示,代码自动完成和其他必要的IDE功能都是被支持的。
图:Eclipse Kuksa IDE
例如,用于AGL开发的车载Eclipse Kuksa Che堆栈包括基于Yocto的SDK,以支持特定目标的编程。 在编译和构建软件之后,可以通过指定IP地址来触发在特定目标上的部署。 总的来说Eclipse Kuksa IDE提供了一种简单明了的机制,可以根据此处概述的AGL创建新项目。
Eclipse Kuksa 云平台(Eclipse Kuksa Cloud Platform):「Eclipse Kuksa」开源项目包含一个云后端用来提供与车辆交互的服务,从而使其所有者能够管理车辆并给第三方服务提供接口。
Kuksa Cloud存储库中开发的两个服务,一个是应用程序商店和另一个是Hono-InfluxDB-Connector,该连接器将数据从Eclipse Hono写入InfluxDB (更多信息请查看文末参考文献)。
其中有一个示例应用程序展示了与第三方服务的集成。示例中,一旦汽车检测到错误就会通过故障指示灯(一个软件模块)发出信号,所有者就会收到一封电子邮件。
此外,Kuksa Cloud存储库提供了脚本和资源使开发人员和操作员可以在运行的Kubernetes实例上设置自己的Kuksa云实例。这一点也很重要,因为Kuksa Clouds尽可能多的使用了Eclipse Hono,Eclipse hawkBit或Keycloak等许多开源项目,而不是去“reinvent the wheel”。
图:Dias-Kuksa示意图
上图是另外一个基于Kuksa的开源项目DIAS (DIagnostic Anti-tampering Systems)。
为了进行大量的车辆管理,我们需要足够的计算能力和资源。而DIAS的一个目标是创建一个基于云的诊断系统。基于云的系统不仅需要提供这些功能,而且还应该具有根据目标车辆的数量来扩展整个系统的能力,比如通过使用Azure,AWS和Bosch IoT Hub等云服务提供商。
这里至关重要的是,在基于车辆服务器的应用程序与基于外部服务器的应用程序之间建立连接,而KUKSA的出现使建立这种连接变得非常容易。而DIAS的一个主要应用就是防止厂商或者个人篡改车辆诊断测试数据,比如汽车尾气测试数据,你懂的
。
Eclipse Kuksa 车载平台(Kuksa In-Vehicle platform):
「Eclipse Kuksa」车载平台有两个重要的组成部分
车辆抽象层 VAL(Vehicle Abstraction Layer)和
Genivi VSS(Vehicle Signal Specification)
其中车辆抽象层(Vehicle Abstraction Layer):Kuksa.VAL提供描述车辆数据的Genivi VSS数据模型。有了它就可以把车内数据以标准格式通过比如基于W3C车辆信息服务规范的Websocket接口提供给应用程序使用。
Kuksa.VAL具有以下主要功能:
Websocket界面,TLS安全保护机制
实验性REST接口,TLS安全保护机制
基于JSON Webtokens(RFC 7519)的细粒度授权
JSON信息的署名验证
内置MQTT发布功能,通过MQTT及时获取指定的数据更新
VSS 测试客户端,以交互方式访问和修改VSS数据点及数据结构
可以说,VAL是整个Kuksa项目的核心。它主要实现了对车内各种非标准格式数据的映射,并将其转换成统一的VSS标准数据格式,同时提供了各种标准接口用于跟外界交互。
在此,我们简单举例说明一下整个流程:车内GPS数据通过GPS Feeder转换成VSS标准数据格式再由Websocket发送给VAL内核进行调度,最后通过任意一种VAL提供的标准接口比如WebSocket,REST或者MQTT发送到云端或者跟车载应用进行数据交换。而Kuksa.VAL则主要负责管理数据的读写,接口之间的转换,以及向用户提供订阅服务。
图:Kuksa.VAL的系统架构
如果第三方开发人员对接口有特殊需求,也完全可以参与到Kuksa项目的开发中去。
对于车内数据的获取,最简单的一种就是通过OBD接口。但是由此可获得的数据非常有限,如果想获得更多更好的数据则需要OEM参与进来。
值得庆幸的是,目前已经有宝马,沃尔沃和捷豹路虎等多家OEM及供应商同意共同参与VSS标准的制定。
Genivi VSS(Vehicle Signal Specification):Genivi VSS是一个以制定车辆信号规范为目标的开源项目,此规范引入了车辆信号的域分类法,可以用作汽车应用程序间通讯的标准。
在经典传感器和执行器领域,Genivi VSS专注于通过车辆总线进行传输的原始数据。标准化的车辆数据规范允许行业参与者使用公共命名空间(common naming space)进行通信,并抽象出底层的车辆实现细节。
如果我们用一句话总结就是:通过Genivi VSS规范我们就可以把不同制造商不同领域的车辆数据以统一的格式表示出来。
Genivi VSS规范定义的内容包括:
车辆信号的标准化数据定义
跨域的语义定义
车辆数据接口的基本定义
Genivi VSS规范不包含的内容包括:
车辆信号域之外的所有内容(用户数据,天气数据等)
具体接口定义
下图显示了所生成的规范树的示例快照。
其中叶子包含实际信息,如图所示。
图:VSS数据结构示例
肆
发展前景与挑战
经过前面的介绍,相信各位已经意识到,「Eclipse Kuksa」能够为开发者带来无限的发展可能。
概括起来,「Eclipse Kuksa」本质上其实是一种介于车内数据与上层应用(无论是车内还是云端)的通讯中间件,它提供了对车内数据的映射(转换成标准数据格式)和对外通讯的标准接口。
一个第三方开发团队,只需要在车内装上一个刷有「Eclipse Kuksa」的硬件接口(比如基于树莓派的插件),就可以轻松的获取车内数据进行应用开发。
尽管目前基于「Eclipse Kuksa」开发的应用都是跟功能安全无关的,但是可以想象,如果实时性和性能方面能够满足车规级要求,就可以把Kuksa作为一个软件模块集成到车载ECU上给车内的第三方应用程序(比如ADAS应用)提供数据服务,而无需增加额外的硬件插件。
当然,理想是丰满的,现实是骨干的。
「Eclipse Kuksa」项目成功的一个重要前提,是OEM愿意把数据交出来让第三方使用, 以及更多的汽车软件开发者能参与进来,交流和反馈相关经验与意见。
目前,虽然已经有几家主流OEM和供应商同意参与VSS数据规范的制定,但是它们是否真的愿意把车内数据接口开放给第三方还需另当别论。
另外,从技术角度讲,如果Kuksa集中搜集了车内各种数据,就会很容易成为黑客攻击的目标,怎么避免成为single point of failure,将是「Eclipse Kuksa」项目所需要面临的另一个巨大的挑战。
但是我们坚信,「Eclipse Kuksa」这个理念的前景是光明的,它在软件定义汽车的新时代为第三方开发者打开了一扇窗户,也为OEM和供应商进入开源世界提供了一条渠道。
如果「Eclipse Kuksa」项目可以真正的付诸于实践,将会为汽车行业创造一个双赢的局面。那么,就让我们继续密切关注「Eclipse Kuksa」的发展动向吧!
说不定有一天,“我们”的“白日梦”,真的就实现了呢!
参考文献
[1] https://www.eclipse.org/kuksa/
[2] https://projects.eclipse.org/projects/iot.kuksa
[3] https://dias-kuksa-doc.readthedocs.io/en/latest/contents/intro.html
[4] https://genivi.github.io/vehicle_signal_specification/
完
特邀撰稿:赵玉龙
作者微信:michalzhao
作者简介:德国博世公司智能驾驶与控制事业部资深软件架构师,负责车载计算平台与中央网关的软件研发项目。
特邀撰稿:陈雯雯
作者微信:callalilyDeutschland
作者简介:德国博世公司中央研究院高级软件工程师,负责多个软件研发项目。Kuksa VAL项目核心成员。
技术交流群:YasmineMiao(微信)