【分享】MathWorks中国汽车年会:“软件定义汽车”
从软件赋能到软件定义,汽车行业不仅需要解决诸如错误发现滞后带来的高昂代价、功能融合所需的跨学科知识、功能安全与实施成本之间的权衡等老问题,也面临着新的挑战:软件复杂度的不断提升、利用数据驱动创造价值、人工智能的引入和实现、数字技术和工程能力的结合。这些问题和挑战同样也给予了行业审视和重塑软件开发体系的机会,让软件能成为未来价值的真正驱动力。

在上个世纪七八十年代,电控系统开始逐步应用到车辆。在这个阶段软件大大提升了硬件的能力,这可以看作是行业的第一次数字化转型。在这次转型过程中面临了许多挑战。比如:
在设计方面,利益相关方无法有效进行评审。
在实现方面,错误发现过晚导致修复成本高。
在人员方面,汽车工程师不熟悉软件开发。
基于模型设计的方法,在这个背景下应运而生。它通过建模和仿真实现了设计的可执行和易理解。通过系统化的测试提前发现问题,通过自动代码生成技术,把汽车工程师从代码编写中解放了出来。

随着社会对清洁和交通安全期望的进一步提升,以及互联网和移动数字体验的深入人心,公众希望在出行方式上保持这种体验的连续性。在这个背景下,行业迎来了以电动化、智能化和网联化为标志的第二次数字化转型,软件承担了前所未有的技术创新的角色,以至于产生了软件定义汽车这个概念。
软件可以作为独立的产品,以应用商店的形式,按需为用户提供功能,以软件服务订阅的方式来收费。这样的一个商业模式,满足了用户个性化和新体验的一个期望。

这次转型对于组织架构和开发体系有着颠覆式的影响,他要求企业组织提高虚拟化的一个开发比重,重新构建供应链的体系,以及加大对员工的知识技能培训。对于软件开发体系,算力集中化以后该如何优化系统和软件架构,如何建立人工智能算法开发和集成能力?如何将素质能力和工程能力结合起来,构建一个虚拟化的开发流程?
对于如何解决这些问题,MathWorks认为系统工程、软件工厂、数据驱动和虚拟车辆是比较重要的能力。

系统工程能力可以帮助软件创新至系统级优化。
软件工厂的能力可以帮助持续快速交付高质量的软件产品。
数据驱动的能力将人工智能算法集成到软件中来。虚拟车辆的能力是将以上三者进行一个整合,帮助在流程中引入虚拟原型,虚拟集成和虚拟验证的概念。

具体来说,系统工程是用于解决复杂多学科系统设计的一个流程,复杂系统的开发通常面临着多重约束,比如相关方对于功能和性能的期望,成本预算和进度等等项目要求,以及工程上的可实现性。在软件定义汽车时代,车辆系统除了涉及机械电子控制等领域以外,还引入了计算机视觉信号处理,传感器融合、路径规划等等新的学科。这些功能的出现让车辆的结构和形态有了更多的可能性。
如何在开发的早期有限的信息下,找到一个既满足约束又相对优化的方案,将合理的功能需求分配到软件,需要依赖于系统工程的能力,将不同形态的模型贯穿到你的整个系统的需求、分析、设计、实施和验证的生命周期中,就是所谓的基于模型的系统工程。

前面提到在第一次数字转型过程中,基于模型的设计方法起到了重要作用,那么基于模型的设计和基于模型的系统工程有什么联系?基于模型的设计侧重在软件,而基于模型的系统工程重心之一在进入软件开发之前的阶段,以市场需求、客户需求、法律法规需求作为输入,通过场景分析推导出系统应该具备的功能开展架构设计和功能分配,得到软件的设计需求和硬件的接口规范,再进入基于模型的设计阶段。
另外一个重心是系统的集成和验证,以模型为载体,系统过程扩展了基于模型设计的范畴,构建起从系统需求、系统架构到软件设计、软件实现、系统集成以至于系统运营的整个系统生命周期的一个数字化线索。

软件工厂的首要目标是持续交付高质量的软件产品。除软件本身还应包括文档、报告、工件等产出。对于回归测试、度量统计、报告生成等高频任务也应该实现自动化。同时应该利用尚未自动化的流程探索阶段尽量查找并填补标准规范中的空白。因此关键问题在于:什么时候在软件工厂引入高频任务并自动化运行这些任务?

应用基于模型设计的典型流程是首先导入设计需求,创建软件架构,以图形化建模的方式替代传统的文档设计规范,这种规范更易理解,也可以仿真。随着越来越多的设计细节加入到可执行规范中,我们可以得到用于产品及代码生成的模型。

