宾士
「容器在汽车软体开发流程能发挥关键作用。」福斯汽车Cariad首席产品负责人Marcus Greul简单一句话道出容器重要性。不只是福斯,其他大型车厂,如宾士、通用、福特等,也都面对相同的挑战,而要透过容器技术对汽车软体开发流程展开大变革。
因应汽车软体化的趋势,未来电动车都能透过OTA快速更新,甚至每几个月就能更新一次,福斯虽然订下目标未来2年软体自主开发比重提高至6成,但仍有4成是委外,当软体更新频率加快,传统汽车软体开发方式已经跟不上汽车新功能需求增长,所以,福斯要彻底改造汽车软体开发流程,并以其中的测试为改造首要重点。
福斯靠容器技术克服测试环境建置造成更新延迟
汽车内部是一个大型分散式软体系统,一辆电动车就有60套ECU软体,提供各种不同汽车功能,像是电动後视镜调整等。开发人员每次更新或新增ECU软体,都要经过繁琐测试、整合测试验证ECU,确保任何修改不会对车内执行的其他系统产生负面影响。不只测试耗费大量时间,每次测试前,研发人员必须把测试环境建置完成,才能开始测试,单是环境建置就需要好几天,导致软体更新周期变长。这也成了福斯首要难题,所以用容器来解决。
福斯电动车研发团队2年前采用红帽OpenShift打造一个云原生的虚拟测试平台,来解决测试环境建置造成软体更新延迟的问题,并以DevOps敏捷开发方式实践。
在这个虚拟测试平台上,开发者可以使用容器将执行测试所需要的元件打包部署到该平台上测试,不只可以使用容器执行ECU功能,来进行各项测试,包括整合测试等,也能快速在容器中建立不同虚拟ECU,来模拟各种条件下ECU上执行软体堆叠的情况。
因为不需要考虑测试环境准备,因此测试速度变更快。虚拟测试结果也能与实车测试相互比对加以改良,进而提高ECU软体性能。
导入容器技术改造开发测试流程一段时间後 ,福斯不只将测试平台建置时间从数天减至几小时,让开发团队可以专注於测试,而不用管底层的硬体怎麽用,也大幅缩短汽车ECU软体开发测试时间,还因此省下50%硬体成本,新的测试流程,对於跨团队协作也获得改善。
除了福斯以外,其他车厂也面临同样的考验,而必须要让汽车软体开发流程跟着现代化。例如宾士很早就推出车联网服务,提供车辆远端监控、互动体验等功能,但用户一年仅获得1~2次软体更新,更新频率太慢,没办法快速回应用户需求,成了宾士首要解决的问题。
导入云原生技术,让宾士软体发布周期缩短到3个月内
过去汽车软体和硬体关系紧密不可分离,也反映在汽车软体开发流程,必须考虑到车辆系统发布周期,每次要开发新软体,软体工程师必须等硬体完成才能接着开发,甚至还要懂得硬体架构,以及使用哪些厂商硬体组装等,单是软体开发前置作业,就耗费不少时间,也导致软体开发周期很长。
为了缩短软体更新周期,宾士决定要把软体开发流程自车辆系统发布管理周期中分离,以此加快软体更新迭代,宾士首席软体工程师Rodrigo Nunes指出:「就需要用到容器。」
宾士车联网团队自2年前导入AKS容器管理平台,打造一个容器化软体开发平台,希望藉由这个新平台实现软体开发流程现代化,来改善软体更新周期太长的问题, 同时确保品质与安全性, 并以自动化方式将软体部署到车上。
现在工程师使用笔电搭配模拟器,就可以在这个软体开发平台上进行开发,用软体模拟和测试各种汽车功能,不用管硬体测试平台该如何建置,就可以进行软体开发和测试,之後再以自动化方式将软体部署到实车上测试验证。
宾士後来更把每个容器化应用软体都拆成一支支微服务,可以各自独立开发、测试与验证并能分别交由不同软体工程师执行,等到完成测试验证,再将多个微服务合并推出,来提升应用程式开发的效率。
这些容器化软体资源建立、配置和和功能交付,全都透过容器调度工具K8s来处理,还结合高度弹性的API设计,让不同功能的开发不必互相等候,前後端团队、不同Tier供应商可以彼此协作,是应用开发效率再提升的另一关键。开发团队也使用如Go、JavaScript、C#、Python等主流程式语言来开发。
导入这些云原生技术後,对於宾士带来最大改变是,软体发布周期变更快,每3个月内就能更新一次软体,等於一年至少3~4次更新频率,就可以推出更多汽车功能。
「用容器驱动的汽车(Container-driven cars)」这是宾士RD研发团队几年前对於他们正在发展的联网汽车幽默称呼,由此也透露出,宾士想把对於带来汽车软体开发流程变革的容器技术,也带入车上。
另一家汽车大厂福特同样采用容器、K8s管理平台加快包含汽车软体在内的应用程式开发和交付, 而且为了更快速地开发及迭代软体,也结合DevOps与CI/CD测试部署自动化。
除了运用在研发部门,其他部门也有采用,例如,福特不同业务部门都有设立一个高度参与的开发社群,该社群负责建构最新技术的创新产品和服务,就会使用容器技术,例如汽车碰撞分析、自动驾驶机器学习开发,以及HPC硬体测试等就有用到。
福特预期透过导入云原生,除了能够降低硬体投资成本,还能提高开发人员生产力,并加强应用程式安全性与合规性,符合各行业安全标准和规范,如PCI DSS标准或是欧盟个资法。
除了一般汽车软体开发流程,连自驾车软体开发流程也要现代化
除了传统车厂要把汽车软体开发流程现代化,也有自驾车新创为了加快自驾软体更新迭代与实现自驾车大规模部署,而重建自驾车软体开发流程,来获得更敏捷、更弹性的能力。通用旗下自驾车软体公司Cruise就是其中一家。
每次自驾车软体更新前,研发人员必须先把实车蒐集到的数据,经过数据清洗等资料处理步骤,再喂给ML模型训练,产出最终模型後,还要在模拟环境和实车上测试,才能更新到自驾车上。
这样一个自驾车软体开发流程,对於Cruise来说,在去年一场自驾车道路实测上却遇到瓶颈,不断有车辆新的数据涌进来,还有以前没看过新的交通情境、罕见场景出现, 但是却无法很快更新软体,提高自驾车适应能力,因为Cruise这次测试的不只一部无人自驾车,而是有很多部自驾车一起在路上跑,还是在交通复杂的旧金山市区道路上,不只对於自驾车的挑战很大,多辆车组成自驾车队在路上测试,庞大资料量涌入不断增加数据处理的负担,也需要投入更多资源完成大规模验证与测试,导致软体更新步调变慢。
为了解决这个问题,Cruise自驾车团队使用GKE容器管理平台,运用容器、K8s、微服务,将自驾车数据蒐集、清理、模型建立,都集中到一个平台上处理,从而简化自驾软体开发流程,并搭配CI/CD流程,达到持续整合与持续部署。还使用该平台快速建立模拟环境,产生类似交通情境来加以验证。最後不只一周可以有多个版本更新,也能达成多辆自驾车软体大规模部署与更新。