怿星科技薛春宇丨智能汽车软件研发工具链国产化的挑战和探索

2024年7月25日,由上海良益企业管理咨询有限公司主办的“2024域控制器技术论坛“在上海成功举办,十位嘉宾做了精彩分享。“整零有道”将陆续刊出部分演讲的文字实录,以飨读者。

本期刊出怿星科技副总经理薛春宇的演讲实录:智能汽车软件研发工具链国产化的挑战和探索。文字经嘉宾本人审阅,有删节。

图片

各位早上好,很高兴跟大家在这里探讨关于软件开发、工具链以及软件开发过程中碰到的问题和挑战。刚才龙平先生也提到了软件开发的效率问题,值得大家深思。其实这几年软件研发的状态,内卷的程度,包括软件研发的工作量都是热门话题。大家都知道软件研发带来了大量的成本,所以在这里我代表怿星科技跟大家探讨一下,在软件开发过程中,怎么利用好国产工具链,然后怎么用工具链去提升效率,以及对于国产工具链的一些思考。我的演讲分三个方面:初心,怿星的解决方案,最后分享我对整个国产工具链的机遇和看法。

关于初心

我是做软件出身,开始的时候ABS/ESC的算法做了4-5年。在整个软件开发的过程中,碰到了大量效率的问题,代码一致性的问题,代码的测试问题,这些都造成了我们软件开发效率的低下。所以我们引入了一个叫“软件工业化”的概念,就是说软件工业化到底够不够,我们用软件工业化的这样一个标准来去评判软件开发。那么软件工业化的标准是什么?

首先是效率,然后是质量,然后是成本。大家都知道整个工业化的成果带来的就是效率的提升,成本的降低,然后质量的极大的提升,但是我们软件碰到的问题却是完全反面的,质量、效率都是极差的。

如果我们从工业化的角度看,一个真正的工业化的产品,PPM我相信应该是个位数,是极低的,我们其实要求0PPM。但是我们扪心自问一下,我们现在90%以上的软件是有大量问题的。在效率方面,我们还有大量的人工堆在软件开发的整个的通道里面,造成了软件开发整个效率低下的问题。

基于以上这些,我们认为整个软件的工业化程度是极低的。但是软件行业发展了那么久,软件效率还是那么低,肯定有它深层次的原因。我们大概总结了一下,原因有大量依赖人力,包括整个软件技术能力的参差不齐,也包括缺乏高效的软件开发的工具链。

其实软件开发工具链总体来讲还是很丰富,但是极其地碎片化,角色跟责任分工也不明确,也缺乏对软件开发整个周期的管理等等。软件(包括整个电子电器开发的工具链),我们一般把它归为5类。第一是设计类工具,大家用的比较多,像Matlab、Simulink等工具来帮助大家去生成整个架构or软件代码。另外编译器和集成开发环境,这个一般都是由芯片厂来提供的,提供了各种各样的编译环境。另外就是模拟和仿真工具,模拟仿真工具的话主要是用于整个开发过程,去仿真整个的环境也好,或者做相关的模型开发也好,生成代码也好。然后软件开发完以后,生成代码以后,做相关的调试跟测试。最后就是开发流程的管理工具。所以我们今天讲的范畴其实就是覆盖了这5个,我们准备用这5个工具来开发和测试相关的软件。

怿星科技在国产软件研发工具链方面的探索

怿星是做网络仿真,包括网络软件开发通信协议栈,包括智能座舱软件出身的,我们在这两个领域到底做了哪些探索?

图片

以上是怿星科技目前的产品矩阵。最右边部分比较容易理解,其实就是自动化的测试设备、HIL的设备,来仿真整个的电子电气架构环境,做软件集成测试仿真的。

