引言
伴隨著信息技術的發展,虛擬現實仿真技術日益成熟。這是一門多學科融合的交叉技術和前沿科學領域,在很多領域中已經得到了應用。將農業機械與虛擬現實仿真技術相結合已成為現代化農業技術發展的趨勢,也逐步成為熱點研究課題。
虛擬現實技術在農業機械上的應用是指通過計算機對農業機械的外觀、功能、行為進行建模,也就是建立虛擬樣機,生成逼真的三維虛擬環境。通過虛擬現實系統,能夠在虛擬環境中實時觀察虛擬農機的農業生產活動、實現農機的性能實驗和特性評估,并且人與機械之間能進行實時的交互。
本文在了解農田噴灌車工作過程的基礎上,利用虛擬現實仿真技術在 Pro/E 環境下建立模型,導入3ds Max 中做后期處理將農田噴灌車的外觀設計呈現; 利用 Unity3D 來實現行駛、噴灑機械臂的展開、折疊以及作業時虛擬環境,為用戶提供一個可操作的原型農田機械,不僅可以為農業教學科研提供服務,也可以用于農業機械的觀光與培訓。
1 農田噴灌車模型的建立
1. 1 三維模型建立
通常一個機械的完整設計包含了零件制圖、裝配設計模塊及工程圖繪制模塊等,越復雜的機械模型所包含的內容越多。本文選取機械仿真的目的是實現噴灌車在田間的行駛及噴藥操作,主要模擬車身的運動以及機具的操作效果,而不包含機械的內部傳動原理。所以,對其內部的復雜構造\\( 如發動機內部結構和氣壓傳動機構等\\) 沒有進行建模。因此,在建模時,從展示內容的角度將農田噴灌車的模型大體分為 4部分: 機身、車輪、噴灌箱及噴灑機械臂。
為了達到建立機械模型的精準要求,用 Sketch-Up、3ds Max 等通用建模工具是不合適的,可選用專業的機械建模軟件 Pro/E 將模型的圖紙導入 Pro/E 中,以線條的形式畫出。建立組裝好的模型在 3ds Max 中做后期處理,最后在 Unity3D 環境進行下一步仿真操作,具體流程如圖 1 所示?!緢D1】
1. 2 貼圖材質處理
在 Pro/E 環境下建立的基礎模型只具有三維外觀,雖然它本身自帶材質,但是不符合虛擬仿真的要求。一般的模型無論光照效果還是后期渲染,若每一部分都是獨立材質,做烘焙會有很多小碎面,十分混亂,所以需要在 3ds Max 中做后期處理、焊接節點。
通過 UVW 修改器對模型進行貼圖,具體步驟如下: 修改器把立體的三維模型的表面在一個平面上展開、鋪平; 然后,把這個展平的表面輸出到二維圖形編輯軟件中繪制貼圖; 最后,再把畫好的貼圖貼回到三維模型上。
利用 UVW 貼圖可以精確地控制模型上的 UV 面,將紋理貼圖準確繪制到模型表面,特別適用于不規則形狀的模型和紋理貼圖不規則的情況。將整個噴灌車的貼圖利用 UVW 展開,效果如圖 2 所示?!緢D2.略】
在具體的建模過程中,機械模型中存在許多比較細小的結構,如螺栓和螺母。這些結構如果完全建模,不僅占用過多資源,而且在仿真過程中也會因為顯卡的計算誤差而產生閃爍現象。一般虛擬現實中解決的辦法是盡量使用材質來代替模型,但這些處理帶來的副作用是: 當近距離觀察時,效果不夠逼真。
機械仿真不同于一般的游戲設計,要求保留必要的真實效果,而解決這個矛盾的辦法是利用凹凸貼圖來完成。例如,建立車輪模型時,模型盡量減少面數; 利用平面貼圖和凹凸貼圖相結合,可以描繪每個像素的法線朝向,更好地表現凹凸細節,產生出來的模型類似高多邊形的效果,增加了物體細節的層次,實現了車輪上的凹凸效果,如圖 3 所示?!緢D3.略】
噴灌車模型經過后期處理,在保證節約資源的前提下實現了逼真的仿真效果,如圖 4 所示?!緢D4.略】
1. 3 調整零件軸心
在機械臂的運動仿真中,大部分零件都要進行旋轉運動,而旋轉是依賴于零件模型的自身坐標軸進行的。由于每一級的機械臂旋轉的軸心都不相同,因此針對此噴藥機調軸是關鍵的一步。3ds Max 的場景采用右手系模式,z 軸默認向上,噴灌車機械臂的旋轉很顯然是以 z 軸為旋轉軸旋轉。以一級機械臂為例,其軸心在黃色鈕的中心與下方綠色螺栓中間的連線上,如圖 5\\( a\\) 所示\\( 為了方便觀看,其余機械臂暫時隱藏\\) 。由于機械臂模型并不垂直于地面且稍微向機身傾斜,若軸心坐標存在微小的誤差,將導致機械臂展開時無法與地面平行。
為了使誤差降到最低,可以通過輔助物體來調整軸心。在此建立輔助物體,利用空間捕捉功能,在兩點之間做一條輔助線將其在場景中渲染,如圖 5\\( b\\)所示?!緢D5.略】
選擇不同視角將輔助物體的軸心與輔助物體 z 軸方向徹底重合,將機械臂附加在輔助物體上,使機械臂的軸心與輔助物體一致; 最后,利用可編輯多邊形的元素選擇狀態將輔助物體刪除,其余機械臂也同樣應用此方法來達到調軸目的。
2 機械運動仿真
2. 1 模型的層次關系
噴灑機械臂的結構仿真運動比較復雜,各個機械零件的運動無法通過一個簡單的函數關系來表達,常規的平移和旋轉復合算法無法實現這一效果。通過對機械臂的運動觀察發現,機械臂上的各個零件從嚴格意義讓講并不存在真正意義上的簡單“平移”運動,其位置的移動都是由于其它零件的旋轉帶動的。通過合理規劃機械臂相關零件的父子層次關系,然后通過對父物體的旋轉,帶動子物體的位移。這種方法使得后面的仿真算法得到大幅度簡化。
噴灑機械臂分別位于藥箱的左右兩側,最靠近車身的部分為一級機械臂,接下來為二級、三級直至四級機械臂。每級機械臂下方都帶有噴灑藥物的細管,噴灌車工作時,機械臂通過鏈接機身與機械臂的液壓桿獲取展開的動力,向外側以折疊方式一級一級展開,左右兩側同時同步,當全部張開時,暫停運動。由于本文要表達的是仿真效果而不是研究機械動力原理,在此只考慮外觀的動作模擬展示。因此,以模擬機械外觀仿真的角度觀察,需要做模擬運動的部件,如表 1 所示?!颈?】
模擬機械臂展開過程時,首先要確定各級機械臂的父子關系。當父子關系確定后,子物體會隨著父物體的位移和旋轉發生相應的改變,而子物體的改變不會影響到父物體,因此一級機械臂很顯然是父物體。
機械臂的父子關系示意圖如圖 6 所示?!緢D6】
2. 2 模擬行駛
農田噴灌車的模擬行駛是通過 Unity3D 本身自帶的物理組件 WheelCollider\\( 車輪碰撞器\\) 來實現的。WheelCollider 是一個特殊的地面車輛碰撞器,具有內置的碰撞檢測、車輪物理引擎和一個基于滑移的輪胎摩擦模型,是專門為有輪子的車輛設計。因此,只要給 WheelCollider 一個力,就可以自動實現滾動的物理效果,并且可以通過代碼捕獲它的轉速。
需要注意的是,按照傳統思想,給車輪加 Wheel-Collider 屬性的做法是直接選中車輪添加屬性,效果如圖 7 所示; 但是,此過程無法實現車輪的滾動。這是因為車輪的碰撞檢測是通過自身 Y 軸的中心向下,投射一條射線; 而輪子滾動時,軸心也隨之旋轉,這與WheelCollider 的自身 Y 軸方向不變相違背; 若想實現車輪滾動效果,最好的方法就是將車輪碰撞器與可見輪子分開?!緢D7.略】
具體操作步驟為: 在每一個車輪上添加 WheelCol-lider 屬性,建立空物體; 選擇車輪,將 WheelCollider 屬性復制,粘貼至空物體,重新命名; 再將輪子上原有WheelCollider 刪除。為了利于觀看查找,可再建兩個空物體,分別放置車輪與車輪碰撞器,如圖 8 所示?!緢D8.略】
整理完畢后,用 C#語言在 Unity3D 中編程實現噴藥機的前進、后退、轉彎的控制??刂频姆椒ㄈ绫?2所示?!颈?】
使用 WheelCollider 的好處是可以方便、快捷地模擬車輪運動,并具有十分逼真的效果; 但是它還存有不足之處。比如,在現實生活中,車輛轉彎時為了使轉彎更省力,前方兩個驅動輪的轉角是不同的,而利用 WheelCollider 的車輪在轉彎時轉角無明顯差異。做傳統的賽車游戲對此沒有很高的要求,所以WheelCollider 常常用來做賽車游戲的仿真。
2. 3 噴灑機械臂的展開與折疊
由于各級機械臂的展開與折疊原理相似,因此以第 1 級機械臂為例,對其進行模擬分析。當觸動噴灑機械臂的展開按鈕時,HyPreOut1 通過內部壓力將HyPreIn1 頂出,HyPreIn1 的運動推動 1 級機械臂運動,過程如圖 9 所示?!緢D9.略】
顯然,HyPreOut1 與 Arm1 的轉速不同。HyPreIn1作為 HyPreOut1 與 Arm1 的銜接體,從仿真的角度分析,只要保證旋轉過程中 HyPreOut1、HyPreIn1 時刻處于同一直線,利用父子關系和旋轉運動相結合的思想,即可模擬出 HyPreIn1 的伸縮運動。
首先,要利用數學方法弄清楚各個部分的旋轉角度關系。將各物體垂直投影到平面,結合圖 9 制作關系圖如圖 10 所示,輔助點代表含義如表 3 所示?!緢D10.表3】
ΔABC 為 機 械 臂 靜 止 時 輔 助 點 形 成 的 關 系,ΔBCD 為機械臂轉過一定角度時形成的關系。將 CD旋轉的角度設為隨著每一幀逐漸增加的角\\( 即∠C 作為主動角\\) ,隨著主動角的每一幀的角度變化,求得HyPreOut1 和 HyPreIn1 轉過的角度,保證 A、B、C 始終構成三角形。具體數學計算方法如下:1\\) 在 ΔABC 中,已知 AB、BC、AC,利用余弦定理求出∠A、∠B、∠C;2\\) 在 ΔBCD 中,已知新的角 C 為 new ∠C,已知BC、A'C,求得∠A'、∠B';3\\) 隨著一級機械臂旋轉的角度增加,HyPreOut1轉過的角度為∠B-∠B',HyPreIn1 相對于 1 級機械臂轉過的角度為∠A'-∠A。
有了上述理論基礎,設計在 Unity3D 中的編程思想,以 1 級機械臂為例,HyPreOut1 最大的轉角為 90°。這一編程思想的流程如圖 11 所示?!緢D11】
3 建立虛擬環境
3. 1 構建基本農田環境
噴灌車一般工作在農場的壟田里,機械臂的展開范圍大,比較適合在面積寬廣規則的田地里作業。為此,首先創建一個具有農田效果的土地,將具有壟田紋理的圖片放入 Unity3D 自帶紋理圖片的貼圖文件下,點擊創建地形并為地形附加貼圖材質; 設置土地的解析度和圖片的大小,使其具有規整壟田凸起的效果; 添加 Skybox\\( 天空盒\\) 創建天空效果,利用光照照明使場景看起來更加明亮,根據農田的分布位置可在農田旁邊創建道路、樹木等地表環境,使場景看起來更接近真實的農場生活環境。
3. 2 地表變化模擬
噴灌車噴灑液體時,液體沿著噴灑機械臂下方的細管噴出,噴灑的展示利用 Unity3D 自帶的 ParticleSystems\\( 粒子系統\\) 實現,調整系統的參數即模擬噴灑液體效果。
模擬環境的重點是模擬地表變化。噴灌車向地面噴灑液體時,地面會有變濕的跡象,實現這一過程需要根據噴灌車一幀所行駛的步長計算更換地面的貼圖材質的面積,利用其中標準的類結構 Terrain. data更換圖片材質。該類存儲高度圖、細節網格、樹實例和地形紋理 alpha 貼圖,由于每一張貼圖都對應自己的透明度,因此通過紋理可以獲得貼圖的位置,實現貼圖變換過程。
Unity3D 中,地塊由很多小網格組成,是個很大的二維數組,設置網格解析度、車的坐標和地形可以產生一個映射關系。當打開噴灌車噴灑開關時,觸動粒子系統,判斷車是否運動。若運動,則以噴藥機本身的 localPosition 計算一個矩形框,計算變換的土地范圍,利用 Terrain. terrainData 取得所有圖片基礎數據存入數組中,干土地材質為 0,濕土地為 1; 利用 GetAl-phamaps 將圖片數據取出變換由 0 序號材質變為 1 序號材質,將更換的圖片數據通過 SetAlphamaps 賦予回數組中。如此循環,直到噴藥機運動停止關閉噴灑按鈕。最終實現噴灌車展開噴灑的效果如圖 12 所示?!緢D12.略】
4 結論
通過多個三維建模工具及材質處理工具的綜合運用,實現了符合虛擬仿真要求的農田噴灌車三維模型。利用比較成熟的虛擬物理引擎以及對車輪轉彎運動的分析,實現了農田噴灌車的模擬行駛效果。在觀察機械臂伸縮運動規律的基礎上,通過合理規劃模型對象的父子關系,利用旋轉運動實現了機械臂復雜運動仿真。由于一般的機械運動都是這種旋轉操作,因此“父子關系加旋轉”的設計方法可以推廣到大部分機械運動仿真算法中。
參考文獻:
[1] 王凱湛,馬瑞峻. 虛擬現實技術及其在農業機械設計上的應用[J]. 系統仿真學報,2006,18\\( 2\\) : 500-503.
[2] 王凱湛,馬瑞峻. 基于 Pro/E 的機械手式水稻拋秧機的虛擬樣機設計[J]. 農機化研究,2008\\( 6\\) : 89-92.
[3] 趙玲. 基于 3DMAX 的模型優化的研究[J]. 科學技術與工程,2010,26\\( 10\\) : 6566-6568.
[4] 徐鐘明,蘇張志飛,余烽. 車輛轉彎制動橫向軌跡控制駕駛員模型研究[J]. 公路交通科技,2008,25\\( 7\\) : 147-150.
[5] 淮永建,王梅峰,左正興,等. 基于多體動力學理論的賽車游戲引擎的設計與實現[J]. 計算機應用,2005,25\\( 2\\) :415-417.