Aspice作为车载软件过程中,关注于功能场景定义(function definition)、架构定义(System Architecture)、系统设计(System Design)、产品设计(Product Design)几个大的方面。而下一代智能驾驶系统需要面向服务进行相应的功能设计和开发,实现软硬件解耦。这种开发方式将对整个智能驾驶来说产生颠覆性的影响,比如高性能计算平台HPC包含多核异构处理模式,通过Hypervisor技术实现对硬件抽象,Inter-Core通信技术使多篇和单片多核实现信息互通,计算单元趋于“云计算+中央计算+边缘计算结合等多个方面的变革。如上这些设计原则更多的是基于SOA的架构进行的,这就大大增强了平台的可拓展性,可移植性。
当前更多的主机厂选择在智能驾驶中采用SOA的开发模式,这可以更加快速的实现从底层、中间层到应用层的软件开发,且相对较多的软件只要接口定义得当,就可以实现软件本体和功能的迁移,同时可以大大的降低开发周期和成本。
对于SOA的设计过程来讲,其服务设计原则包括重用、抽象、封装、协调在内的多个层面。比如对于智能驾驶功能开发而言,如果需要多次用到某一逻辑元素比如车道线等环境信息,则应该将车道线检测模块创建为重用(比如封装到Building Block中),则对该车道线检测源(如不同方位的摄像头)进行调整,则由此对车道线检测产生的任何更新改变都会对后续级联的应用实例产生影响。而上层应用软件端对于底层的如何获取车道线,如何处理的细节也不需要深究,这就是实现模块抽象的整个过程。抽象后的逻辑功能需要保证其体系相类似的功能需要集成到一起,比如自动换道功能的控制逻辑可以在自动激活后调用触发换道相关的规划控制模块进行车控。因此,触发换道的规划决策控制逻辑单元可以完全应用于自动换道模块。系统工程师只需要保证定义的接口适用于触发换道已经发布或预定的数据流即可。对于自动驾驶域控单元负责人而言,应该保持逻辑系统结构之间的协调和重用,包含对公共池中的元素排布,对局部域单元中的逻辑构造,跨域之间的资源或模块调度等。
本文将以智能驾驶系统开发设计实例来讲解和分析相应的SOA为基础下的架构设计和软件开发。
适用于SOA架构的ASPICE软件开发过程也是在敏捷开发的模式下进行的系统开发流程。从智能驾驶功能开发层面上讲,基于SOA架构开发模式包括了系统功能、系统架构、软件功能、软件架构几个方面。其中分别由分别称之为产品负责人Product Owner、功能负责人Function Owner、架构负责人Architect Owner、子模块负责人Module Owner的几个角色共同承担。功能设计是搭建功能架构图和依据产品工程师输入的产品需求定义进行功能分解定义,架构负责人则根据整车架构及功能负责人输入的要素信息制定合适的软硬件架构。这里需要说明的是很多情况下,功能负责人和架构负责人往往是同一个人。模块负责人则是根据功能定义编制相应的系统软硬件模块、零部件软硬件模块以实现上层定义的功能需求。各负责人之间的角色定位将在如下分层流程图中进行详细说明。这里我们仅关注V模型中的与SOA相关度较高的设计开发部分,测试验证部分不在本文中进行详述。
项目功能元素(function element)包含与顶层设计相关的不同属性,例如车辆类型、预期市场、项目功能以及功能发布计划等。在实际开发中,这类输出一般是产品策划部门或市场部输出的整车功能开发需求或整车装备需求。本文将以开发智能驾驶系统功能中的点对点自动驾驶NOP为例进行详细的分析说明基于SOA的架构设计是如何应用于自动驾驶系统开发的。
如下图举例中,表示了实现下一代自动驾驶系统NOP场景定义需求。
2、系统架构设计阶段(System Architecture Design)
这个阶段涉及产品能力定义及模块定义。用于描述智能汽车中的用户功能,通过定义相应的函数来指出使用哪些子系统或者零部件具备相应的产品能力(Product Capabilities,PC)并对其进行相应的实例化来实现此功能。
这种称之为产品能力的模块主要是用于定义想要实现该功能模块的传感器或执行器所具备的能力,这也是位于各个时序图上各个节点的能力描述。通常,该产品能力的定义主要由产品工程师牵头,功能所有者、架构师和模块所有者/设计者的跨职能小组共同决定。
产品能力可以被认为是一种高级服务,一些需要在汽车中实现的功能,但它没有描述应该如何实现。产品能力实例是 PC 的简单实例化,可以在平台中拥有 PC 的不同变体。如果需要 PC 的不同变体实例以及在何处使用不同的实例,则模块所有者负责。系统架构师负责定义系统中定义了产品能力PC的不同类型,并确定哪些 PC 需要由跨职能团队才能完成。通过将当前定义的 PC 和其他的需要PC 建立依赖关系,我们可以建模一个完整的功能架构,该功能层级的架构无需研究实际的实现机制。这对于定义需要哪些高级服务 (PC) 以及分配谁(哪个模块)负责实施每个 PC 非常有帮助。
如上过程一般是通过各种图表(包含用例图、序列图、活动图等)来完成的。如下图表示了一种活动图所示意的系统交互方式。
由于在定义过程中还建立了与功能之间的连接,因此我们可以使用该模块来规划需要实现 PC 的顺序,以便我们在每个版本的集成阶段开发出正确的功能。
模块是整个模型甚至整个组织中非常核心的元素。从SOA的架构设计上讲,每个设计的 PC 都被分配到一个并且只有一个模块(或者称之为函数),该模块负责实现 PC,但在整个平台生命周期内维护和发展 PC,规划 PC 的演进步骤,提供路线图等。
PC 定义的功能在 Component 中实现,模块实例可以确保在平台中拥有模块的不同变体。系统架构师负责定义系统中存在哪些模块,但模块所有者负责领导模块内的工作,并负责维护和发展模块。模块所有者还负责是否需要模块的不同变体实例以及在何处使用等。
同时,模块中的相关参数是在对应构建的系统功能规范中实现定义的。
组件是模块的实际设计和实现。组件可以是软件或硬件组件,但在SOA的软件架构中,我们将主要处理软件组件,组件定义了模块需要哪些接口以及提供哪些接口。其中接口将包括SOA架构所要求的服务、属性和事件。在硬件组件上,接口可以是螺孔或电线连接器。
软件包是将部署到特定运行环境时的所有软件组件、清单文件等的集合。
为了实现面向SOA的架构设计和开发过程,需要重点定义。
中央控制单元ECU/处理器Processor/虚拟机Virtual Machine:
一个 ECU 可以由一个或多个处理器组成,一个处理器可以运行一个或多个虚拟机。不必对每个组件进行建模,例如,如果 ECU 仅包含一个处理器,则仅对 ECU 进行建模就足够了。可以将各个软件包部署到如上运行时环境中的任何一个。
定义网络以及连接到它的运行时环境。运行时环境可以由一个或多个网络连接组成,这些网络连接可以是 CAN、CAN FD、以太网、VLAN、LIN 等。
严格说来,底层驱动设计应该属于软件架构设计的其中一个部分,面向底层软件设计部分,通常与顶层软件开发团队不是一伙人,且具有较大区别,该开发过程由顶层软件设计人员对底层软件开发人员单独提出需求及建议。一般的需求包括平台软件总体架构及对相关AUTOSAR标准组件和复杂驱动的调度框架设计、开发和集成要求;内存、非易失性存储、任务、中断等等资源和权限分配;上下电流程和管理的设计;系统运行状态监控、异常处理等功能的设计等方面。
基于SOA软件模型架构的设计过程实际是在研究如何在开发流程中进行软硬件解耦。包括构建不同的分层来隔离硬件与软件功能和服务。例如,将自动驾驶相关的传感器和执行器逻辑与应用程序逻辑分开,则能够在中央系统中分配应用程序,同时保持传感器/执行器尽可能的具体。程序之间可以利用SOA的服务模式实现软件包的调用,传感器和执行器也可以作为组件或模组来进行边缘采购,性能则是集中管控,中央系统可以将战略软件进行分开,这就更容易进行软件模块移植和处理。这一过程实际就是在提高上层应用层软件关键功能的复用性,瞄准软硬件功能与逻辑控制分离。这里需要说明的是,软硬件之间的协调和调度是通过中间件来实现。
从如下图所示,SOA的架构从下至上分别底层驱动功能管理,物理层功能管理,车辆控制服务,面向用户的应用服务,云端远程管理。
底层驱动功能管理:用于实现包含诊断、日志记录、存储管理、驱动管理等相关功能。
物理层功能管理:主要是设置I/O接口将原始传感器数据进行输入,同时也是执行到车端的控制单元(如电机、制动卡钳等);
车辆控制服务:车端控制包含上层ADAS发送的执行指令到控制执行器执行该指令的相应ECU(如控制电机的VCU、HCU或ESP),该车辆控制服务是综合考虑了车身稳定性与动力学反馈模型得出的。
应用层服务:该层服务就是智能驾驶面向用户级别的顶层开发功能,主要用于实现包含传统的智能驾驶功能,比如HWP、NOP、TJP以及ALC等。
云端管理服务:该层服务主要是面向远程监控,远程控制,大数据存储等特殊场景。通常该服务需要基于4G/5G网络进行远程连接。
人机交互管理功能:人机交互管理功能一般是针对不同的车型呈现出不同的模式的,因此,这一块一般是独立于SOA的功能架构。SOA通常只涉及底层对车辆控制逻辑,对于平台化车型功能开发来说,这一块是无法为用户所感知的。而HMI的显示设置则是用户能够真切感知和控制的,因此,不同车型肯定是有极大的不同之处。因此,从协议上分析不难看出,SOA内部的网络架构一般是基于以太网为基础的交互方式,采用Some/ip的协议进行通信控制。而如果在平台化车型的开发过程中,HMI这一块的通常仍然按照原始CAN/CANFD信号模式的通信协议进行交互控制。这么做的原因是,智能驾驶的HMI行为比核心应用功能更容易改变,特别是在不同车型开发后期通常会选择不同的显示和交互方式。同时,由于开发核心软件和HMI设计需要不同的能力技能,因此,将HMI功能与其他应用层软件功能分离,为了实现这一点,一般需要使用Model-View-Controller,用户输入由Controller处理,Controller用于解释用户的意图并操作模型。
随着车载以太网技术的日益成熟,国内大部分OEM都已经着手SOA的设计工作,并将以太网通信矩阵生成ARXML文件,用于项目前期的网络行为仿真和后期测试验证。对于已经完成架构搭建的SOA来讲,需要将其建模后的成品导入到软件团队进行服务实现。其过程包含:以Some/Ip协议导入Service ARXML,导入后新增ETH、TCP/IP、Some/IP模块(BSW工程),建立与Service Handler SWC(应用层)中Port Interface连接,为所有Service Handler SWC增加可运行时间,定义Windows Service Handler SWC 和Feature SWC到Simulink/Stateflow。通过符合Autosar的ARXML和Simulink进行交互,将由软件开发工程师继续进行算法设计并自动生成代码。
本文从SOA软件架构模型的构建角度出发讲解了相应实现过程原理,利用了基于模型、集成式的可视化开发工具PREEvision进行了智能汽车行业及相关领域E/E架构开发并支持以太网SOA的架构开发设计,本文以介绍SOA架构设计模型为基础展示了如何在Enterprise Architect中进行SOA建模。同时,以系统工程师的角度说明如何利用Enterprise Architect构建SOA系统及软件架构设计、功能设计Function Design 和模块设计Module Design。对于SOA在整个智能驾驶系统设计原理有个清晰的把控。