自动驾驶研发中的软件架构问题
bigegpt 2025-03-06 12:19 7 浏览
来源:知乎
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
相关推荐
- 程序员请收好:10个非常有用的 Visual Studio Code 插件
-
一个插件列表,可以让你的程序员生活变得轻松许多。作者|Daan译者|Elle出品|CSDN(ID:CSDNnews)以下为译文:无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人...
- PADS在WIN10系统中菜单显示不全的解决方法
-
决定由AD转PADS,打开发现菜单显示不正常,如下图所示:这个是由于系统的默认字体不合适导致,修改一下系统默认字体即可,修改方法如下:打开开始菜单-->所有程序-->Windows系统--...
- 一文讲解Web前端开发基础环境配置
-
先从基本的HTML语言开始学习。一个网页的所有内容都是基于HTML,为了学好HTML,不使用任何集成工具,而用一个文本编辑器,直接从最简单的HTML开始编写HTML。先在网上下载notepad++文...
- TCP/IP协议栈在Linux内核中的运行时序分析
-
本文主要是讲解TCP/IP协议栈在Linux内核中的运行时序,文章较长,里面有配套的视频讲解,建议收藏观看。1Linux概述 1.1Linux操作系统架构简介Linux操作系统总体上由Linux...
- 从 Angular Route 中提前获取数据
-
#头条创作挑战赛#介绍提前获取意味着在数据呈现在屏幕之前获取到数据。本文中,你将学到,在路由更改前怎么获取到数据。通过本文,你将学会使用resolver,在AngularApp中应用re...
- 边做游戏边划水: 基于浅水方程的水面交互、河道交互模拟方法
-
以下文章来源于腾讯游戏学堂,作者Byreave篇一:基于浅水方程的水面交互本文主要介绍一种基于浅水方程的水体交互算法,在基本保持水体交互效果的前提下,实现了一种极简的水面模拟和物体交互方法。真实感的...
- Nacos介绍及使用
-
一、Nacos介绍Nacos是SpringCloudAlibaba架构中最重要的组件。Nacos是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态DNS...
- Spring 中@Autowired,@Resource,@Inject 注解实现原理
-
使用案例前置条件:现在有一个Vehicle接口,它有两个实现类Bus和Car,现在还有一个类VehicleService需要注入一个Vehicle类型的Bean:publicinte...
- 一文带你搞懂Vue3 底层源码
-
作者:妹红大大转发链接:https://mp.weixin.qq.com/s/D_PRIMAD6i225Pn-a_lzPA前言vue3出来有一段时间了。今天正式开始记录一下梗vue3.0.0-be...
- 一线开发大牛带你深度解析探讨模板解释器,解释器的生成
-
解释器生成解释器的机器代码片段都是在TemplateInterpreterGenerator::generate_all()中生成的,下面将分小节详细展示该函数的具体细节,以及解释器某个组件的机器代码...
- Nacos源码—9.Nacos升级gRPC分析五
-
大纲10.gRPC客户端初始化分析11.gRPC客户端的心跳机制(健康检查)12.gRPC服务端如何处理客户端的建立连接请求13.gRPC服务端如何映射各种请求与对应的Handler处理类14.gRP...
- 聊聊Spring AI的Tool Calling
-
序本文主要研究一下SpringAI的ToolCallingToolCallbackorg/springframework/ai/tool/ToolCallback.javapublicinter...
- 「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作
-
一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockers...
- 在MySQL登录时出现Access denied for user ~~ (using password: YES)
-
Windows~~~在MySQL登录时出现Accessdeniedforuser‘root‘@‘localhost‘(usingpassword:YES),并修改MySQL密码目录适用...
- mysql 8.0多实例批量部署script
-
背景最近一个项目上,客户需要把阿里云的rdsformysql数据库同步至线下,用作数据的灾备,需要在线下的服务器上部署mysql8.0多实例,为了加快部署的速度,写了一个脚本。解决方案#!/bi...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- skip-name-resolve (63)
- httperror403.14-forbidden (63)
- logstashinput (65)
- hadoop端口 (65)
- dockernetworkconnect (63)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)