这块其实覆盖了上面的测试验证过程,上面的过程大家都比较熟悉,因为做电子电器开发或软件开发,基本上就是传统的V模型,从需求定义、架构设计到软硬件的详细设计,到软件测试,再到系统集成测试,所以右侧的这些大型的HIL机柜其实就是为了服务好系统集成测试的,然后左边这两侧的其实就是服务好整个的软件开发工作,包括架构设计,包括软硬件的详细设计,包括软件测试的。我们也提供标准中间件的产品,包括车载通信的协议栈中间件,也包括智能座舱的中间件。中间件这块的话,现在CP的话基本上用的比较多,大家知道整个AP在国内用的不是特别多的,大家都有自己的一些想法来去实现域控制器方面的这样一个软件架构的一些框架。

然后中间的话其实就是研发工具链,研发工具链的话其实就是类似于Vector的这些相关的一些上位机的软件以及各种各样的接口卡,实现的功能其实就是做软件架构设计,然后做代码生成,做软件测试,帮着大家来去做好整个的软件开发。当然我们的目标是提供工程师人手一套的这样的工具,来做好软件开发跟测试。

图片

那具体包含了哪些?其实最核心的就是SolarONE,这是一个仿真测试的开发的软件平台,这个是跑在Windows环境下的,方便我们的软件工程师拿它做软件架构设计需求管理,然后做代码生成和软件测试的,主要用于网络仿真,就是车载网络的代码以及架构设计以及网络仿真和测试。然后基于这个SolarONE仿真测试平台,周边就是各种各样的硬件接口卡,硬件接口卡的话包括了CAN/LIN的接口卡,包括以太网的接口卡,故障注入模块,各种I/O接口卡等。

左下角就是刚才说的这些接口卡,包括各种I/O板卡,各种电源接口板卡,然后右下角的其实就是各种专项测试仪,基于现在的软件开发中遇到的各种各样的专项测试,也包括TC8的测试,TC10的测试,DDS的测试,包括同步精度的测试,比如TSN的网络的同步精度的测试,这些是我们把它归为专项测试仪。

图片

这是一个更详细的介绍,包括了刚才说的5430是我们首款国产的高性能的汽车以太网的接口卡,然后的话就是CAN/LIN的接口卡5130,再加上各种各样的测试仪,包括ETS4620的IOP测试仪,现在是国内首款真正做IOP底层测试的IOP测试仪,然后包括了高分辨的TSN的时钟网络同步精度的一个测试仪,用于TSN的网络分析的。

再有就是左上角的场景化的测试套件,其实就是各种各样的测试用例的用例库,所以基于这样一个软件,三套硬件,再加上一套测试用例库,我们搭建起了各种各样服务于不同场景的研发测试设备。

举个例子,基于我们SolarONE的软件,再加上接口卡,我们搭建起了智能座舱的开发环境,包括了软件的解决方案,包括了 UI/UE的逻辑层的解决方案,包括了自动化的测试方案。其实里面有大量的工具库,包括了我们的eStation。eStation是做座舱软件的开发流程管理的,包括需求管理。然后eFramework是我们的开发框架,是基于智能座舱的整个的上层应用的一个框架,用于帮助我们客户做好应用层软件的平台化。

图片

大家知道做硬件及基础软件这块的平台化还是比较好做的,大家提的中间件以下部分做平台化,而真正难做平台化的,其实是上层应用的平台化,我们eFramework的框架其实就是为了帮助我们客户做好上层应用层软件的平台化,包括UI/UE,包括逻辑层,包括业务层相关的软件代码的平台化,怎么做好。

图片

右下角的图可以帮大家理解,我们做了关于界面层的,关于UE逻辑层的和关于UI业务逻辑层的这样的一个解耦,刚才龙平先生也提到了相关的解耦,解耦完以后,各个层包括各个逻辑层、应用层,界面层,他们是通过信号来去进行交互的,通过各个层的逻辑层的解耦,再通过各个逻辑层之间信号的标准化来去完成各个层面的解耦,这是我们的方法。

这个框架现在在广汽、吉利、奇瑞等项目上都做了相关的应用,帮助我们客户做好相关的应用层软件的平台化。

除了软件代码,还有就是基于Solar的一个整车的智能座舱的测试的环境来去做好智能座舱的功能测试,这个就不多讲了。主要也是基于Solar的我们国产化的开发平台,它形成了这样一个Python的接口,所以它能够做到支持各种的硬件,支持各种的相关的测试用例库。