经过仿真测试后,这样的模型可以生成代码并编译下载到目标硬件中进行执行。在流程中仿真是关键,我们用它来填补需求验证的一个空白,但是仅仅如此还是不够的。对于安全关键应用的高质量软件要求,我们要采取更为严格的方法进行补充,并开展一些其他的验证活动。这些活动包括建立需求与软件架构,软件模块之间的追溯关系,对作为可执行规范的模型进行评审和静态分析,对生成的代码进行背靠背测试,最后在单元级的验证完成后,需要进行软件的集成测试。

数据驱动的首要任务是是集成人工智能算法,并进一步赋能原有的系统。这中间有一些挑战:
如何将AI与已有技术进行集成?
原始数据的复杂度和质量问题怎么解决?
现有人员缺乏人工智能算法开发的相关技能怎么解决?
对于具体的组织来说,数据驱动成功的标志就是能够交付给市场基于AI技术的产品和服务。因此数据驱动要面对的问题是企业如何将真实系统和AI进行连接?如何让数据科学家和工程师进行一个有效的协同工作?

对此MathWorks建议让工程师和数据科学家将AI整合到整个系统设计的一个工作流程中,可以分成4个主要阶段:数据准备、算法建模、仿真测试以及算法部署。
在数据准备期间,清洗和预处理非常重要。如果我们没有足够的数据,那么可以使用仿真来生成。在这个阶段具有专业领域知识的工程师是处理这些数据的最佳人选。
在模型的设计和调试阶段,自动化的训练步骤可以提供可视化的方法来理解和编辑深度的学习网络。也可以借助特定的平台来加速训练,并与主流的AI网络保持一个互联互通。算法开发完成以后,需要将它整合到更大的一个系统中进行仿真测试,让基于AI的感知算法与定位路径规划,还有控制算法进行协同。
在最后的算法部署阶段,对于AI算法要采用自动代码生成技术,消除手动编码的错误,同时采用灵活配置的方法,实现面向从嵌入式到企业系统或者云端的不同平台的一个灵活部署。这样的一个端到端的工作流是实现数据驱动落地的根基。

