自动驾驶研发中的软件架构问题
bigegpt 2025-03-06 12:19 9 浏览
来源:知乎
SW Architecture
软件架构(SA,software architecture)是上世纪90年代提出的,它对复杂的软件系统进行结构化,并给出其高级的系统描述。
AUTOSAR
以宝马汽车为首的几家OEM与一些Tier-1成立
AUTOSAR(AUTomotive Open System ARchitecture)联盟,是想为汽车工业开发一套支持分布式的、功能驱动的汽车电子软件开发的架构标准化方案。
基础软件层则被抽象为四级(如图):
- 1. 服务层(Services Layer)
- 2. ECU抽象层(ECU Abstraction Layer)
- 3. 微控制器抽象层(Microcontroller Abstraction Layer)
- 4. 复杂设备驱动(Complex Device Drivers)
AUTOSAR提供了一个三层的软件结构:
- 1. 基础软件层 (BSW):标准化的软件模块,没有任何功能任务,只提供运行上层功能部分的必要服务;
- 2. 运行环境(RTE):中间件,从网络拓扑提取出来的,支持在应用软件部件之间或者应用软件部件与基础软件层之间ECU内部/之间的信息交换。
- 3. 应用层:应用软件部件,和RTE进行交互。
Adaptive AUTOSAR
Adaptive AUTOSAR是一种ARA(AUTOSAR Runtime for Adaptive Applications)的标准化接口,如图所示。它包括两个部分:操作系统功能的接口和通信中间件,后者处理Adaptive AUTOSAR服务和各种本地/远程应用之间的数据交换。这些接口允许OEM实现自动驾驶,在线OTA (over-the-air)软件升级,物联网(IOT, Internet of Things),流媒体等服务。
与经典AUTOSAR相比,这种自适应平台可以在ECU运行时实现服务-客户的动态链接,为此需要提供交通基础设施,云服务器,微处理器(如ARM)和HPC(GPU)硬件等。
执行管理(Execution Management)功能群负责ECU的启动和停止,并保持应用程序状态。和平台健康管理(Platform Health Management)一起,为那些启动降解(degradation)或者类似策略的应用程序维护必要的资源,这样ECU可根据定义好的策略在危机时刻作出反应。
通信中间件实现在本地应用程序之间以及本地应用程序和其他ECU中应用程序之间的服务定向通信,这个包括了AUTOSAR Adaptive 的服务接口。
ASAM (Association for Standardization of Automation and Measuring Systems)
。。。。。。
V-Model for Autonomous Driving software
如图是软件开发V-模型的流程图:汽车界已经采用这种软件开发模型很久了,也是工业标准MISRA(The Motor Industry Software Reliability Association)C编程规范的参考模型(有20年的历史),同时也是构建ISO 26262标准的参考模型。
V-模型代表了一种软件构建加上可追溯性的验证(traceability & verification/validation)的条理化进程;V-模型的左侧是从需求-设计-实现的途径,而其中的每一步,可以分成多个子系统,彼此并行地看待(系统需求只有一组,但每个子系统可以有不同的设计);V-模型的右侧是从小组件到系统级别的评估,迭代地可追溯性验证(trace & verify/validate)越来越大的系统部分。
根据V-模型看,自动驾驶的测试存在一些挑战性情况:
- 1. 驾驶员不在环情况;
- 2. 过于复杂的需求;
- 3. 采用了非确定性算法;
- 4. 采用了归纳学习算法;
- 5. 需要故障-安全/-可操作的实现。
解决这些问题,大家提出的一些可用方法包括:
- 1. 通过依次松弛的操作场景的分阶段部署法;
- 2. 采用一种“监控-驱动”结构,将最复杂的自主功能和较为简单的安全功能分开;
- 3. 故障注入以得到更有效的边界情况(edge case)测试 。
aSPICE
在汽车行业有两个公认的软件设计流程标准,一个是aSPICE(Automotive Software Performance Improvement and Capability dEtermination),另一个是ISO 26262的软件部分。
下图是aSPICE的流程图。aSPICE源自一般SPICE(ISO/IEC 15504)标准,它仍然建立在V-模型之上,这意味着从需求到源代码的每个过程都有相应的测试。按照“V-模型”,其左侧的开发过程如下:
- 1) 客户的要求;
- 2) 将其映射到系统要求;
- 3) 将需求分解为逻辑服务,这包括设计决策;
- 4) 对于每个软件服务,从系统要求中获取软件要求;
- 5) 将软件需求细分为单元,管理可用资源(内存,CPU时间等);
- 6) 设计并实施每个软件单元。
它右侧的相应测试过程如下:
- 1) 设计的单元测试;代码是否符合设计?是否满足了非功能性要求(如不崩溃)?
- 2) 软件架构的集成测试;作为服务的单位组成是否仍然有效?
- 3) 软件认证测试软件要求;服务是否符合其要求?
- 4) 系统集成测试系统架构;将所有服务组合到整个系统中,它是否有效?
- 5) 系统认证测试系统要求;整个系统/汽车是否符合要求?
- 6) 验收测试由客户完成。
除了这些流程外,aSPICE还要支持和管理整个流程,包括存档和制定计划等内容。使用ASPICE可实现敏捷开发,灵活的方法会从少的要求开始,但仍执行整个V-模型过程。
ASPICE评估导致从“未实现”(N)到“完全实现”(F)0-5级的评级:
- a) 0级:流程最多可以“部分”(P)实现ASPICE定义的工作产品(源代码,需求,体系结构描述,测试报告等)。
- b) 1级:“很大程度上”(L)能够生产指定的工作产品。
- c) 2级:完全有能力生产工作产品,并且可以通过实现目标,检查进度以及在错过目标时作出反应。
- d) 3级:拥有中央标准,而这些都要在工作和项目中遵循。
- e) 4-5级:实际上不重要,目标是建立组织流程,更“可预测”和“创新”。
ISO 26262 SOFTWARE DEVELOPMENT PROCESS IN VEHICLE
ISO 26262(Part 6)依照V-模型也给出了一个修正的软件开发流程图如下:
这个文档规定了汽车应用软件级产品开发的要求,包括:
- - 软件级产品开发的一般主题;
- - 软件安全要求的规范;
- - 软件架构设计;
- - 软件单元设计和实现;
- - 软件单元验证;
- - 软件集成和验证;和
- - 测试嵌入式软件。
它还规定了与使用可配置软件相关的要求。
重点的是有关软件架构设计的一些表格,比如如下的表1和表2:
表 1 ISO 26262 软件架构设计准则
表2 ISO 26262 软件架构级别的误差检测机制
42010-2011 - ISO/IEC/IEEE Systems and software engineering -- Architecture description
ISO 26262 SW Configuration and Packaging Process
EB SW Architecture for Autonomous Driving
ADTF (Automotive Data and Time-Triggered Framework)
Electronics Architecture and Software Technology - Architecture Description Language (EAST-ADL)
Nvidia Driveworks
车载操作系统
车载操作系统必然是实时操作系统(real time operating system,RTOS),特别是对自动驾驶的支持(其他方面还有车载娱乐,车联网和中控显示屏)。
RTOS是旨在为实时处理数据的应用程序提供服务而且通常没有缓冲区延迟的操作系统。处理时间要求(包括任何OS延迟)0.1秒或更短的时间。
实时系统要求处理必须在规定的时间内完成,否则系统将失败。它们要么是事件驱动的,要么是分时的。事件驱动系统根据优先级在任务之间切换,而时间共享系统根据时钟中断切换任务。大多数RTOS使用先发制人的调度算法。
RTOS具有用于调度(scheduling)的高级算法,调度器的灵活性可实现更广泛的流程优先级编排(orchestration)。实时操作系统的关键因素是最小的中断延迟和最小的线程切换延迟;实时操作系统的重要性在于响应速度,而不是执行的工作量。
ROS
Robot Operating System (ROS) 是在机器人领域一个成熟和灵活的控制编程框架。整个ROS系统可以是分布式计算结构,即各个计算机执行控制过程中的各个部分,但作为一个实体(entity)即机器人在行动。
ROS系统是适合自动驾驶汽车的,原因是已经有大量的相关开源代码,可视化工具齐全,所以容易在ROS环境中开启一个自动驾驶项目。ROS存在的缺点是:
- 1. 单点失败. 所有ROS应用,完全依赖于一个软件组件roscore,处理ROS不同部分之间的所有协调。
- 2.不安全性. 目前ROS不支持阻止第三方进入ROS网络的安全机制,也不读取节点之间的通信。
如图给出ROS的工作方式,整个系统由一些节点组成,而一个节点通过发布/订阅(publicate/subscribe)的方式与其他节点进行通信。比如,图中一个传感器作为ROS的一个节点,它可以以信息流的方式发布其获得的信息,发布的信息可以被其他节点如感知,规划或者控制单元获得。
BlackBerry QNX Neutrino Realtime OS
QNX Neutrino是商业实时操作系统,开发该系统的公司已被手机公司黑莓并购。QNX采用微核设计和模块化架构,如图是QNX的结构图。
QNX Neutrino实时操作系统实现了应用级的高效性能和确定性响应时间。采用线程优先级继承消除了优先级反转(priority inversion)问题。
此外,QNX Neutrino支持在虚拟环境下的多核方案,比如Symmetric multiprocessing (SMP),Asymmetric multiprocessing (AMP),Bound multiprocessing (BMP),具有固有的可扩展性。
PolySync
PolySync Core是一个自主操作系统,由中间件(middleware)和一组很常见的自动驾驶应用软件API服务(传感器融合、车辆控制和路径规划等)组成。通过将应用层与操作系统和硬件分离,PolySync Core具有一致性和可移植性,可构建自动驾驶应用程序。如图是PolySync结构图,可以看到支持的传感器有激光雷达、雷达、摄像头和超声波雷达。
在PolySync,有一个底层控制子平台,叫开源车辆控制(Open Source Car Control,OSCC),是软硬件设计的集合体。它可以对汽车进行计算机控制,以推动自动驾驶汽车技术的发展。
OSCC能够向车辆发送控制命令,从车辆的CAN总线读取控制消息,并转发当前车辆控制状态的报告,如转向角和车速。通过各种传感器,如方向盘的扭矩传感器(torque sensor)、节气门(throttle)的位置传感器和刹车(brake)的位置传感器,OSCC给车辆各部件的ECU能够 n发出控制命令。
“Treat autonomous navigation as a software problem”
Stanley from Stanford U. 2005
Junior from Stanford U. 2007
相关推荐
- 方差分析简介(方差分析通俗理解)
-
介绍方差分析(ANOVA,AnalysisofVariance)是一种广泛使用的统计方法,用于比较两个或多个组之间的均值。单因素方差分析是方差分析的一种变体,旨在检测三个或更多分类组的均值是否存在...
- 正如404页面所预示,猴子正成为断网元凶--吧嗒吧嗒真好吃
-
吧嗒吧嗒,绘图:MakiNaro你可以通过加热、冰冻、水淹、模塑、甚至压溃压力来使网络光缆硬化。但用猴子显然是不行的。光缆那新挤压成型的塑料外皮太尼玛诱人了,无法阻挡一场试吃盛宴的举行。印度政府正...
- Python数据可视化:箱线图多种库画法
-
概念箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)...
- 多组独立(完全随机设计)样本秩和检验的SPSS操作教程及结果解读
-
作者/风仕在上一期,我们已经讲完了两组独立样本秩和检验的SPSS操作教程及结果解读,这期开始讲多组独立样本秩和检验,我们主要从多组独立样本秩和检验介绍、两组独立样本秩和检验使用条件及案例的SPSS操作...
- 方差分析 in R语言 and Excel(方差分析r语言例题)
-
今天来写一篇实际中比较实用的分析方法,方差分析。通过方差分析,我们可以确定组别之间的差异是否超出了由于随机因素引起的差异范围。方差分析分为单因素方差分析和多因素方差分析,这一篇先介绍一下单因素方差分析...
- 可视化:前端数据可视化插件大盘点 图表/图谱/地图/关系图
-
前端数据可视化插件大盘点图表/图谱/地图/关系图全有在大数据时代,很多时候我们需要在网页中显示数据统计报表,从而能很直观地了解数据的走向,开发人员很多时候需要使用图表来表现一些数据。随着Web技术的...
- matplotlib 必知的 15 个图(matplotlib各种图)
-
施工专题,我已完成20篇,施工系列几乎覆盖Python完整技术栈,目标只总结实践中最实用的东西,直击问题本质,快速帮助读者们入门和进阶:1我的施工计划2数字专题3字符串专题4列表专题5流程控制专题6编...
- R ggplot2常用图表绘制指南(ggplot2绘制折线图)
-
ggplot2是R语言中强大的数据可视化包,基于“图形语法”(GrammarofGraphics),通过分层方式构建图表。以下是常用图表命令的详细指南,涵盖基本语法、常见图表类型及示例,适合...
- Python数据可视化:从Pandas基础到Seaborn高级应用
-
数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...
- Python 数据可视化常用命令备忘录
-
本文提供了一个全面的Python数据可视化备忘单,适用于探索性数据分析(EDA)。该备忘单涵盖了单变量分析、双变量分析、多变量分析、时间序列分析、文本数据分析、可视化定制以及保存与显示等内容。所...
- 统计图的种类(统计图的种类及特点图片)
-
统计图是利用几何图形或具体事物的形象和地图等形式来表现社会经济现象数量特征和数量关系的图形。以下是几种常见的统计图类型及其适用场景:1.条形图(BarChart)条形图是用矩形条的高度或长度来表示...
- 实测,大模型谁更懂数据可视化?(数据可视化和可视化分析的主要模型)
-
大家好,我是Ai学习的老章看论文时,经常看到漂亮的图表,很多不知道是用什么工具绘制的,或者很想复刻类似图表。实测,大模型LaTeX公式识别,出乎预料前文,我用Kimi、Qwen-3-235B...
- 通过AI提示词让Deepseek快速生成各种类型的图表制作
-
在数据分析和可视化领域,图表是传达信息的重要工具。然而,传统图表制作往往需要专业的软件和一定的技术知识。本文将介绍如何通过AI提示词,利用Deepseek快速生成各种类型的图表,包括柱状图、折线图、饼...
- 数据可视化:解析箱线图(box plot)
-
箱线图/盒须图(boxplot)是数据分布的图形表示,由五个摘要组成:最小值、第一四分位数(25th百分位数)、中位数、第三四分位数(75th百分位数)和最大值。箱子代表四分位距(IQR)。IQR是...
- [seaborn] seaborn学习笔记1-箱形图Boxplot
-
1箱形图Boxplot(代码下载)Boxplot可能是最常见的图形类型之一。它能够很好表示数据中的分布规律。箱型图方框的末尾显示了上下四分位数。极线显示最高和最低值,不包括异常值。seaborn中...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- linux安装minio (74)
- ubuntuunzip (67)
- vscode使用技巧 (83)
- secure-file-priv (67)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)