图片

这是座舱测试方案的大概的框架,它的优势其实也是基于刚才我说的这套环境,然后做好模块的组合,因为它支持各种各样的模块的接口,包括视频图像声音导航,包括机械臂,它兼容各种各样市面主流的硬件设备,可以支持集群化部署。这套方案也是基于我们SolarONE平台的,如果需要在云端部署,还需要SolarManager套件,它是一个云端部署的管理套件,支持云端的管理平台的对接及资产的管理,相关的一些测试报告的生成。同时它是一个低代码的工具,所以它完全可以通过图形化的界面来去做拖拽式的开发。

刚才说了智能座舱,现在讲一下车载通信,我们怎么做?其实也是基于SolarONE这个仿真测试平台,包括EEA架构设计,eVisionStack的中间件,也就是协议栈等代码的自动生成,还有就是仿真测试。所以我们支持左侧的开发,而右侧的测试包括了我们刚才说的各种各样的测试仪,包括了IOP的测试仪,然后TSN的测试仪,然后TC8、TC10、DDS的相关的测试仪,这些都是基于国产化的SolarONE上位机软件加上国产化的相关的接口卡开发出来的。

再往上的话就是集成测试相关的解决方案,包括了我们以太网的测试设备,包括了CAN/LIN的测试设备,包括了OTA的测试设备等等。

图片

所以大家可以看到,怿星科技基于这样一个统一的框架,也就是刚才说的SolarONE加各种硬件接口卡的这样一个框架,我们搭起了从软件开发到软件测试再到系统集成测试的这样一个开发环境。所以我们把它叫做工具链。我们强调的是“链”这个字。

这里我具体讲一下DDS测试的解决方案,其实基于我们刚才说的测试框架的话,我们实现了协议的测试,通信及交互功能测试,性能稳定测试,当然也包括我们的一些定制化的测试内容。这是网络测试的拓扑。我们基于 Robert Framework来搭建的框架,当然也是在我们SolarONE的开发环境里面的,同时也包括了测试中间件,相关的被测件,DDS的一个相关的协议栈,结构很简单,基于我们的上位机软件,基于我们的测试用例库,同时加一个T1转Tx的接口卡,还有就是打流仪。非常轻量化的一个DDS的测试的一个框架和解决方案。

图片

图片

讲完座舱测试和网络测试,接着的话就是我们自动驾驶的解决方案,自动驾驶的话主要是数据流,所以包括了整个的数据的采集,数据的存储,数据的脱敏和标注,再到数据的仿真注入的一个测试环境。

以上大概讲了一些我们的基于SolarONE整个框架的一些解决方案,包括座舱、自动驾驶,整车的开发环境。

国产工具链的机遇

其实我们整个的汽车电子的发展,大家也知道,我们基本上就是伴随着德国和美国的一些工具链成长起来的。我们在大概20年前,从2003年整个汽车行业开始慢慢崛起,刚开始10年的话,整个汽车产业链还是以打铁的为主,机加工各种轮毂铸件为主,汽车电子那时候还是非常弱小的,我们的汽车电子是学习欧美的整个的企业的经验慢慢成长起来的,原来我们做发动机电控,做ABS/ESC,做尾门控制器、座椅控制器,当时连尾门控制器、座椅控制器我们都做得不好,防夹算法、纹波算法我们都做得不是很好,但现在不一样了。

随着智能化的发展,包括域控制器,整个中国其实处于一个非常领先的地位。所以随着整个中国工具链,包括整个中国产业链的崛起,我觉得对于中国的整个的自主的工具链这块,软件工具链这块其实是一个极大的机会。但是这个软件的优势来自于哪里?是来自于整个智能化,像蔚来的龙平先生,他们也是从互联网来的,从手机行业来的,从消费品来的,所以中国有大量的软件工程师红利,有大量的软件工程师和硬件工程师红利,这样的话我们有极大的信心来去开发,或者说有极大的技术基础去开发这样的软件工具链,同样让我们有足够的市场试错空间。

