摘 要:定義了一種模型描述語言——MDL,采用BNF范式描述了MDL的語法規范,分析了其實現的內在機制。在汽車動力學建模中,將汽車模型采用自頂向下的劃分方式,劃分為多個相對獨立的子系統,采用模型描述語言對各個子系統的組成構件及其約束關系進行描述和定義,從而完成了一個整車動力學模型的描述。這種方法可以簡化汽車建模的復雜性,提高模型的可擴展和可重用性,同時能夠保證模型的精度和準確性。并在自主開發的汽車動力學仿真分析平臺InteDyna中驗證了這一方法的有效性。
關鍵詞:多體動力學; 汽車自動建模; 仿真; 模型描述語言
中圖分類號:TP391.9文獻標志碼:A
文章編號:1001-3695(2007)06-0038-04
隨著機械系統復雜程度的不斷提高,對系統的動力學建模也提出了越來越高的要求。采用傳統的建模方法,需要花費大量的人力、物力才能完成一個復雜系統的建模工作,并且模型的可維護性較差,這嚴重地阻礙了仿真技術的發展。隨著計算機技術的發展,仿真建模理論也日益增多并逐漸完善,如CYCLONE 方法[1]、SIREN 方法[2]、RESQUE 方法以及Zeigler提出的多層次模塊化[3]的建模思想,均在實際應用中取得了較大的成功。
在汽車動力學建模方面,也曾經提出過許多較為可靠和有效的方法。例如根據車身結構特性,提出了動力學簡化建模的方法[4]以及采用基于物質特征的汽車建模[5]。但是這些方法均存在很多不足,如基于特征的建模方法在描述車身覆蓋件等自由曲面組合體及不規則形狀零件時難度較大,同時難以描述部件與部件之間的動力學關系。
近幾年國內也開展了相關的研究,自主開發了一些多體系統動力學仿真軟件,如中國農業大學周一鳴領導的機械系統虛擬樣機仿真分析研究課題組,開發了機械系統虛擬樣機仿真分析軟件的原型——MSVP[6]。但由于許多技術上的原因,這些系統并沒有投入實際應用。
總體而言,當前的許多動力學仿真工具在仿真方面功能較為完善,但在建立動力學模型方面功能較為欠缺,尤其在模型管理方面不能很好地支持模型重用。
本文結合筆者主持的國家“863”計劃項目“奇瑞數字化虛擬樣車動力學仿真分析平臺InteDyna/Chery及工程化應用”的開發實踐,探討了采用模型描述語言(Model Description Language,MDL)對汽車進行自動建模的實現機制。
1 面向汽車自動建模的模型描述語言
針對當前動力學仿真軟件在建模方面存在的不足,在Inte ̄Dyna平臺的開發過程中引入了一種新的自動建模機制,即采用MDL對復雜機械系統進行描述和定義。其基本思路是采用自頂向下的分析方法將復雜機械系統劃為多個相對獨立的模塊,抽取出最基本的組成構件。通過對這些構件的詳細描述(如連桿的位置、位姿、受力、約束等)最終達到對復雜機械系統整體模型描述的目的。
1.1 模型描述語言
MDL的主要功能在于對構成復雜機械系統的基礎元素進行描述。從計算多體動力學的角度而言,在對復雜機械系統進行動力學分析前要建立多體系統力學模型。其實質是對以下力學要素進行定義,即部件、鉸(約束)、外力/偶、力元等[7]。因此可以將這一語言的描述對象劃分為如下幾個主要類型:
(1)基本部件。從類型來講有桿件(Link)、箱體(Box)、柱體(Cylinder)、球體(Sphere)、板件(Plate)、圓臺(Frustum)、圓環面(Torus)等。
(2)運動約束。常見的幾種約束有轉動副(Revolution)、球面副(Spherical)、平面副(Planar)、齒輪副(Gear)、螺旋副(Screw)、凸輪副等。
(3)外力/偶。常用的幾種包括重力(Gravity)、單元力(Single Force)、力偶(Torque)、三元力(Force Vector)、三元力偶(Torque Vector)、一般力(General Force)等。
(4)力元。主要包括彈簧阻尼器(Spring Damper)、扭簧(Torsion Damper)、襯套(Bushing)、輪胎(Tire)、梁(Bean)等。
(5)界面元素。為了實現自動化建模,必須借助多種界面工具進行信息和參數的傳遞。實際上一個完整的建模過程還需要其他各種輔助界面元素,如菜單、對話框、文本輸入框(Field)等。
要完整地描述一個部件的相關參數,模型描述語言中引入了如下幾種數據類型:
(1)位置/姿態(Location/Orientation)。它主要用于記錄空間點的位置和姿態,說明其X、Y、Z三個坐標點的值和歐拉角。
(2)模型對象(Model_Object)。它用于記錄對象的名稱;同時能夠在形式上說明各個元素之間的關聯關系。例如某桿件在模型庫的記錄名稱為Link_1,那么其質心的記錄名稱一般記為Link_1.cm。
(3)表達式(Expression)。它主要由整數(Integer)、實數(Real)、字符串(String)、矩陣(Matrix)、模型對象、系統定義函數(Function)等數據類型的運算操作構成,用于從數值上說明復雜機械系統模型的數學屬性。
從語法結構的角度講,MDL主要由命令語句(Command_Statement)和邏輯結構語句(Logical_Statement)組成。
命令語句執行對模型、外部文件、界面等的操作,包括模型的創建、修改以及文件的讀取等。其基本語法結構如下:
邏輯結構語句有條件地執行一組命令,即只有滿足特定的條件才會執行其內的命令語句。
1.2 模型描述語言的BNF定義
為了定義一種語言,必須設計并恰當地表達它的語法和語義。語法描述了語言中所有合法的表達式,語義則描述了解釋表達式的意義和效果。本研究中采用了BNF范式來表征MDL的語法。BNF范式是由John Backus和Peter Naur首先引入的用來描述計算機語言語法的符號集,用于形式化描述語言的語法。這種表達方式使用語言中的其他元素來描述不同的元素,甚至可以使用遞歸方式,元素以其自身定義[8]。BNF范式用在雙引號內的字代表字符本身;在雙引號外的字(有可能有下劃線)代表語法部分;尖括號(〈 〉)內包含的為必選項;方括號([ ])內包含的為可選項;大括號({ })內包含的為可重復0至無數次的項;豎線(|)表示在其左右兩邊任選一項;::=是“被定義為”的意思。以下是MDL的BNF定義形式:
(1)符號,主要有四則運算符、邏輯運算符及一些常用符號:
2 模型描述語言的實現機制
MDL實際上是一種文本描述語言,它以文本的形式描述了整個模型的幾何結構和力學關系。InteDyna系統在讀取這一模型文件時,還必須經過詞法分析、語法分析最終生成MDL程序相應的語法結構樹,即抽象語法樹。在遍歷抽象語法樹的基礎上,將整個動力學模型創建出來。
詞法分析是整個編譯過程的第一階段。其主要任務是從左到右逐個字符地對源程序進行掃描,產生一個個單詞序列用于詞法分析,識別源程序中具有獨立意義的最小語法單位——符號或單詞,如標志符、界限符和類型關鍵字等;同時去除源程序中不再需要的符號信息,如注釋、空白符等,最終把源程序轉換成為等價的內部表示形式。
語法分析的任務是在詞法分析識別出單詞符號串的基礎上,分析并判定程序的語法是否符合語法規則。語法分析首先必須根據語言的語法描述,即BNF范式描述語言的文法,對詞法分析器的輸出記號流進行分析。語法分析通常分為自上而下和自下而上兩種分析方法。在InteDyna系統采用了自上而下的分析方法,即從文法的開始符號出發,根據文法的規則進行推導,最終推導出給定的句子。在實際實現時通常采用的向下分析算法是遞歸下降分析和LL(k)分析。詞法分析與語法分析的前后關系與邏輯關系如圖1所示。
圖1 語法分析與詞法分析之間的邏輯與交互關系
在整個編譯階段,編譯器使用符號表來記錄名字的作用域以及綁定信息。符號表是一種數據結構,通常用于保存源語言結構的各種信息。在詞法分析階段,形成標志符的字符串或詞素被存儲在符號表的一個表項中,在編譯器以后的各階段,每當在源文件中遇到一個名字時,就開始搜索符號表。如果發現新的名字或者已有名字的新信息,符號表就要發生變化,在搜索到的表項上逐步添加其他信息,如標志符的類型、用處以及存儲位置。
在編譯的最后階段,對經過詞法分析后的記號流進行語法分析,建立分析樹,然后根據需要遍歷分析樹,并在節點處計算語義規則。分析樹是表述記號串結構的一種表示法。在分析樹中,記號表現為分析樹的樹葉(自左至右),而分析樹的內部節點則表達推導的各個步驟。抽象語法樹是分析樹的壓縮形式。相對于分析樹,抽象語法樹包含了更多的信息,同時效率更高。InteDyna系統中的語法制導翻譯是基于抽象語法樹來進行的,這是由于復雜機械系統的模型文件往往較為龐大,系統必須考慮到翻譯的效率,盡可能地做到穩定和快速。在抽象語法樹中,運算符和關鍵字不再是葉節點,而是作為內部節點成為分析樹中葉節點的父節點。圖2給出了MDL中語法樹表示的例子。
圖2 MDL的抽象語法樹表示
3 基于模型描述語言的汽車自動建模技術
在汽車建模中,動力學模型的建立一般是先建立幾何模型,對幾何模型施加力學元素,如質量、質心、慣性特性以及運動學約束、驅動約束等形成力學模型,并基于多體動力學仿真建模理論,最終生成數學模型。采用一般的交互式建模,除了對建模人員的要求較高之外,為了保證模型的正確性以及最終模型的成功裝配,還必須對各個子系統進行嚴格的測試,工作量大、整體建模效率較低。與手工建模相比,自動建模具有建模周期短、效率高、通用性強、模塊易于維護和管理等特點。在InteDyna系統中采用了劃分子系統進行MDL描述的自動建模方法。
在模型劃分方面,首先必須對復雜系統進行分析與綜合。模塊的合理劃分是一個較復雜的設計分析過程。模塊劃分太細,雖可帶來較好的直觀性和可移植性,但模塊綜合過程困難,計算量相對增加;反之,模塊劃分過粗,雖然模塊綜合過程簡單,但容易導致不可移植模塊的產生。在模塊劃分的過程中,一般遵循以下原則[9]:
(1)獨立原則,即模塊可以作為“黑箱”供使用者使用。對要劃分的模塊在功能上、結構上盡可能做到獨立化,這樣的模塊易于拼裝搭配,便于移植到不同的應用對象中,同時便于修改。
(2)典型部件原則,即以結構相對獨立的部件作為模塊化單元,便于模塊的互換;對結構復雜的部件可進一步細化,將部件中的某些組件模塊化。
在汽車建模時,依照以上的模型劃分原則以及需描述的最小系統要素,采用自頂向下分層建模的方法可以將系統劃分為通用性較強的模塊,并建立開放式的模塊庫;各模塊單獨建立各自的幾何和力學模型,一起存入模塊庫中以備調用;通過接口確立各模塊交界面的參數使系統整體的動力學求解及仿真得以實現。圖3為汽車模型的層次劃分以及描述這些子系統所需的基礎模型元素。
圖3 汽車模型層次劃分及模型基礎元素
下面以圖4所示的汽車前懸架模型為例,說明基于MDL的汽車自動建模技術的具體實現過程:
(1)先創建懸架中的關鍵點,這些關鍵點主要作為部件之間的連接點。
圖4 汽車前懸架模型
(2)創建懸架中各個相對獨立的部件,如副車架、左右下控制臂、轉向橫拉桿等。下面以副車架這一典型部件來說明如何使用MDL進行模型中部件建立。
①創建部件,即說明部件的名稱及其位置姿態。
4 應用實例
本文以在InteDyna平臺上建立復雜機械系統——汽車整車動力學仿真模型為例,說明采用模型描述語言進行汽車自動建模的可行性。若采用目前普遍使用的仿真工具如ADAMS/Car,在進行汽車建模時,絕大部分情況下需要修改模板甚至重新編寫模板,修改工作量大,而且維護很不方便,不利于子系統的重用,對分析者的要求也比較高;同時ADAMS/Car模塊十分昂貴,成本高,企業不易接受,不利于仿真技術的推廣。而在InteDyna中,使用層次化建模和模型重用功能,按照汽車結構建立車體子系統、懸架子系統、轉向子系統、傳動子系統等子模型形成可重用模型庫。在建立整車模型時,從模型庫中調入這些子系統組裝成整車模型,并按照模型管理提供的參數化設計功能,修改相應的參數得到所需模型。這樣,一般的分析師就可以在較短時間內完成車輛的建模工作,使建模效率得到大大提高,在保證模型可靠性的同時降低了分析成本。圖5為采用基于模型描述語言進行汽車自動建模所完成的整車動力學模型。
5 結束語
自動建模在CAE軟件中有著極為重要的作用。從以上分析及應用結果可以看出,應用模型描述語言對汽車等復雜機械系統進行建模,不僅能夠極大提高建模的便利性、可重用和擴展性,同時能夠在建模過程中很好地融入技術人員的經驗與技術。從工程應用實際來看,如果對模型庫中已有的同類產品進行建模仿真,在前期的建模可以大大減少工作量,極大地提高了工作效率,具有較高的應用價值。這一方法已經在InteDyna平臺的開發中得到實現,并應用于國內某知名汽車企業的實際開發中。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。