黃大洋,施浩,范正揚,顧程駿
(上海工程技術大學航空運輸學院,上海 201620)
飛機起落架是用來支撐機身,幫助飛機起飛和著陸的部件,它需要承受巨大的沖擊力從而為機體起到緩沖減震的作用,保障乘客的安全,以及在飛機起飛、著陸、滑跑的過程為其提供支撐負荷的裝置。飛機起落架的拆裝維修是每個航空維修人員的必修課程。傳統課程培訓受限于場地、環境等影響因素,使得課程培訓中教學效率不高。同時初次接觸相關課程的受訓者在進行實際操作過程中由于技術能力和安全防護的疏忽可能導致安全事故發生。
因此研究本系統的目的是降低航空維修環境的復雜性以提高安全度,同時對航空維修公司及相關院校而言能夠減少維修器材損耗以降低成本。受訓者只需佩戴VR 設備即可進入一個近乎真實的虛擬世界,通過場景中的物件交互展開學習。使用VR 設備能直觀地讓受訓者動手操作而不是單純學習書本上的理論知識,無論是從專業性而言,還是從較強的交互性而言,本系統都能滿足航空維修公司及院校對于飛機起落架維修的教學需求,在降低成本的同時又能提高教學質量[1]。
針對于A320 起落架零部件復雜多樣且精度高的特點,在對A320 起落架進行三維建模的過程中,如何精準高效地完成模型構建顯得尤為重要。同時要求所構建的三維模型必須具有高精度和高穩定性。本項目從以上因素出發,選擇建立基于3Ds Max 的三維模型[2]。
三維建模所需要的數據類型分為圖像數據和非圖像數據兩大類,這兩類數據對于模型的精度都是至關重要的。其中圖像數據包括A320 飛機及其起落架的整體外形、三視圖、紋理等;非圖像數據包含了A320飛機及其起落架的各種尺寸、用途等。A320 三視圖如圖1 所示。

圖1 A320 三視圖
項目團隊聯系到上海航空公司及其相關工作人員,得到了他們的支持并且獲得了空客A320 飛機相關參數以及飛機起落架部件的較高精度測量值數據,團隊通過計算機將得到的數據匯總、編輯、分析、校準,用以A320 飛機主體和飛機起落架建模。
由CAD 平面圖轉化成三維模型通常情況下需要對原有平面圖進行數據優化。其中出現原有的CAD 平面圖由于尺寸標注無法實現模型整合致使圖形無法完美地轉化成三維模型的問題,對此進行原有平面圖優化設計,結構框架大致定型后與實際尺寸數據的比照校準,為后期構建精準的三維模型提供堅實的保障。起落架主要的支架組件如圖2 所示,次級整流罩連桿如圖3 所示。

圖2 主要的支架組件

圖3 次級整流罩連桿
將優化后的設計圖導入至3Ds Max 軟件中,并且再次檢查確認平面圖中的線條是否存在模型整合問題,若存此問題,則通過使用連接工具將其連接閉合,使設計圖更加完美,在最后交互顯示出精確的模型。
在平面設計圖的基礎上,通過拉伸、擠出等多種方式構建A320 飛機及其起落架零部件的三維模型。其中需要注意的是,建模過程中盡量使用簡單指令以減小數據量,避免后期運行時造成嚴重卡頓的現象;建模完成后將模型塌陷為網格物體以避免將模型導入Unity 3D 后出現不兼容的狀況[2]。
圖4—圖6 為A320 機體及起落架部分零件展示。

圖4 A320 機體

圖5 A320 起落架反作用連桿

圖6 A320 起落架扭力臂
高精度的建模能夠展示出空客A320 飛機的各種細節,但是缺乏美觀性。不同的表面屬性如凹凸感、漫反射、折射能夠給予受訓者更真實的體驗,因此需要進行貼圖處理。在系統中模型貼圖是通過運用Photoshop 制作貼圖素材并對飛機進行了貼圖處理,以達到美化外觀,使場景更真實,使操作者通過VR 設備進行虛擬維修操作時更能有身臨其境之感,盡最大可能還原了飛機樣貌。A320 輪子貼圖素材如圖7 所示。