这些机遇具体从哪来?

怿星科技成立于2014年,10年时间了,前5年我们基本上是做集成交付为主,从2020年开始我们自研相关的核心设备,所以我们基本上现在的核心设备的思路主要来自于这几点,怎么来去用好中国在这些方面的创新来去做好新一代的软件开发工具链,反过来,怎么用这些软件工具链来支持好中国在这些方面的创新。

首先的话就是复杂场景和数据,这个比较好理解,以自动驾驶为例,自动驾驶是典型的以数据驱动,以复杂场景为驱动的软件开发方式,跟传统的Model Base的完全不一样了,它是以数据驱动的方式来开发的。数据驱动的方式需要新的软件开发工具,这也是为什么我们开发了数据仿真注入系统来去做自动驾驶的开发。

第二个人工智能,主要来自于两方面的作用,第一方面的话当然是因为人工智能大模型等等带来的整个软件开发方式的区别。第二个的话就是人工智能在软件工具链方面的一个应用,我相信大家如果做软件开发的话,大家普遍已经在整个代码的生成的过程中用各种智能代码工具了,做代码的生成,做代码的检查等等,所以人工智能带来的软件开发以及软件开发方式方面的变革是非常大的。

第三个的话,今天讨论比较多的就是域控,包括整个的分布式架构,当然这个分布式架构的话,从现在的车内的分布式架构已经往车路云的分布式架构走了,其实大家刚才秀的博世那张图,其实最终的就是车路云的或者车云,当时其实博世没有考虑到路,车路协同的话其实是中国的概念,但是总体来讲,车云、端云之间的协同,分布式计算架构这块的话是未来的一个终局。

第四个的话是功能安全、信息安全给工具链带来的新需求。

第五个,是关于开发流程。大家讨论比较多的怎么来做好瀑布式跟敏捷开发的一个统筹。因为瀑布式的话其实就是V模型,我们大家比较熟悉V模型,但是从手机行业消费品行业,包括互联网行业带来的敏捷开发的方式,大型的网络软件,大型的这种软件管理方式,用敏捷开发的方式来驱动快速的迭代,这个的话其实跟瀑布式是表面上看是冲突的,实际上大家在实践过程中已经有一些非常好的经验了,我们所谓的大瀑布、小敏捷,大家已经在做相关的融合,但在工具链这块怎么来去做好大瀑布和小敏捷的一些结合,这个是非常重要的点。

第六个,开发方式。我们怎么去做好云原生,怎么去做好相关的一些容器化的部署,很多容器化的技术已经在我们的软件开发中在应用了。包括我们在整车架构中经常讨论的SOA的架构,相关的微服务,其实跟原来的云端部署的方式,包括容器化的方式其实是非常类似的。

第七个,是供应链生态,我们的软硬分离。软硬分离是一个很好的概念,软硬分离其实是两个概念层面的东西,第一个是供应链层面,供应链层面有做硬件的供应商,有做软件的供应商,这是完全从供应链层面说软硬分离。另外一个层面的话是技术层面,即使是同一家供应商做整个的域控的整个软件,从底层软件到中间件到上层应用层软件,其实也在做软硬分离。从供应链层面和技术层面的软硬分离也带来了对工具链的挑战。怎么来去服务好软硬分离的一个趋势?所以基于这些趋势的话,我们其实一直在努力地来去做好我们的软件工具链。

这是软件工具链整个现在国内的生态,这张图其实大家看到的不多,因为我们做工具链这块做了很久,但是很难找到国内对于工具链这块的整个生态的一个介绍,包括整个市场的介绍,我们把我们的友商也列上去了,国内在做软件工具的友商不多,当然左侧的Global玩家大家是比较熟悉,从 Vector、EB、Windriver、dSpace,这个是大家用的比较熟悉的,但在国内大家在做这方面的探索其实不多,所以我们呼吁大家关注国产的工具链。

