趙守凱,南楠
(湛江幼兒師范專科學(xué)校,廣東湛江 524084)
十字路口交通燈控行車(chē)實(shí)驗(yàn)是數(shù)字電子技術(shù)課程比較典型的實(shí)驗(yàn),也是高校信息電子類專業(yè)特別重要的實(shí)驗(yàn)之一。讓學(xué)生了解相關(guān)的實(shí)驗(yàn)規(guī)程、實(shí)驗(yàn)設(shè)備和裝置、操作技巧并進(jìn)行實(shí)踐訓(xùn)練,對(duì)提高其數(shù)字電路實(shí)踐能力和創(chuàng)新意識(shí)具有重要意義。很多高校采用傳統(tǒng)的交通燈控行車(chē)實(shí)驗(yàn),學(xué)生不能在逼真度較高的三維場(chǎng)景下操作交通燈指揮行車(chē)虛擬仿真實(shí)驗(yàn)。應(yīng)用Unity3D 引擎、3ds Max 等VR 技術(shù)能夠有效地解決上述問(wèn)題。虛擬現(xiàn)實(shí)(Virtual Reality,VR)技術(shù)是指采用計(jì)算機(jī)技術(shù)為核心的現(xiàn)代高科技生成逼真的視、聽(tīng)、觸覺(jué)一體化的特定范圍的虛擬環(huán)境(Virtual Environment,VE),用戶可借助特殊的輸入/輸出設(shè)備,以自然的方式與虛擬環(huán)境中的對(duì)象進(jìn)行交互,通過(guò)視覺(jué)、聽(tīng)覺(jué)和觸覺(jué)等獲得身臨其境的感受和體驗(yàn)的一門(mén)交叉學(xué)科[1-3]。VR 技術(shù)在教學(xué)實(shí)驗(yàn)中的應(yīng)用已越來(lái)越廣泛。
Unity4.6 推出的UGUI 系統(tǒng)由于開(kāi)發(fā)UI 界面效率高、易于使用、有較好的兼容性等特點(diǎn),受到越來(lái)越多開(kāi)發(fā)者的青睞。實(shí)驗(yàn)界面的UI 設(shè)置主要有實(shí)驗(yàn)界面背景、實(shí)驗(yàn)名稱、操作按鈕等。通過(guò)實(shí)驗(yàn)界面跳轉(zhuǎn)到實(shí)驗(yàn)場(chǎng)景[4-6],開(kāi)啟實(shí)驗(yàn)開(kāi)關(guān)后即可進(jìn)行實(shí)驗(yàn)電路連接操作,電路連接成功后立即提示實(shí)驗(yàn)連接成功并輸出交通燈指揮行車(chē)VR 場(chǎng)景。實(shí)驗(yàn)流程設(shè)計(jì)如圖1 所示。
圖1 實(shí)驗(yàn)流程
設(shè)計(jì)一個(gè)甲、乙兩條干道交叉的十字路口交通燈邏輯電路。每個(gè)干道各一組交通指示燈,依次顯示綠、黃、紅指示信號(hào)。信號(hào)燈具備倒計(jì)時(shí)顯示功能,當(dāng)甲干道綠燈亮?xí)r從60 s 開(kāi)始倒計(jì)時(shí),此時(shí)乙干道紅燈亮;甲干道60 s 倒計(jì)時(shí)為0 時(shí),顯示黃燈并從3 s 開(kāi)始倒計(jì)時(shí),此時(shí)乙干道紅燈依然亮;當(dāng)甲干道黃燈亮,并倒計(jì)時(shí)為0 時(shí),黃燈變?yōu)榧t燈,此時(shí)乙干道綠燈亮并從60 s 開(kāi)始倒計(jì)時(shí)為0;然后,乙干道黃燈亮3 s 并倒計(jì)時(shí),甲干道紅燈依然亮,當(dāng)乙干道黃燈倒計(jì)時(shí)為0 時(shí)變?yōu)榧t燈;最后,又是甲干道綠燈亮并倒計(jì)時(shí),乙干道變紅燈,依照以上順序交替出現(xiàn)紅、黃、綠燈信號(hào)并循環(huán),實(shí)現(xiàn)十字路口交通燈指揮行車(chē)管理的自動(dòng)化。部分電路連接圖如圖2 所示。
圖2 部分電路連接圖
實(shí)驗(yàn)箱[7-9]是實(shí)驗(yàn)操作的核心,利用3ds Max 建模工具建立的實(shí)驗(yàn)箱模型主要包括74LS192N、74LS04N、74LS32N 等電路芯片、電路板、電容電阻、顯示屏、數(shù)碼指示燈、發(fā)光二級(jí)管、實(shí)驗(yàn)箱電源開(kāi)關(guān)等。實(shí)驗(yàn)箱模型保存為FBX 文件以便導(dǎo)入U(xiǎn)nity 3D引擎進(jìn)行VR 實(shí)驗(yàn)開(kāi)發(fā)。建立的數(shù)字電路實(shí)驗(yàn)箱如圖3 所示。
圖3 數(shù)字電路實(shí)驗(yàn)箱
實(shí)驗(yàn)箱電路芯片及相關(guān)儀器的模型建立成功后,需要模擬導(dǎo)線連接電路芯片的過(guò)程,在該實(shí)驗(yàn)中,設(shè)置導(dǎo)線兩端的位置為兩個(gè)芯片插口的中心位置??捎?4LS74N 實(shí)現(xiàn)交通燈有4 種狀態(tài)變換,點(diǎn)擊開(kāi)關(guān)后,實(shí)驗(yàn)箱自動(dòng)打開(kāi),在實(shí)驗(yàn)箱顯示屏出現(xiàn)交通燈電路連接實(shí)驗(yàn)圖,實(shí)驗(yàn)者可根據(jù)實(shí)驗(yàn)圖完成當(dāng)前實(shí)驗(yàn)電路連接。在進(jìn)行電路連接時(shí),每個(gè)端口都設(shè)置名字和位置兩個(gè)屬性。單擊第一個(gè)端口,獲取第一個(gè)端口的名字和位置,單擊第二個(gè)端口時(shí)也獲取第二個(gè)端口的名字和位置,然后在兩個(gè)端口之間生成導(dǎo)線,當(dāng)兩次單擊的端口名字和位置相同時(shí)則判斷是同一個(gè)端口,不產(chǎn)生導(dǎo)線。如果單擊了錯(cuò)誤端口只需再次單擊即可退出。以下為導(dǎo)線連接的控制代碼:
以此類推,74LS192N、74LS32N、74LS04N 等芯片也按照該方法全部連接成功后,在屏幕中央出現(xiàn)電路連接成功的文字和聲音提示“交通燈控電路已正確連接!”,此時(shí)實(shí)驗(yàn)連線己經(jīng)成功搭建完畢[10-12],在實(shí)驗(yàn)箱一側(cè)立即顯示十字路口紅、黃、綠交通信號(hào)燈及車(chē)輛通行效果。電路連接及實(shí)驗(yàn)輸出效果如圖4 所示。
圖4 電路連接及實(shí)驗(yàn)輸出效果
在Unity3D 中用正方體、球體等模型創(chuàng)建交通燈支架和紅、黃、綠燈模型。建立面片作為公路及周邊地面,白色線條作為公路行車(chē)道分隔線,應(yīng)用復(fù)制工具建立4 條行車(chē)線路分割線、給地面設(shè)置合適的草地貼圖即可得到十字路口交通燈行車(chē)場(chǎng)景,通過(guò)控制球體的顏色實(shí)現(xiàn)紅、黃、綠燈顏色變化。設(shè)置兩個(gè)不同角度的攝像機(jī)觀看十字路口紅、黃、綠燈的變化,激活其中一個(gè)的同時(shí)關(guān)閉另外一個(gè)攝像機(jī)[13]。其中,綠燈亮的代碼為:
從Unity3D 資源庫(kù)導(dǎo)入4 種不同外形的汽車(chē),用Instantiate(Car,Vector(x,z,y))函數(shù)實(shí)現(xiàn)生成汽車(chē),以下為隨機(jī)創(chuàng)建汽車(chē)的代碼:
通過(guò)應(yīng)用Random.Range(0,m)函數(shù)隨機(jī)產(chǎn)生汽車(chē),在檢視面板里設(shè)置4 個(gè)共有變量,再把相應(yīng)的預(yù)制物體拉進(jìn)去,sedan 等車(chē)的模型可從prefab 文件夾中直接拖進(jìn),救護(hù)車(chē)走直線而且只在最右的道路,當(dāng)隨機(jī)出現(xiàn)救護(hù)車(chē)時(shí),就只在4 個(gè)不同的緊急路線中選擇第二個(gè)參數(shù)生成物體的位置[14-16],這個(gè)位置可針對(duì)不同的對(duì)象進(jìn)行不同的變化。建立的汽車(chē)行駛場(chǎng)景如圖5 所示。
圖5 汽車(chē)行駛場(chǎng)景
Unity3D 提供碰撞體物理組件,碰撞體與剛體一起促使碰撞發(fā)生,碰撞體一般形狀較為簡(jiǎn)單,外形如方體、膠囊、球體等,在Unity3D 中創(chuàng)建的GameObjects 會(huì)自動(dòng)分配一個(gè)合適的碰撞體,例如:創(chuàng)建一個(gè)立方體會(huì)得到一個(gè)BoxCollide(立方體碰撞體),需要注意的是剛體需要綁定在被碰撞的對(duì)象上才能產(chǎn)生碰撞效果。Unity3D 提供車(chē)輪碰撞體WheelCollider 函數(shù)實(shí)現(xiàn)碰撞偵測(cè)、輪胎物理現(xiàn)象和輪胎模型,專門(mén)用于輪胎,可以通過(guò)Mass 設(shè)置碰撞體質(zhì)量,Radius 設(shè)置半徑等參數(shù)。車(chē)的層次結(jié)構(gòu)一般分為車(chē)身和4 個(gè)輪子。車(chē)身碰撞檢測(cè)用包圍盒,4 個(gè)輪子的碰撞檢測(cè)用車(chē)輪碰撞體(WheelCollider)。汽車(chē)有前后4 個(gè)輪子,一般情況下車(chē)后輪驅(qū)動(dòng),前輪輔助,或者前輪驅(qū)動(dòng),后輪輔助。當(dāng)然也有4 個(gè)輪子同時(shí)驅(qū)動(dòng),因此,通過(guò)設(shè)置需要驅(qū)動(dòng)的輪子即可。可以用碰撞體的方法進(jìn)行設(shè)置,WheelCollider.motorTorque 設(shè)置輪子的動(dòng)力,WheelCollider.steerAngle,設(shè)置輪子的旋轉(zhuǎn)角度。為保持車(chē)輛在地面上穩(wěn)定行駛可設(shè)置車(chē)輪碰撞體(WheelCollider)向地面發(fā)射一條射線,用Physics.Raycast 獲取碰撞點(diǎn),這樣可根據(jù)地面的高低調(diào)整車(chē)輪的位置。采用路線標(biāo)志點(diǎn)和虛擬引導(dǎo)塊可避免行車(chē)時(shí)車(chē)輛之間發(fā)生碰撞[17-19],引導(dǎo)塊引導(dǎo)車(chē)輛正常行駛。車(chē)輛可在指定的路線標(biāo)識(shí)下行駛,創(chuàng)建立方體作為路線標(biāo)志點(diǎn),并保留碰撞屬性、取消可渲染屬性,每一個(gè)汽車(chē)分配一個(gè)引導(dǎo)塊,引導(dǎo)塊駛向標(biāo)志點(diǎn),汽車(chē)跟隨引導(dǎo)塊行駛,引導(dǎo)塊起到緩沖的作用,保證汽車(chē)在轉(zhuǎn)角處圓滑的拐彎。
Unity3D 可支持發(fā)布多種平臺(tái),系統(tǒng)各模塊開(kāi)發(fā)完成后,即可發(fā)布為Windows 平臺(tái)下可執(zhí)行文件,也可發(fā)布為移動(dòng)平臺(tái)Android APP 文件。發(fā)布成功后首先進(jìn)入登錄界面,輸入用戶名、密碼,點(diǎn)擊登錄后即可進(jìn)入實(shí)驗(yàn)系統(tǒng)界面。VR 交通燈控行車(chē)實(shí)驗(yàn)設(shè)置3 種實(shí)驗(yàn)?zāi)J?,分別為學(xué)習(xí)模式、訓(xùn)練模式、考核模式。學(xué)習(xí)模式主要設(shè)置實(shí)驗(yàn)?zāi)康?、?shí)驗(yàn)器材準(zhǔn)備、場(chǎng)景布置、操作布置等電路連接實(shí)驗(yàn)基礎(chǔ)知識(shí)。訓(xùn)練模式環(huán)境下可多次重復(fù)操作實(shí)驗(yàn)以提高實(shí)驗(yàn)熟練程度。在考核模式下實(shí)驗(yàn)者可在規(guī)定時(shí)間內(nèi)完成電路連接實(shí)驗(yàn),提交后即可查看實(shí)驗(yàn)成績(jī)。實(shí)驗(yàn)界面如圖6 所示。
圖6 VR交通燈控行車(chē)實(shí)驗(yàn)
文中主要闡述交通燈控實(shí)驗(yàn)流程,交叉十字路口邏輯電路連接,實(shí)驗(yàn)箱、74LS74N、74LS192N 等功能芯片及相關(guān)儀器的建立,提出應(yīng)用Unity3D 引擎單擊芯片端口實(shí)現(xiàn)電路連接的方法,可減少由于功能芯片仿真不準(zhǔn)確導(dǎo)致三維虛擬環(huán)境下電路連接錯(cuò)誤的問(wèn)題。應(yīng)用Unity3D 引擎設(shè)計(jì)并實(shí)現(xiàn)十字路口交通燈指揮行車(chē)三維虛擬仿真場(chǎng)景。開(kāi)發(fā)出較為完備的十字路口交通燈控行車(chē)三維虛擬仿真實(shí)驗(yàn)系統(tǒng)。解決該實(shí)驗(yàn)教學(xué)無(wú)法在線上開(kāi)展的問(wèn)題,也避免了真實(shí)場(chǎng)景行車(chē)的危險(xiǎn)性。未來(lái)將進(jìn)一步完善數(shù)字電子技術(shù)其他的三維虛擬仿真實(shí)驗(yàn)內(nèi)容,進(jìn)一步增強(qiáng)實(shí)驗(yàn)的沉浸感、交互性、想象性等VR 特性。