虚拟车辆可以让功能设计者在几分钟内以适当的详细程度集成系统、软件和数据创建出一辆虚拟车辆,用于对功能进行仿真,从而开展原型设计、虚拟标定和虚拟验证。
虚拟车辆实现的一个核心是仿真集成平台,这个平台应该具备丰富的开箱即用功能,同时要保持一个接口开放性,以便进行定制扩展,再利用集成仿真来实现最大程度的一个流程前置。
目前在汽车行业最大的趋势是软件架构的变化。以前的软件是面向信号的软件架构,一个车上有很多个控制器,现在这个可能要发生变化。从软件架构来讲,要通过面向信号变成面向服务这样一个架构。也就是我们经常提到SOA架构,从我们汽车嵌入式软件开发来讲,这是一个最大的趋势,我看到的情况是这样。
SOA的优势可以这么说,以前面向信号的软件架构已经是没法应对目前这种软件的复杂度了。SOA它把软件模块应用化了,我们可以大概理解成以后的软件模块不像以前,以前我们会把很多模块放在一起,最后编译成一个文件下载到控制器上去。以后我们会把一些软件模块应用化,变成一个个应用APP,就像我们手机APP一样。对于开发每个APP来讲,它的复杂度和开发难度会大大降低。APP之间实现一个服务接口,他们可以做到模块之间的松耦合。
相关文章:
【分享】MathWorks中国汽车年会:“软件定义汽车”
从软件赋能到软件定义,汽车行业不仅需要解决诸如错误发现滞后带来的高昂代价、功能融合所需的跨学科知识、功能安全与实施成本之间的权衡等老问题,也面临着新的挑战:软件复杂度的不断提升、利用数据驱动创造价值、人工智能的引入和实现、数字…...
RNN:Long Short-term Memory(中)
目录 1 LSTM 的简图 2 LSTM 的整体结构 2.1 结构图 2.2 流程图 3 举个例子 3.1 简单看看 3.2 代入 LSTM 4 Original Network v.s. LSTM 5 细看 LSTM 原视频:李宏毅 2020:Recurrent Neural Network (Part I) 1 LSTM 的简图 LSTM 实际…...
C# .NET读取Excel文件并将数据导出到DataTable、数据库及文本
Excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。C#语言借助.NET Framework和各种库的广泛功能,能够进行高效的数据操作。利用C#读取Excel文件并将数据写入数据库和DataTable,或者将数据用于其他目的&…...
移动云助力智慧交通数智化升级
智慧交通是在整个交通运输领域充分利用物联网、空间感知、云计算、移动互联网等新一代信息技术,综合运用交通科学、系统方法、人工智能、知识挖掘等理论与工具,以全面感知、深度融合、主动服务、科学决策为目标,推动交通运输更安全、更高效、…...
【Vue技巧】vue 阻止a链接跳转事件的两种方法
ChatGPT4.0国内站点,支持设计稿转代码:https://www.atalk-ai.com/ 在Vue中,如果你想阻止<a>链接的默认跳转事件,你可以使用click.prevent或者click配合.prevent修饰符。这样做可以阻止链接的默认行为,即不会跳转…...
006.Oracle事务处理
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...
成功解决VScode进入到内置函数中调试
主要有两个关键步骤, 第一步 将launch.json中的"justMyCode"设为false 可通过使用ctrlshiftP搜索lauch.json找到次文件 如果找不到的话,可点击debug按钮,然后找到点击create a launch.json file创建 创建得到的launch.json如下&am…...
29、WEB攻防——通用漏洞SQL注入增删改查盲注延迟布尔报错
文章目录 盲注增删改查 盲注 概念:在注入过程中,获取的数据不能回显至前端页面,此时我们需要利用一些方法进行判断或尝试,这个过程被称为盲注。 解决:常规的联合查询注入不行的情况。 分类: 基于布尔的SQ…...
【设计模式 行为型】策略模式
它允许在运行时根据需要选择算法的行为。该模式通过将算法封装成独立的类,使得它们可以相互替换,而不影响使用算法的客户端代码。 策略模式主要包含以下角色: 环境(Context):环境对象持有一个策略对象的引…...
JVM:双亲委派机制类加载器
JVM:双亲委派机制 1. 例子2. 类加载器总结3. 类加载过程4. 双亲委派模型的执行流程:5. 双亲委派模型的好处 1. 例子 Java运行时环境有一个java.lang包,里面有一个ClassLoader类 我们自定义一个String类在java.lang包下,下面的…...
从入门到精通:ThinkPHP6异步请求的全面解析!
在ThinkPHP6中使用异步请求 在Web应用程序的开发中,经常会需要使用异步请求。异步请求能够在后台执行而不干扰页面的其他操作,提高了用户的体验。而在ThinkPHP6框架中,也提供了方便的异步请求方式,本文将详细介绍如何在ThinkPHP6…...
C++写csv文件
C写csv文件 其中有一个点需要注意,csv芬里尔之间要用逗号隔开 p_str_filename "D:\\1.csv"; int writelog(string p_str_filename, double p_double[]) {SYSTEMTIME timeCur;GetLocalTime(&timeCur);char t_logbuffer[1024] { 0 };sprintf(t_logbu…...
将Matlab图窗中的可视化保存为背景透明的矢量图
将matlab绘制的结果复制为矢量图时,去除背景的操作如下: 先打开/绘制图形窗口(不要关闭)在命令行终端输入axis off关闭坐标系继续在命令行终端分别输入: ax gca; copygraphics(ax,ContentType,vector,BackgroundColor,none); 此时ÿ…...
希尔(Shell)排序
文章目录 希尔排序的基本思想本质增量(间隔)的选取 希尔排序的时间复杂度希尔排序代码实现希尔排序的稳定性 希尔排序的基本思想 将要排序的序列按一定间隔(增量)分组,将每一组的数据按插入排序进行排序,再…...
【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案
Qt Creator 下载地址(含历史版本):https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1,安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料(Qt C…...
树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动
树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动 PreparationSynaptics APT RepositoryInstall evdiInstall displaylink-driver Preparation lsusb -d 17e9: sudo apt-get install dkmsSynaptics APT Repository wget https://www.synaptics.com/sites/default/files/Ubuntu/po…...
SpringBoot 实现 PDF 添加水印有哪些方案
SpringBoot 实现 PDF 添加水印有哪些方案 方式一:使用 Apache PDFBox 库方式二:使用 iText 库方式三:用 Ghostscript 命令行方式四:Free Spire.PDF for Java方式五:Aspose.PDF for Java 简介 PDF(Portable …...
【blender渲染】blender流体模拟基础
各位新年好哇,最近在做demo的时候,为了更好的效果,开始摸索一点离线渲染的东西。像这种后续渲染的处理,由于3ds max是更偏向于建模的dcc,有点不那么好使(没有说看不起vray的意思哈)。 像在实时…...
小白进阶之字符串处理
#include <cstdio> #include <cstring> int main() {char str[105];int count0,len0;scanf("%s",str);//输入字符lenstrlen(str);//求字符长for(int i0;i<len;i){if(str[i]A)//匹配计数count;}printf("%d",count); }#include <cstdio>…...
自定义Dubbo RPC通信协议
前言 Dubbo 协议层的核心SPI接口是org.apache.dubbo.rpc.Protocol,通过扩展该接口和围绕的相关接口,就可以让 Dubbo 使用我们自定义的协议来通信。默认的协议是 dubbo,本文提供一个 Grpc 协议的实现。 设计思路 Google 提供了 Java 的 Grpc…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