一个好的趋势是,现在很多大的主机厂已经成立了国产工具链的一个小组,其实就是应对极端情况下的一些风险。说明大家正在关注国产工具链的重要性。我们最近接到了大量的主机厂,包括Tier1的邀请,来去跟他们探讨国产工具链,所以这里看到大家其实很多致远、经纬、昆易、同星,包括我们怿星等等,大家都在做这方面的探索,但是这个探索是极难的,工具链这块其实还是有很高的门槛,从性能、功能到一致性这块,包括易用性这块,大家都在探索,当然我们也得思考我们的优势在哪里?主要是研发团队在对国内的广大客户产生的新需求能够快速响应,所以刚才我说的那些专用测试仪,其实就是基于国内的客户的一些需求来去开发的专用测试仪,我们能够在很短的交付周期内完成这些产品的交付。

最后做个展望,其实国产工具链这块的话,我们探索了那么多年。这么多年下来,我们有一些对于趋势的展望。第一个就是合作,我们相信汽车供应链和各类的科技公司会产生大量的协作,来去支持研发工具链的创新,因为我们需要大量的软件和硬件的人才来去做好开发。然后市场份额上的转化,我们相信国产工具链肯定会崛起的,随着供应链的崛起。第三创新产品,国产工具链的崛起肯定是伴随着相关的一些特殊工具链的创新,而且创新的话都是基于场景化的,各种场景化的测试和开发的需求。第四行业标准,整个标准的建立才能帮助国产工具链的快速发展,大家分好工来去分别支持好相关的开发,然后做好互操作性。最后是生态,我们希望建立起这样一个健康的生态。

好,我的分享就到这里,谢谢大家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456817.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用 obdiag 排查 OceanBase数据库的卡合并问题——《OceanBase诊断系列》14

1. 背景 卡合并在OceanBase中是一个复杂的问题,其产生可能源于多种因素。目前,对于卡合并的明确界定尚不存在统一标准,一方面,我们界定超过36小时未完成合并为合并超时,此时RS会记录ERROR日志;另一方面&am…

ArkUI自定义TabBar组件

在ArkUI中的Tabs,通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。其中内容是图TabContent作为Tabs的自组件,通过给TabContent设置tabBar属性来自定义导航栏样式。现在我们就根据UI设计的效果图来实现下图效果: 根…

Python | Leetcode Python题解之第508题出现次数最多的子树元素和

