基于模型的驾驶辅助系统设计与实现
2021-12-10郝玉锴文圣丰
郝玉锴,文圣丰,吴 云,吴 姣
(1.中国航空工业集团公司西安航空计算技术研究所,陕西 西安 710115;2.西安电子科技大学计算机学院,陕西 西安 710071)
1 引言
当前,电子信息技术、车联网技术、人工智能技术等纷纷进入汽车制造行业,汽车的智能化发展已成为主要方向,是推进汽车工业发展的重要力量。汽车产品正向智能化方向转变,智能汽车人机协同是一个迅速发展的方向[1]。智能汽车人机协同控制由感知、决策和执行三个层面构成,主要研究内容包括外部环境感知、内外信息融合、高精度地图与定位、智能决策与规划、控制执行、信息安全等技术[2]。由于具有缩短研发周期、提高产品质量、增加可移植性的特点,基于模型的系统工程思想在汽车系统研发中已经得到广泛的使用。
基于模型的软件开发(Model-Based Software Development)是一种新颖的软件开发的方法,原则是在系统工程的维度使用可视化建模语言构建系统模型并将其作为设计的基础,在过程中通过不断对系统模型进行的细化和测试来消除其中的错误和缺陷,进行系统的设计和验证,以保障系统设计的正确性和对设计需求的全部覆盖[3-4]。
SCADE是一种高安全的嵌入式系统开发环境,运用了Correct by Construction的概念,开发环境覆盖了软件开发过程中从最初需求到最终可执行代码和验证测试的整个流程[5]:需求模型、模型检查、模型仿真、形式化验证、代码自动生成、以及文档自动生成等,可以有效提高开发效率,解决安全性要求。SCADE在汽车电子、轨道交通、航空航天等领域均有着广泛的应用,文献[6]介绍一种轨道交通领域的系统仿真平台,文献[7]使用SCADE实现一种地铁测速测距系统,文献[8]实现一种联锁系统。文献[9]通过SCADE软件编写控制逻辑,实现一种车身控制器,但仅使用了SCADE的功能模型开发功能,未使用基于模型的软件开发方式进行设计和验证。
本文对基于模型的软件开发特点和SCADE高安全嵌入式系统开发的主要工作流程进行研究,使用基于模型的软件开发方式对一种汽车自动驾驶辅助系统进行了设计与实现,包括架构设计、功能模型设计、用户界面设计以及联合仿真和验证测试,并生成相应软件文档和代码及可执行文件,完成整个系统工程化的过程。
2 基于模型的系统工程
2.1 基于模型的开发特点
基于模型的软件开发使用专用开发环境,融合统一了设计、开发和测试的过程,可以降低研发成本,缩短研发周期,减少软件缺陷[10]。开发过程围绕整个系统模型,通过测试验证,不断进行细化、分解和复用,暴露和解决软件缺陷,提高版本迭代速度[11],同时使用代码自动生成技术消除人为编写代码过程中可能引入的错误。
2.2 基于模型开发过程
2.2.1 图形化建模
不同于传统的代码编写,基于模型的开发方法通过数据流图和状态机图两种图形化的建模方式来实现软件开发,使得软件开发人员更关注软件实现。数据流图和状态机图都具有严格的数学语义,可以保证模型设计精确、完整和无二义,并且图形化编辑方式有助于系统架构设计人员同软件具体实现人员之间的直接交流[12]。
2.2.2 仿真
在完成图形化建模后,开发人员通常需要使用仿真器这种调试工具进行从单个模块开始直到整个系统的模型仿真。仿真过程中可以设置中断条件和中断点,查看输入输出数据和内部的变量,记录和快进、快退仿真的场景[13],还可以对特定数量感兴趣的信号变化进行检查。
2.2.3 嵌入式代码的自动生成
在完成模型仿真和形式验证以保证模型的正确性以后,基于模型的开发方法可以面向工程自动生成满足一系列安全性特征的ANSI C或Ada 83/95语言的嵌入式软件源代码。使用工具自动生成的源代码必然符合编码标准,比手写代码更易于开发人员进行阅读和维护[14]。
2.3 工程化应用
基于模型的开发方法可以比较方便的与软件工程中常用的其它工具进行桥接,使之与软件工程化过程连接更加紧密。例如可以与需求管理工具DOORS进行桥接,把模型自动输入到DOORS环境中进行需求分析和追踪,可以与配置管理工具进行桥接,常用的如Telelogic Synergy,MERANT PVCS等,方便导入工具进行软件配置管理。
3 自动驾驶辅助系统设计
3.1 系统构成
自动驾驶辅助系统附着于汽车系统之上,由智能控制板、汽车操作面板和一些输入输出设备构成,用于辅助驾驶员自动操作车辆[15],如图1所示。
图1 自动驾驶辅助系统构成
自动驾驶辅助系统具体包含的组成部分和各自的功能如表1所示。
表1 自动驾驶辅助系统构成表
3.2 架构建模
架构建模的主要工作是要完成系统的软件架构设计,在基于模型的开发方法中,系统工程师和软件工程师可以在同一构架下工作,从而避免重复劳动以及系统结构和软件行为定义之间的偏差。SCADE Architect是一个用于系统设计和建模的集成开发环境,基于SysML和Eclipse标准,可以进行结构系统建模和架构验证,具有与软件子系统组件的同步的特点。
根据上述2.1节所述系统构成,建立架构模型如图2所示。
图2 自动驾驶辅助系统架构模型
3.3 模型开发
3.3.1 功能模型
自动驾驶辅助系统功能模型采用SCADE Suite完成,Suite基本模块由Suite Advanced Modeler(高级建模器)、SCADE Suite KCG(SCADE代码生成器),以及SCADE Suite Documentation Generator(SCADE模型设计文档生成器)组成。
根据系统需求,自动驾驶辅助系统共设计21个功能模型[16],各个模型之间的调用关系如图3所示。
图3 自动驾驶辅助系统模型设计和调用关系
Suite使用数据流图、状态机图进行软件模型的详细设计,分别适合于连续系统建模和离散系统建模。
数据流图主要用来实现传感器采样、信号处理、复杂的数学逻辑计算、实现各种算法等功能,使用算术、逻辑、时序、条件等操作符,把节点作为功能单元,相互组合形成层次结构,使用图形的方式建立软件模型。图4是自动驾驶辅助系统入口数据流图,根据2.2节所述系统架构模型定义的输入输出接口,实现系统的主控制逻辑。图中“>—”表示输入数据接口,“—>”表示输出数据接口,方框内为封装的子模型。
图4 自动驾驶辅助系统入口数据流图
状态机图可以直观表现控制流和其中的判断逻辑,状态机有唯一的初始状态,状态中可包含嵌套的状态机和图形化或文本化的数据流,在任一周期,一个状态机内有且只有一个状态能被激活和执行。
图5是自动驾驶辅助系统的驾驶模式状态机图,驾驶模式分为手动驾驶、自动驾驶和外部事件三个状态,由三个方框表示,其中自动驾驶又分为自动驾驶介入和自动驾驶暂停状态,为图中嵌套的两个方框,方框之间连接的有向弧线表示状态的迁移,方框内的内容表示状态的具体执行内容。相比于使用代码实现,状态机图的软件实现方式直观、清晰、方便阅读。
图5 自动驾驶辅助系统驾驶模式状态机图
3.3.2 显示模型
使用Display工具完成汽车操作面板设计,Display是一套灵活的面向高安全嵌入式图形显示和HMIs的图形化设计与开发环境,依靠一个硬件加速图形库OGLX,完成原型生成、设计仿真、验证和认证级代码生成等工作,支持位图,半透明和纹理,适合于开发多功能显示、控制面板和数字化仪表等[17]。图6为自动驾驶辅助系统汽车操作面板设计图,采用单仪表盘的形式,非均匀的仪表盘设计,考虑用户的实际需要,正常运行时隐藏告警信息。为了简化输入激励源数据量,对包括转速和位置在内的一些数据进行关联处理。
图6 自动驾驶辅助系统汽车操作面板设计图
4 系统分析和验证
4.1 模型验证
4.1.1 快速原型
在实际工程实践过程中,嵌入式软件的开发和验证阶段,不能期望外围设备已经开发完成,此时进行软件的分析和验证时,通常需要模拟外围设备。Rapid Prototyper是进行快速原型开发的工具,与Display工具不同的是,Rapid Prototyper包含丰富的图形库,覆盖各个领域,方便快速开发,适合作为软件测试的激励源,本文用来设计汽车操作激励输入面板,从已有的图形库中拖拽创建可视化模块,配置输入输出和相关参数,生成并保存快速原型,如图7所示。图中,第一排为各类告警信号输出,第二排为剩余能量和胎压值输入,第三排左边踏板分别为油门和刹车,中间为巡航选择,右边为车辆周围障碍物和交通信号灯输入。
图7 自动驾驶辅助系统快速原型激励源
4.1.2 联合仿真
在分别通过Suite、Display和Rapid Prototyper完成功能模型实现、操作面板设计和激励源设计之后,SCADE可以对其进行联合仿真,即激励源产生数据后功能模型进行处理并将结果送到操作面板进行显示。在仿真之前,需要对所有模块的输入输出进行关联,仿真的过程中可以对任意时刻设置断点,观察所有输入输出及中间变量的取值和数据流向,进行图形化的调试和仿真,以验证整个系统功能的正确性。
4.2 系统测试
在系统测试中,使用SCADE Test对软件详细设计模型进行验证并获取模型覆盖率结果。Test是一个提供需求验证和测试用例创建和管理的完整测试环境,主要用于对模型进行验证,使模型测试从主机端到目标机端形成完整的自动化测试流程。在主机和目标端为任何SCADE应用程序自动执行测试案例、测量覆盖范围和管理测试结果。通过模型覆盖率分析,验证模型与需求的一致性,尽可能排除模型设计中的错误。模型覆盖率分析采用DC覆盖率准则,要求确保节点的所有输出结果至少被取值一次。
针对需求设计、覆盖率准则和功能模型,确定根节点,设计相应的测试用例,进行测试并生成测试报告,如图8所示,整个模型的测试过程需要不断迭代,最终确保覆盖率达到100%。
图8 自动驾驶辅助系统覆盖率测试报告
4.3 软件工程化
4.3.1 工程文档
使用SCADE自动生成软件文档,包括架构设计文档,功能模型详细设计文档,用户界面详细设计文档,测试报告等。SCADE LifeCycle主要用于系统、软件研发生命周期各阶段数据的生成和维护、研发流程管理、验证支持等。包括:全生命周期数据追踪管理、设计文档自动生成、支持OSLC(Open Services for Lifecycle Collaboration)协议用于和第三方PLM/ALM工具桥接等。
4.3.2 代码和可执行文件
经过模拟仿真和测试验证,SCADE自动生成面向工程的自动驾驶辅助系统C语言嵌入式代码。本系统生成程序代码共6147行,
其中有效代码行数为4300行,占69.9%,注释行数为1170行,占19%。有32个程序头文件,22个c程序文件,一个exe可执行文件,可以直接在Windows x64平台上运行,其它中间文件44个。
5 小结
基于模型的软件开发是一种新颖的软件开发的理念和方法,在汽车电子领域有着越来越广泛的应用。本文:
1)介绍了基于模型的软件开发的特点,研究了SCADE高安全嵌入式系统开发的主要工作流程。
2)使用基于模型的思想和SCADE工具设计与实现了一种汽车自动驾驶辅助系统,包括进行系统架构设计、系统功能模型设计、系统用户界面设计。
3)对系统进行联合仿真和验证测试,生成相应的软件文档和代码及可执行文件,探索了完整的SCADE的模型化开发方法和工程化过程。