王藝儒
摘要:隨著科技的發(fā)展與進步,數(shù)字孿生嶄露頭角。若具有足夠強大的技術(shù),數(shù)字孿生技術(shù)可以完美地復制現(xiàn)實世界。因此數(shù)字孿生當前最大的應(yīng)用方向就是車輛的智能駕駛,即車輛漫游。在現(xiàn)實世界,昂貴的測試金額以及具有限制的實驗場地讓智能駕駛止步不前,而數(shù)字孿生的出現(xiàn),提高了智能駕駛的開發(fā)能力。該文對車輛在虛擬校園的漫游為主要內(nèi)容。首先利用Cityengine和游戲引擎Unity3d對校園環(huán)境、車輛、樹木等場景進行建模。通過C#設(shè)計系統(tǒng)需要的代碼,讓用戶可以在虛擬校園下自由的控制車輛。最后收集車輛的信息、數(shù)據(jù)、參數(shù)等傳輸?shù)骄W(wǎng)絡(luò),進行人工交互功能。系統(tǒng)讓真實校園與虛擬校園成功地結(jié)合,節(jié)約了測試成本,為各大領(lǐng)域提供一種智能駕駛方法,為未來的數(shù)字孿生的發(fā)展奠定了基礎(chǔ)。
關(guān)鍵詞:數(shù)字孿生;Unity3d;三維建模;人機交互;C#
中圖分類號:TP391.9? ? ? 文獻標識碼:A
文章編號:1009-3044(2022)06-0094-03
開放科學(資源服務(wù))標識碼(OSID):
1 數(shù)字孿生
1.1 什么是數(shù)字孿生
什么是數(shù)字孿生?數(shù)字孿生從基礎(chǔ)來看,就是利用某些軟件把現(xiàn)實生活中存在的物體情況通過數(shù)字化體現(xiàn)出來。就像谷歌,百度地圖等,它們將現(xiàn)實生活的建筑物、街道、樹木進行數(shù)字化智能化,然后將信息傳輸?shù)矫總€人的手機上。
數(shù)字孿生被Grieves教授首次提出[1],隨著社會的發(fā)展,數(shù)字孿生的基本思想逐步形成,即虛擬空間中,將數(shù)字模型具有的信息和物理世界的實體互相映射,最后完美地復制出物理實體的活動軌跡及其生物特征。
隨著時代的進步與社會的發(fā)展,數(shù)字孿生逐漸被越來越多的專家提出,通過與物聯(lián)網(wǎng),人工智能,大數(shù)據(jù)等領(lǐng)域結(jié)合并應(yīng)用于各行各業(yè)。同時構(gòu)思了越來越多以數(shù)字孿生為基礎(chǔ)的智能信息模式。
1.2 數(shù)字孿生下的車輛漫游
首先采集數(shù)據(jù)是重中之重。需到現(xiàn)場采集車輛內(nèi)部的照片或圖片,車輛基本尺寸、校園風景、校園建筑、校園行走人員等,建立三維建模所需要用到的材質(zhì)和圖片庫。需要對車輛等信息進行簡化繪制和建模。最后通過物聯(lián)網(wǎng)得到車輛參數(shù)與各結(jié)構(gòu)數(shù)據(jù),設(shè)計數(shù)據(jù)庫,界面設(shè)計,實現(xiàn)交互漫游,最后完成校園車輛漫游管理??偠灾褪浅浞掷梦锢砟P?、傳感器更新、車子運行歷史等數(shù)據(jù),對車輛在不同環(huán)境和路線等進行仿真、監(jiān)測、計算、調(diào)節(jié)、控制和集成,最后在虛擬空間中完成映射,從而反映相對應(yīng)的實體車輛的活動周期過程[2]。
2 三維校園設(shè)計
隨著互聯(lián)網(wǎng)的發(fā)展,三維校園為眾多領(lǐng)域的工作人員帶來巨大的便利。想要成功構(gòu)建與現(xiàn)實相似的三維校園,不同的應(yīng)用技術(shù)有著不同的方法。當前主要的建模方法有:先畫出校園cad圖紙,然后導入3dmax進行建筑建模;直接利用Sketch Up 畫出模型最后渲染; ArcGIS Engine三維建模等。經(jīng)過研究與實驗后,本文使用了專用于大規(guī)模城市仿真的 CityEngine 進行校園模型制作[3]。
2.1 三維校園實現(xiàn)過程
首先,校園建模所需的影像數(shù)據(jù)可以通過 CityEngine 中Get Map Data功能獲取,本文利用了Openstreetmap得到校園地圖具體的建筑信息,路網(wǎng)信息等。在建模前,要了解校園區(qū)域每一個建筑特點,例如顏色,高度,形狀等。通過得到的信息,找到相似的貼圖,最后編寫詳細的參數(shù)規(guī)則[4]。CityEngine中,建筑模型都是通過CGA規(guī)則進行描述的,當一個CGA被指定給一個圖形,那么這個建筑模型就會根據(jù)指定的圖形范圍來生成,如表1所示。
成功構(gòu)建校園后,可以將整體建筑導出為fbx格式,進而導入Twinmotion軟件對植物,道路,人物等進行美化。同時在Twinmotion中在不同環(huán)境下對校園內(nèi)部進行初級的動畫演示。最終結(jié)果如圖1所示。
3 車輛漫游實現(xiàn)
在虛擬的校園環(huán)境下,對車輛進行和現(xiàn)實相同的操作,通過虛擬現(xiàn)實技術(shù)漫游系統(tǒng)在車輛上的應(yīng)用,利用腳本語言、碰撞檢測技術(shù)、界面設(shè)計,使用戶真實了解車輛功能和結(jié)構(gòu),設(shè)計和實現(xiàn)了虛擬車漫游展示系統(tǒng)[5]。
用戶可以像玩游戲一樣,駕駛汽車查看虛擬模型和各種相關(guān)數(shù)據(jù)信息。虛擬車輛與真實車輛也可以同步接收信息與狀態(tài),從而讓虛、實狀態(tài)的同步,進而邁向自動駕駛領(lǐng)域。車輛漫游流程如圖2所示。
3.1 車輛漫游系統(tǒng)
本文選用Unity3d為開發(fā)工具,同時本身內(nèi)置了種類非常多的組件,采用C#作為編輯語言,作為業(yè)界著名的開源游戲引擎,它可以讓使用人員感受到炫酷,現(xiàn)實化的三維游戲,人物,VR等交互界面[6]。因此它非常個人或小型團隊進行使用,如圖3所示。
3.2 車輛漫游跟隨視角
對車輛建模后,令相機跟隨車輛。例如按下Q,E可以左右旋轉(zhuǎn)視角;滾動鼠標滑輪可以放大或者縮小視角[7];
首先,新建C#腳本FollowPlayer并掛載相機上,設(shè)置跟隨物體的Tag值為Player;調(diào)整當前Scene視角對準跟隨物體,按下Ctrl + Shift + F,讓相機視角對準跟隨物體,設(shè)置好相關(guān)參數(shù);之后運行場景,相機即可跟隨游戲物體移動。
3.3 車輛漫游的碰撞技術(shù)
碰撞技術(shù)對Unity3d來說非常重要。在虛擬三維的校園中,建筑物與正在行駛的車輛是相互獨立的。車輛在漫游過程中會自動避開障礙物。而碰撞技術(shù)也可以檢查物體之間是否發(fā)生物理接觸,同時根據(jù)物體的特點做出對應(yīng)的碰撞響應(yīng)[8]。在 Unity3d 里面要想實現(xiàn)碰撞,物體之間都要具有碰撞組件,同時運動的組件具有剛體。這樣可以詳細描繪車輛在漫游時不小心與墻壁,建筑物等相撞時具體的反應(yīng)和狀態(tài)。
另外,車輪碰撞器(WheelCollider)是一種特殊的地面車輛碰撞器,是用Unity3d制作車輛漫游的關(guān)鍵,它可以模擬輪子的碰撞過程,車輛的物理引擎等。
在添加輪子時,可以給車輛添加碰撞器Rigidbody并調(diào)整質(zhì)量。另外在車輛模型下建立名為PhysicalBody的空物體,用于存放車輛的碰撞器組件。同時再添加四個空物體組件代表車輛的四個輪子[9]。在PhysicalBody里添加名為Collider的空物體,用于給車輛添加碰撞器。最后給2個Collider添加BoxCollider組件,然后點擊Collider的屬性面板的Edit Collider調(diào)整位置和大小。再給4個輪子分別添加WheelCollider,根據(jù)Transform的數(shù)值調(diào)整輪子的位置和大小。
3.4 車輛的自動尋路
首先選擇校園場景,設(shè)置可通過區(qū)域與障礙區(qū)域。Inspector視圖窗口static旁的小三角形按鈕顯示下拉列表,選中navigation static。在菜單欄打開Navigation窗口。其中Bake窗口顯示的參數(shù)主要是尋路過程中不同地形的影響,可以根據(jù)需要進行修改。單擊Bake按鈕計算整體地形,得到的尋路數(shù)據(jù)會與目前的Scene相關(guān)聯(lián)[10]。
選中車輛,把得到的尋路組件給予車輛。在菜單欄上選擇Component→Nav Mesh Agent。最后利用C#寫出車輛運動的代碼,讓車輛移動到用戶指定的目的地。最后將代碼指定為車輛的腳本組件,實現(xiàn)了車輛的自動漫游。
4 車輛漫游的交互設(shè)計
車輛在漫游時進行人機交互,用戶在現(xiàn)實生活中控制真實車輛的數(shù)據(jù),利用網(wǎng)絡(luò)將得到的數(shù)據(jù)發(fā)送給Unity3d,進而利用得到的參數(shù)與函數(shù)控制虛擬車輛[11]。同理可知,在虛擬校園中控制車輛,得到的數(shù)據(jù)也可以利用網(wǎng)絡(luò)發(fā)送給現(xiàn)實車輛。實現(xiàn)了用戶在不同環(huán)境下的車輛漫游過程,成功對現(xiàn)實與虛擬進行交互。GUI作為Unity3d的交互界面,它可以通過撰寫代碼,對腳本進行編寫。GUI的代碼需要寫在OnGUI()這個函數(shù)里,每當重啟GUI,都會執(zhí)行這個方法。
首先,在Unity3d里面新建一個C#腳本,把它附加到某個虛擬物品上。然后將OnGUI()函數(shù)放在新創(chuàng)建的腳本里面。同時大多數(shù)GUI控件都需要一個Rect對象,這是因為每種控件都需要設(shè)置其位置和大小。其中,第二個參數(shù)可以為一個字符串,也可以為圖像。另外,Rect對象的四個參數(shù)分別代表:控件左上角x坐標,控件左上角y坐標,控件的寬度,控件的高度。
4.1 車輛漫游交互的功能
1) 利用Carsim或其他軟件,將現(xiàn)實的車輛信息數(shù)據(jù)收集起來,因此虛擬車輛中可以正確獲取相關(guān)的參數(shù)。Carsim以車輛動力學為基礎(chǔ),將數(shù)據(jù)發(fā)送到服務(wù)器,最后控制虛擬場景,駕駛虛擬車輛。
2) 用戶可以切換不同景色,觀測校園下不同景色的車輛漫游過程[12]。代碼如下:
public class changeweather : MonoBehaviour
{
UniStormWeatherSystem_C UniStormSystem;
// Start is called before the first frame update
private void OnGUI()
{
Rect rect1 = new Rect(10, 20, 50, 30);
Rect rect2 = new Rect(10, 60, 50, 30);
Rect rect3 = new Rect(10, 100, 50, 30);
Rect rect4 = new Rect(10, 140, 50, 30);
if ( GUI.Button(rect1, “雨”))
{
UniStormSystem.GetComponent<UniStormWeatherSystem_C>().weatherForecaster = 12; //雨
}
if (GUI.Button(rect3, “晴天”))
{
UniStormSystem.GetComponent<UniStormWeatherSystem_C>().weatherForecaster = 8; //晴天
}
if (GUI.Button(rect4, “霧霾”))
{
UniStormSystem.GetComponent<UniStormWeatherSystem_C>().weatherForecaster = 1; //霧霾
}
}
void Start()
{
UniStormSystem = GameObject.Find(“UniStormSystemEditor”).GetComponent<UniStormWeatherSystem_C>();
}}
3) 在車輛漫游的過程中,可以利用MySql作為校園建筑的數(shù)據(jù)管理與開發(fā)的基礎(chǔ)。首先定義連接數(shù)據(jù)庫的字符串后連接數(shù)據(jù)庫,代碼如下:
public static MySqlConnection Connect()
{
MySqlConnection conn=new MySqlConnection(CONNECTIONSTRING);
try
{
conn.Open();
return conn;
}
catch (Exception e)
{
Console.WriteLine("打開數(shù)據(jù)庫錯誤!"+e);
return null;
}}
因此當用戶在虛擬校園漫游時,也可以利用數(shù)據(jù)庫,通過菜單查詢路過的建筑等物體信息。在車輛漫游的同時完成并實現(xiàn)信息的交互。
5 結(jié)束語
本文構(gòu)建一種虛擬校園環(huán)境下的車輛漫游系統(tǒng)?,F(xiàn)實世界各種動態(tài)可以在虛擬環(huán)境里同步更新,同時虛擬校園也可以做各種測試、分析等結(jié)果,進而進行信息數(shù)據(jù)的傳輸。車輛在現(xiàn)實校園運行的同時,車輛的運動狀態(tài),車輛信息采集后反饋給虛擬場景,從而完成虛、實狀態(tài)的同步,實現(xiàn)整個數(shù)字孿生系統(tǒng)仿真。
參考文獻:
[1] 朱睿.數(shù)字孿生驅(qū)動的螺線管裝配生產(chǎn)線運維系統(tǒng)設(shè)計與研究[D].南京:東南大學,2019.
[2] 葛雨明,汪洋,韓慶文.基于數(shù)字孿生的網(wǎng)聯(lián)自動駕駛測試方法研究[J].中興通訊技術(shù),2020,26(1):25-29.
[3] 孫守清,陳宜金,陳俊美.基于CityEngine和SketchUp的快速精細三維建模[J].北京測繪,2021,35(7):880-883.
[4] 賀體剛,陳鑫.基于CityEngine建模技術(shù)的三維虛擬校園開發(fā)與制作[J].電子技術(shù)與軟件工程,2020(24):42-43.
[5] 李芳,邱利偉,王會艷.虛擬現(xiàn)實技術(shù)漫游系統(tǒng)在軌道車輛上的研究及應(yīng)用[J].科技視界,2018(12):245-246.
[6] Cheliotis K.ABMU:an agent-based modelling framework for Unity3D[EB/OL].[2021-08-20]. https://www.sciencedirect.com/science/article/pii/S2352711021000881.
[7] Lin M,Shan L J,Zhang Y C.Research on robot arm control Based on Unity3D machine learning[J].Journal of Physics:Conference Series,2020,1633(1):012007.
[8] 李虹,陸培培.基于Unity3D的虛擬動畫系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2021,44(8):164-168.
[9] 彭俊江.基于Unity3D的軌道車輛虛擬設(shè)計系統(tǒng)研究[D].南昌:華東交通大學,2020.
[10] 王志崗.基于Unity3D的自動尋路導航系統(tǒng)的研究[J].電腦知識與技術(shù),2019,15(36):209-211.
[11] Ruan Weihua.Design and Implementation of AR Vehicle Display Model Based on Unity3D[C]//International Information and Engineering Association.Proceedings of 2018 3rd International Conference on Mechatronics and Information Technology(ICMIT 2018).International Information and Engineering Association:計算機科學與電子技術(shù)國際學會(Computer Science and Electronic Technology International Society),2018:8.
[12] 萬平,彭俊江,肖乾,等.基于Unity3D的軌道車輛虛擬設(shè)計系統(tǒng)研究[J].華東交通大學學報,2021,38(1):106-112,142.
【通聯(lián)編輯:謝媛媛】