郝玉鍇,文圣豐,吳 云,吳 姣
(1.中國航空工業(yè)集團公司西安航空計算技術(shù)研究所,陜西 西安 710115;2.西安電子科技大學計算機學院,陜西 西安 710071)
當前,電子信息技術(shù)、車聯(lián)網(wǎng)技術(shù)、人工智能技術(shù)等紛紛進入汽車制造行業(yè),汽車的智能化發(fā)展已成為主要方向,是推進汽車工業(yè)發(fā)展的重要力量。汽車產(chǎn)品正向智能化方向轉(zhuǎn)變,智能汽車人機協(xié)同是一個迅速發(fā)展的方向[1]。智能汽車人機協(xié)同控制由感知、決策和執(zhí)行三個層面構(gòu)成,主要研究內(nèi)容包括外部環(huán)境感知、內(nèi)外信息融合、高精度地圖與定位、智能決策與規(guī)劃、控制執(zhí)行、信息安全等技術(shù)[2]。由于具有縮短研發(fā)周期、提高產(chǎn)品質(zhì)量、增加可移植性的特點,基于模型的系統(tǒng)工程思想在汽車系統(tǒng)研發(fā)中已經(jīng)得到廣泛的使用。
基于模型的軟件開發(fā)(Model-Based Software Development)是一種新穎的軟件開發(fā)的方法,原則是在系統(tǒng)工程的維度使用可視化建模語言構(gòu)建系統(tǒng)模型并將其作為設(shè)計的基礎(chǔ),在過程中通過不斷對系統(tǒng)模型進行的細化和測試來消除其中的錯誤和缺陷,進行系統(tǒng)的設(shè)計和驗證,以保障系統(tǒng)設(shè)計的正確性和對設(shè)計需求的全部覆蓋[3-4]。
SCADE是一種高安全的嵌入式系統(tǒng)開發(fā)環(huán)境,運用了Correct by Construction的概念,開發(fā)環(huán)境覆蓋了軟件開發(fā)過程中從最初需求到最終可執(zhí)行代碼和驗證測試的整個流程[5]:需求模型、模型檢查、模型仿真、形式化驗證、代碼自動生成、以及文檔自動生成等,可以有效提高開發(fā)效率,解決安全性要求。SCADE在汽車電子、軌道交通、航空航天等領(lǐng)域均有著廣泛的應用,文獻[6]介紹一種軌道交通領(lǐng)域的系統(tǒng)仿真平臺,文獻[7]使用SCADE實現(xiàn)一種地鐵測速測距系統(tǒng),文獻[8]實現(xiàn)一種聯(lián)鎖系統(tǒng)。文獻[9]通過SCADE軟件編寫控制邏輯,實現(xiàn)一種車身控制器,但僅使用了SCADE的功能模型開發(fā)功能,未使用基于模型的軟件開發(fā)方式進行設(shè)計和驗證。
本文對基于模型的軟件開發(fā)特點和SCADE高安全嵌入式系統(tǒng)開發(fā)的主要工作流程進行研究,使用基于模型的軟件開發(fā)方式對一種汽車自動駕駛輔助系統(tǒng)進行了設(shè)計與實現(xiàn),包括架構(gòu)設(shè)計、功能模型設(shè)計、用戶界面設(shè)計以及聯(lián)合仿真和驗證測試,并生成相應軟件文檔和代碼及可執(zhí)行文件,完成整個系統(tǒng)工程化的過程。
基于模型的軟件開發(fā)使用專用開發(fā)環(huán)境,融合統(tǒng)一了設(shè)計、開發(fā)和測試的過程,可以降低研發(fā)成本,縮短研發(fā)周期,減少軟件缺陷[10]。開發(fā)過程圍繞整個系統(tǒng)模型,通過測試驗證,不斷進行細化、分解和復用,暴露和解決軟件缺陷,提高版本迭代速度[11],同時使用代碼自動生成技術(shù)消除人為編寫代碼過程中可能引入的錯誤。
2.2.1 圖形化建模
不同于傳統(tǒng)的代碼編寫,基于模型的開發(fā)方法通過數(shù)據(jù)流圖和狀態(tài)機圖兩種圖形化的建模方式來實現(xiàn)軟件開發(fā),使得軟件開發(fā)人員更關(guān)注軟件實現(xiàn)。數(shù)據(jù)流圖和狀態(tài)機圖都具有嚴格的數(shù)學語義,可以保證模型設(shè)計精確、完整和無二義,并且圖形化編輯方式有助于系統(tǒng)架構(gòu)設(shè)計人員同軟件具體實現(xiàn)人員之間的直接交流[12]。
2.2.2 仿真
在完成圖形化建模后,開發(fā)人員通常需要使用仿真器這種調(diào)試工具進行從單個模塊開始直到整個系統(tǒng)的模型仿真。仿真過程中可以設(shè)置中斷條件和中斷點,查看輸入輸出數(shù)據(jù)和內(nèi)部的變量,記錄和快進、快退仿真的場景[13],還可以對特定數(shù)量感興趣的信號變化進行檢查。
2.2.3 嵌入式代碼的自動生成
在完成模型仿真和形式驗證以保證模型的正確性以后,基于模型的開發(fā)方法可以面向工程自動生成滿足一系列安全性特征的ANSI C或Ada 83/95語言的嵌入式軟件源代碼。使用工具自動生成的源代碼必然符合編碼標準,比手寫代碼更易于開發(fā)人員進行閱讀和維護[14]。
基于模型的開發(fā)方法可以比較方便的與軟件工程中常用的其它工具進行橋接,使之與軟件工程化過程連接更加緊密。例如可以與需求管理工具DOORS進行橋接,把模型自動輸入到DOORS環(huán)境中進行需求分析和追蹤,可以與配置管理工具進行橋接,常用的如Telelogic Synergy,MERANT PVCS等,方便導入工具進行軟件配置管理。
自動駕駛輔助系統(tǒng)附著于汽車系統(tǒng)之上,由智能控制板、汽車操作面板和一些輸入輸出設(shè)備構(gòu)成,用于輔助駕駛員自動操作車輛[15],如圖1所示。
圖1 自動駕駛輔助系統(tǒng)構(gòu)成
自動駕駛輔助系統(tǒng)具體包含的組成部分和各自的功能如表1所示。
表1 自動駕駛輔助系統(tǒng)構(gòu)成表
架構(gòu)建模的主要工作是要完成系統(tǒng)的軟件架構(gòu)設(shè)計,在基于模型的開發(fā)方法中,系統(tǒng)工程師和軟件工程師可以在同一構(gòu)架下工作,從而避免重復勞動以及系統(tǒng)結(jié)構(gòu)和軟件行為定義之間的偏差。SCADE Architect是一個用于系統(tǒng)設(shè)計和建模的集成開發(fā)環(huán)境,基于SysML和Eclipse標準,可以進行結(jié)構(gòu)系統(tǒng)建模和架構(gòu)驗證,具有與軟件子系統(tǒng)組件的同步的特點。
根據(jù)上述2.1節(jié)所述系統(tǒng)構(gòu)成,建立架構(gòu)模型如圖2所示。
圖2 自動駕駛輔助系統(tǒng)架構(gòu)模型
3.3.1 功能模型
自動駕駛輔助系統(tǒng)功能模型采用SCADE Suite完成,Suite基本模塊由Suite Advanced Modeler(高級建模器)、SCADE Suite KCG(SCADE代碼生成器),以及SCADE Suite Documentation Generator(SCADE模型設(shè)計文檔生成器)組成。
根據(jù)系統(tǒng)需求,自動駕駛輔助系統(tǒng)共設(shè)計21個功能模型[16],各個模型之間的調(diào)用關(guān)系如圖3所示。
圖3 自動駕駛輔助系統(tǒng)模型設(shè)計和調(diào)用關(guān)系
Suite使用數(shù)據(jù)流圖、狀態(tài)機圖進行軟件模型的詳細設(shè)計,分別適合于連續(xù)系統(tǒng)建模和離散系統(tǒng)建模。
數(shù)據(jù)流圖主要用來實現(xiàn)傳感器采樣、信號處理、復雜的數(shù)學邏輯計算、實現(xiàn)各種算法等功能,使用算術(shù)、邏輯、時序、條件等操作符,把節(jié)點作為功能單元,相互組合形成層次結(jié)構(gòu),使用圖形的方式建立軟件模型。圖4是自動駕駛輔助系統(tǒng)入口數(shù)據(jù)流圖,根據(jù)2.2節(jié)所述系統(tǒng)架構(gòu)模型定義的輸入輸出接口,實現(xiàn)系統(tǒng)的主控制邏輯。圖中“>—”表示輸入數(shù)據(jù)接口,“—>”表示輸出數(shù)據(jù)接口,方框內(nèi)為封裝的子模型。
圖4 自動駕駛輔助系統(tǒng)入口數(shù)據(jù)流圖
狀態(tài)機圖可以直觀表現(xiàn)控制流和其中的判斷邏輯,狀態(tài)機有唯一的初始狀態(tài),狀態(tài)中可包含嵌套的狀態(tài)機和圖形化或文本化的數(shù)據(jù)流,在任一周期,一個狀態(tài)機內(nèi)有且只有一個狀態(tài)能被激活和執(zhí)行。
圖5是自動駕駛輔助系統(tǒng)的駕駛模式狀態(tài)機圖,駕駛模式分為手動駕駛、自動駕駛和外部事件三個狀態(tài),由三個方框表示,其中自動駕駛又分為自動駕駛介入和自動駕駛暫停狀態(tài),為圖中嵌套的兩個方框,方框之間連接的有向弧線表示狀態(tài)的遷移,方框內(nèi)的內(nèi)容表示狀態(tài)的具體執(zhí)行內(nèi)容。相比于使用代碼實現(xiàn),狀態(tài)機圖的軟件實現(xiàn)方式直觀、清晰、方便閱讀。
圖5 自動駕駛輔助系統(tǒng)駕駛模式狀態(tài)機圖
3.3.2 顯示模型
使用Display工具完成汽車操作面板設(shè)計,Display是一套靈活的面向高安全嵌入式圖形顯示和HMIs的圖形化設(shè)計與開發(fā)環(huán)境,依靠一個硬件加速圖形庫OGLX,完成原型生成、設(shè)計仿真、驗證和認證級代碼生成等工作,支持位圖,半透明和紋理,適合于開發(fā)多功能顯示、控制面板和數(shù)字化儀表等[17]。圖6為自動駕駛輔助系統(tǒng)汽車操作面板設(shè)計圖,采用單儀表盤的形式,非均勻的儀表盤設(shè)計,考慮用戶的實際需要,正常運行時隱藏告警信息。為了簡化輸入激勵源數(shù)據(jù)量,對包括轉(zhuǎn)速和位置在內(nèi)的一些數(shù)據(jù)進行關(guān)聯(lián)處理。
圖6 自動駕駛輔助系統(tǒng)汽車操作面板設(shè)計圖
4.1.1 快速原型
在實際工程實踐過程中,嵌入式軟件的開發(fā)和驗證階段,不能期望外圍設(shè)備已經(jīng)開發(fā)完成,此時進行軟件的分析和驗證時,通常需要模擬外圍設(shè)備。Rapid Prototyper是進行快速原型開發(fā)的工具,與Display工具不同的是,Rapid Prototyper包含豐富的圖形庫,覆蓋各個領(lǐng)域,方便快速開發(fā),適合作為軟件測試的激勵源,本文用來設(shè)計汽車操作激勵輸入面板,從已有的圖形庫中拖拽創(chuàng)建可視化模塊,配置輸入輸出和相關(guān)參數(shù),生成并保存快速原型,如圖7所示。圖中,第一排為各類告警信號輸出,第二排為剩余能量和胎壓值輸入,第三排左邊踏板分別為油門和剎車,中間為巡航選擇,右邊為車輛周圍障礙物和交通信號燈輸入。
圖7 自動駕駛輔助系統(tǒng)快速原型激勵源
4.1.2 聯(lián)合仿真
在分別通過Suite、Display和Rapid Prototyper完成功能模型實現(xiàn)、操作面板設(shè)計和激勵源設(shè)計之后,SCADE可以對其進行聯(lián)合仿真,即激勵源產(chǎn)生數(shù)據(jù)后功能模型進行處理并將結(jié)果送到操作面板進行顯示。在仿真之前,需要對所有模塊的輸入輸出進行關(guān)聯(lián),仿真的過程中可以對任意時刻設(shè)置斷點,觀察所有輸入輸出及中間變量的取值和數(shù)據(jù)流向,進行圖形化的調(diào)試和仿真,以驗證整個系統(tǒng)功能的正確性。
在系統(tǒng)測試中,使用SCADE Test對軟件詳細設(shè)計模型進行驗證并獲取模型覆蓋率結(jié)果。Test是一個提供需求驗證和測試用例創(chuàng)建和管理的完整測試環(huán)境,主要用于對模型進行驗證,使模型測試從主機端到目標機端形成完整的自動化測試流程。在主機和目標端為任何SCADE應用程序自動執(zhí)行測試案例、測量覆蓋范圍和管理測試結(jié)果。通過模型覆蓋率分析,驗證模型與需求的一致性,盡可能排除模型設(shè)計中的錯誤。模型覆蓋率分析采用DC覆蓋率準則,要求確保節(jié)點的所有輸出結(jié)果至少被取值一次。
針對需求設(shè)計、覆蓋率準則和功能模型,確定根節(jié)點,設(shè)計相應的測試用例,進行測試并生成測試報告,如圖8所示,整個模型的測試過程需要不斷迭代,最終確保覆蓋率達到100%。
圖8 自動駕駛輔助系統(tǒng)覆蓋率測試報告
4.3.1 工程文檔
使用SCADE自動生成軟件文檔,包括架構(gòu)設(shè)計文檔,功能模型詳細設(shè)計文檔,用戶界面詳細設(shè)計文檔,測試報告等。SCADE LifeCycle主要用于系統(tǒng)、軟件研發(fā)生命周期各階段數(shù)據(jù)的生成和維護、研發(fā)流程管理、驗證支持等。包括:全生命周期數(shù)據(jù)追蹤管理、設(shè)計文檔自動生成、支持OSLC(Open Services for Lifecycle Collaboration)協(xié)議用于和第三方PLM/ALM工具橋接等。
4.3.2 代碼和可執(zhí)行文件
經(jīng)過模擬仿真和測試驗證,SCADE自動生成面向工程的自動駕駛輔助系統(tǒng)C語言嵌入式代碼。本系統(tǒng)生成程序代碼共6147行,
其中有效代碼行數(shù)為4300行,占69.9%,注釋行數(shù)為1170行,占19%。有32個程序頭文件,22個c程序文件,一個exe可執(zhí)行文件,可以直接在Windows x64平臺上運行,其它中間文件44個。
基于模型的軟件開發(fā)是一種新穎的軟件開發(fā)的理念和方法,在汽車電子領(lǐng)域有著越來越廣泛的應用。本文:
1)介紹了基于模型的軟件開發(fā)的特點,研究了SCADE高安全嵌入式系統(tǒng)開發(fā)的主要工作流程。
2)使用基于模型的思想和SCADE工具設(shè)計與實現(xiàn)了一種汽車自動駕駛輔助系統(tǒng),包括進行系統(tǒng)架構(gòu)設(shè)計、系統(tǒng)功能模型設(shè)計、系統(tǒng)用戶界面設(shè)計。
3)對系統(tǒng)進行聯(lián)合仿真和驗證測試,生成相應的軟件文檔和代碼及可執(zhí)行文件,探索了完整的SCADE的模型化開發(fā)方法和工程化過程。