「EclipseKuksa」—车载应⽤开发者的“敲钟锤”撰⽂:赵⽟龙 / 陈雯雯|编辑/校审:王晓峰⚠ 全⽂总长约含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 IDEEclipse Kuksa 云平台Eclipse Kukse 车载平台下⾯就让我们⼀⼀来对它们做⼀个简单的介绍:Eclipse Kuksa IDE:它是⼀个基于Eclipse的IDE,它既可以作为插件安装在MS Visual StudioCode上,也可以直接作为⼀个定制化的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尽可能多的使⽤了EclipseHono,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(微信)投稿合作:189****0345(微信)