圖7 A320 輪子貼圖素材
本系統以Unity 3D 為開發平臺,利用steamVR 呈現出幾乎貼近現實的虛擬世界,同時使用VR設備HTC VIVE 作為載體以及最終操作終端以實現人機交互功能。維修過程中的人機交互一共具有2 種交互形式:一是通過虛擬對象與虛擬維修零件的觸摸式交互,其為直接交互;另一種是虛擬對象通過虛擬維修工具再與維修零件的結合式交互,其為間接交互[3]。因此可將虛擬維修對象的組件按照約束運動和交互特征來定義。約束運動是根據操作者的操作意圖來對零部件的約束運動仿真,其包括平動、轉動和非受限運動。交互特征是根據交互對象是維修工具還是維修對象以及是對維修部件進行平動還是轉動來劃分的。本文根據不同的實現形式分別進行了相應的編程[4]。
為實現模型運動時的真實性以及反映正常的運動軌跡,同時實現對于起落架的操控,本系統中運用代碼編譯的方法來實現,以下列舉部分代碼:
Using Unity Engine;
Public class c:MonoBehaviour{
Int step=0;
Int i=0;
Int j=0;
//Use this for initialization
Void Start(){}
//Update is called once per frame
Void Update(){
switch(step)
{case0;
{if(i<90)
{transform.Translate(new Vector3
(-0.015f,0,0,015f));
i++;}
else
{step=1;}
break;}
case 1;
{if(j<90)
{transform.Rotate(new Vector3
(0,0,1),1);j++}
else
{step=2}
break;}
case2;
{break;)}
}}[1]
本系統重要功能是實現對于受訓者的維修拆裝的教學,因此配備的拆裝教學功能需要提高受訓者的沉浸感并為其帶去流暢合理的虛擬體驗。以拆卸教學為例:當完成當前拆卸步驟時,手柄所在位置會自動指向顯示出下一個所需拆卸零件的位置。受訓者可以自由操控手柄,將零件從提示位置選中并做出相應拆卸動作以完成拆卸。
移動過程實現的代碼具體如下:
if
(device.GetPress(SteamVR Contro
1ler.ButtonMask.Trigger))
{
dx2=device.transform.pos.x;
dy2=device.transform.pos.y;
dz2=device.transform.pos.z;
T.transform.position=new
Vcctor3(T.transform.position.x+(
dx2-dx1)*speed,T.transform.posit
ion+(dy2-dy1)*speed,T.transform.
position.z+(dz2-dz1)*speed);
dxl=dx2;dy1=dy2;dz1=dz2;
}[5]
操作中的互動性體驗同時也是一個重要的編程內容,為增強受訓者的體驗感,系統實現了多方面的操縱交互。假若受訓者希望能夠全方位觀察飛機零部件,則可以自主對零件模型進行旋轉、平移等操作。這一功能的實現大大增加了虛擬操作的真實性,便于受訓者全方面觀察學習和認識飛機零件與零件之間的結合方式。部分代碼如下:
if(Target!=null&&Input.GetMouseButton((int)MouseButt on.MouseButton_Right))
{
transform.rotation=Quaternion.Lerp(transform.rotation,m Rotation,Time.deltaTime*Damping);
}
if(Input.GetMouseButton((int)MouseButton.MouseButto n_Left)
{
transform.Translate(Input.GetAxis(“MouseX”),Input.Get Axis(“Mouse Y”),0);
}[6]
在傳統航空維修培訓中,往往會受到場地、設備、成本因素影響,甚至會因為疫情影響無法開展線下培訓,這會嚴重阻礙培訓進程。本項目的創新點在于充分運用虛擬現實技術,受訓者利用VR 設備隨時隨地即可開展模擬訓練,避免了時間、空間因素帶來的干擾。就航空維修公司及相關院校而言,虛擬維修在減少了場地及設備成本的同時降低了耗材費用,真正做到了在降低成本的過程中又能夠提高教學質量。通過VR技術,虛擬培訓不僅可以促進受訓者對產品知識的獲取、學習,提高相關從業者的實際動手操作能力。更為突出的是,虛擬培訓打破了先前煩瑣枯燥的教育培訓模式,降低了企業和高校的教育培訓成本,從而走出一條低成本、高效率的培訓路徑。