题目: 题解: class Solution:def findFrequentTreeSum(self, root: TreeNode) -> List[int]:cnt Counter()def dfs(node: TreeNode) -> int:if node is None:return 0sum node.val dfs(node.left) dfs(node.right)cnt[sum] 1return sumdfs(r…

设计模式(二)工厂模式详解

设计模式(二)工厂模式详解 简单工厂模式指由一个工厂对象来创建实例,适用于工厂类负责创建对象较少的情况。例子:Spring 中的 BeanFactory 使用简单工厂模式,产生 Bean 对象。 工厂模式简介 定义:工厂模式是一种创建…

AnaTraf | 全面掌握网络健康状态:全流量的分布式网络性能监测系统

AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具AnaTraf网络流量分析仪是一款基于全流量,能够实时监控网络流量和历史流量回溯分析的网络性能监控与诊断系统(NPMD)。通过对网络各个关键节点的监测,收集网络性能…

【计算机网络 - 基础问题】每日 3 题(五十七)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

代谢组数据分析(二十):通过WGCNA识别核心代谢物

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍识别核心基因加载R包导入数据数据预处理检查数据完整性计算软阈值soft根据软阈值构建接矩阵和拓扑重叠矩阵聚类并构建网络拓扑重叠热图查看具体模块的代谢物表达热图识别表型相关模…

sharpkeys-键盘部分按键不好用,用其它不常用按键代替

sharpkeys-键盘部分按键不好用,用其它不常用按键代替 文章目录

linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信

文章目录 Posix API和网络协议栈,使用TCP实现P2P通信1. socket()2. bind()3. listen()4. connect()5. accept()6. read()/write(), recv()/send()7. 内核tcp数据传输7.1 TCP流量控制7.2 TCP拥塞控制——慢启动/拥塞避免/快速恢复/快速重传 8. shutdown()9. close()9…

Python游戏开发超详细第二课/一个小游戏等制作过程(入门级篇共2节)

直播内容,这里都用大多用照片代替了哈,因为在写一遍很累,哥哥姐姐理解一下抱歉抱歉 一个是我懒的写一遍,但是刚学的兄弟姐妹可不许学我偷懒哈 二防止有人偷懒,直接复制粘贴代码,所以为了方便帮助你们学习&a…

基于docker 部署redis

1、拉取镜像 docker pull redis:latest如果拉取失败可以尝试下配置镜像源,具体参考如下,目前暂可以使用 Docker切换镜像源-CSDN博客 2、创建配置文件 mkdir /usr/local/redis/conf vim redis.conf bind 0.0.0.0#protected-mode no port 6379 tcp-b…

新手直播方案

简介 新手直播方案 ,低成本方案 手机/电脑 直接直播手机软件电脑直播手机采集卡麦电脑直播多摄像机 机位多路采集卡 多路麦加电脑(高成本方案) 直播推流方案 需要摄像头 方案一 :手机 电脑同步下载 网络摄像头 软件&#xff08…

【南方科技大学】CS315 Computer Security 【Lab6 IoT Security and Wireless Exploitation】

目录 Introduction (Part 1: OS Security for IoT )Software RequirementsStarting the Lab 6 Virtual MachineSetting up the Zephyr Development EnvironmentDownload the Zephyr Source CodeInstalling Requirements and DependenciesSetting the Project’s Environment Va…

【linux】服务器Ubuntu20.04安装cuda11.8教程

【linux】服务器Ubuntu20.04安装cuda11.8教程 文章目录 【linux】服务器Ubuntu20.04安装cuda11.8教程到官网找到对应版本下载链接终端操作cudnn安装到官网下载下载后解压进入解压后的目录:将头文件复制到 /usr/local/cuda/include/ 目录:将库文件复制到 …

利用客户端导入有关联的业务数据(DBeaver+sql)

前言 最近有点坑,麻辣烫的活落手上了,上个迭代除了自己的开发任务,还有处理接手的工作。然后节后问题又多,还有前1个迭代没有测试的模块本迭代测试,烦死了。 这次这个数据处理的活,以后希望可以交出…

mac电脑设置chrome浏览器语言切换为日语英语等不生效问题

在chrome中设置了语言,并且已经置顶了,但是不生效,在windows上直接有设置当前语言为chrome显示语言,但是mac上没有。 解决办法 在系统里面有一个单独给chrome设置语言的: 单独给它设定成指定的语言,然后重…

川渝地区计算机考研择校分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 添加图片注释,不超过 140 字(可选) 根据最新数据分析,5所高校计算机专业2025年考研难度从高到低预计为: 电子科技大学 >> 四川大学 > 重庆大学 ≈ 西南交通大学 > 西南…

Vision-Language Models for Vision Tasks: A Survey阅读笔记

虽然LLM的文章还没都看完,但是终究是开始看起来了VLM,首当其冲,当然是做一片文献综述啦。这篇文章比较早了,2024年2月份出的last version。 文章链接:https://arxiv.org/abs/2304.00685 GitHub链接:GitHu…

命名空间std, using namespace std

命名空间std&#xff0c;using namespace std 在标准C以前&#xff0c;都是用#include<iostream.h>这样的写法的&#xff0c;因为要包含进来的头文件名就是iostream.h。标准C引入了名字空间的概念&#xff0c;并把iostream等标准库中的东东封装到了std名字空间中&#x…

【linux网络编程】| 网络基础 | 解析IP与Mac地址的区别

前言&#xff1a;本节内容讲解一些网络基础相关的知识点&#xff0c; 不涉及网络代码&#xff01;同样的本节内容是作为前一篇的补充知识点&#xff0c; 前一篇文章地址&#xff1a;【linux网络编程】 | 网络基础Ⅰ| 认识网络-CSDN博客&#xff0c;本篇文章内容较少&#xff0c…