摘要:為了實(shí)現(xiàn)人—車—路系統(tǒng)虛擬仿真中的人機(jī)交互,從軟/硬件兩個(gè)方面研究了半實(shí)物模型中加速踏板、制動(dòng)踏板、離合器、變速器、方向盤等駕駛操作信號(hào)的數(shù)據(jù)采集技術(shù)。利用數(shù)據(jù)擬合技術(shù),獲得了駕駛操作參數(shù)的計(jì)算模型。硬件系統(tǒng)采用分布式上下位機(jī)結(jié)構(gòu),上下位機(jī)之間采用點(diǎn)對(duì)點(diǎn)方式進(jìn)行RS-232接口通信。上位機(jī)以視景主控工作站作為硬件環(huán)境,利用多線程技術(shù)、計(jì)算機(jī)串行通信技術(shù)開(kāi)發(fā)了模擬駕駛操作數(shù)據(jù)采集軟件模塊。下位機(jī)由89S52單片機(jī)控制,采用C語(yǔ)言進(jìn)行程序設(shè)計(jì)。
關(guān)鍵詞:虛擬仿真;人—車—路;數(shù)據(jù)采集;串行通信
中圖分類號(hào):TP391.9文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2007)07-0229-03
人—車—路(環(huán)境)虛擬仿真是將虛擬現(xiàn)實(shí)技術(shù)用于公路線形、交通工程設(shè)施等道路安全評(píng)價(jià)、設(shè)計(jì)優(yōu)化研究的一門綜合性技術(shù)。通過(guò)建立設(shè)計(jì)公路、設(shè)施的虛擬三維模型,在具有高度沉浸感的環(huán)境中進(jìn)行虛擬仿真試驗(yàn),把數(shù)字信息變?yōu)橐詧D形圖像形式表示、隨時(shí)間和空間變化而變化的直觀仿真過(guò)程呈現(xiàn)在人們面前。通過(guò)人—車—路(環(huán)境)虛擬仿真系統(tǒng),可以獲得各種定量指標(biāo),對(duì)公路的使用效果、安全性進(jìn)行科學(xué)評(píng)價(jià),為設(shè)計(jì)提供科學(xué)依據(jù)。
為了實(shí)現(xiàn)人—車—路(環(huán)境)虛擬仿真中駕駛?cè)伺c視景的交互,需要利用模擬駕駛設(shè)備對(duì)虛擬場(chǎng)景中的車輛進(jìn)行實(shí)時(shí)操縱。因此,人—車—路(環(huán)境)虛擬仿真系統(tǒng)研究中的一項(xiàng)關(guān)鍵技術(shù)是基于半實(shí)物模型的駕駛操作信號(hào)數(shù)據(jù)采集技術(shù),即利用單片機(jī)技術(shù)、計(jì)算機(jī)串行通信技術(shù)完成對(duì)模擬駕駛操作(加速踏板、制動(dòng)踏板、離合器、變速器、方向盤)等信號(hào)的數(shù)據(jù)采集工作,其開(kāi)發(fā)工作包括硬件和軟件兩方面內(nèi)容。
1數(shù)據(jù)采集系統(tǒng)硬件開(kāi)發(fā)
1.1硬件系統(tǒng)概述
人—車—路(環(huán)境)虛擬仿真是利用模擬駕駛操作臺(tái)作為輸入設(shè)備,并結(jié)合三通道柱面投影顯示系統(tǒng)進(jìn)行的虛擬試驗(yàn)。硬件系統(tǒng)采用了分布式上下位機(jī)結(jié)構(gòu),上下位機(jī)之間采用RS-232接口、點(diǎn)對(duì)點(diǎn)方式進(jìn)行通信。上位機(jī)以視景主控計(jì)算機(jī)作為硬件環(huán)境,下位機(jī)由89S52單片機(jī)控制[1]。系統(tǒng)結(jié)構(gòu)如圖1所示。下位機(jī)系統(tǒng)布局如圖2所示。下位機(jī)系統(tǒng)的通信模塊采用了Maxim公司的MAX202作為TTL電平到RS-232電平的轉(zhuǎn)換器件。智能測(cè)控單元采用89S52單片機(jī)作為控制核心,由于該芯片內(nèi)置了8 KB的Flash ROM,無(wú)須再擴(kuò)展程序存儲(chǔ)器。系統(tǒng)擴(kuò)展了32 KB RAM,用做數(shù)據(jù)存儲(chǔ)區(qū)和采集信號(hào)的存儲(chǔ)緩沖區(qū)[2]。
模擬駕駛實(shí)驗(yàn)臺(tái)中的方向盤轉(zhuǎn)角、加速踏板、制動(dòng)踏板、離合器踏板位移等信號(hào)均采用精密電位器作為傳感器來(lái)進(jìn)行數(shù)據(jù)采集。系統(tǒng)中傳感器激勵(lì)電壓為10 V,由模擬量信號(hào)調(diào)理電路產(chǎn)生并供給。上述傳感器的輸出信號(hào)經(jīng)過(guò)放大,轉(zhuǎn)換成0~10 V的標(biāo)準(zhǔn)電壓信號(hào)后,送到模擬/數(shù)字轉(zhuǎn)換電路中進(jìn)行A/D轉(zhuǎn)換。
對(duì)于變速桿,由于其只在換擋過(guò)程中的某一時(shí)刻產(chǎn)生突變,大多數(shù)時(shí)間保持不變,并且對(duì)于某一擋位而言,其狀態(tài)只有兩種,在變速桿上安裝了六個(gè)開(kāi)關(guān)作為其傳感器,分別表示1、2、3、4、5、R擋位的狀態(tài),通過(guò)光電隔離的開(kāi)關(guān)量輸入信號(hào)調(diào)理模塊,進(jìn)行驅(qū)動(dòng)和調(diào)理。
1.2駕駛操作計(jì)算模型
在人—車—路(環(huán)境)虛擬仿真系統(tǒng)中,車輛的運(yùn)動(dòng)是根據(jù)動(dòng)力學(xué)計(jì)算模型來(lái)實(shí)現(xiàn)的。車輛動(dòng)力學(xué)計(jì)算模型的輸入是駕駛?cè)说膶?shí)時(shí)操縱。因此,為了能夠獲得操作信號(hào)的數(shù)值,需要獲得操作參數(shù)數(shù)值和輸出電壓間的關(guān)系,即駕駛操作計(jì)算模型。通過(guò)數(shù)據(jù)擬合技術(shù),得到的計(jì)算模型如下:
2 數(shù)據(jù)采集系統(tǒng)軟件設(shè)計(jì)
2.1通信協(xié)議
為了保證上下位機(jī)通信的可靠性,必須設(shè)計(jì)完善的通信協(xié)議[3]。本系統(tǒng)采用的通信方式定義如表1所示[4]。命令幀格式說(shuō)明如表2所示。數(shù)據(jù)幀格式說(shuō)明如表3所示。數(shù)據(jù)區(qū)格式說(shuō)明如表4所示。
2.2下位機(jī)通信
下位機(jī)與上位機(jī)的通信采用RS-232通信標(biāo)準(zhǔn)。89S52單片機(jī)內(nèi)置了一個(gè)UART(通用異步接收/發(fā)送)用于串行通信;TXD引腳用于數(shù)據(jù)發(fā)送;RXD引腳用于接收數(shù)據(jù)。TXD和RXD引腳使用的是TTL電平,不能直接用于RS-232的通信,因此系統(tǒng)選用了Maxim公司的MAX232芯片作為TTL電平與RS-232電平之間的電平轉(zhuǎn)換器件[5]。智能測(cè)控單元(下位機(jī))的程序采用C語(yǔ)言進(jìn)行設(shè)計(jì),利用中斷服務(wù)子程序來(lái)完成串行通信數(shù)據(jù)的接收和發(fā)送。下位機(jī)主控程序流程如圖3所示。串行中斷服務(wù)子程序流程如圖4所示。
2.3上位機(jī)通信
上位機(jī)的通信程序是虛擬仿真系統(tǒng)的一部分,它是在Windows環(huán)境下利用Visual C++6.0平臺(tái)開(kāi)發(fā)的,而視景仿真則是在Vega API的基礎(chǔ)上啟動(dòng)渲染線程實(shí)現(xiàn)的。上位機(jī)的通信程序采用了Windows API實(shí)現(xiàn)。
在Windows系統(tǒng)中,串行通信有查詢和事件驅(qū)動(dòng)兩種工作方式。兩種工作方式各有優(yōu)缺點(diǎn):查詢方式占用部分CPU時(shí)間,但數(shù)據(jù)不易丟失;事件驅(qū)動(dòng)方式雖然占用極少的CPU時(shí)間,但數(shù)據(jù)容易丟失,且難以進(jìn)行采集頻率的控制。本系統(tǒng)中上位機(jī)的通信模塊設(shè)計(jì)采用了查詢方式。
計(jì)算機(jī)所接收的通信請(qǐng)求往往是異步的、突發(fā)性的。而系統(tǒng)接收串口通信請(qǐng)求后,只與通信緩沖區(qū)進(jìn)行數(shù)據(jù)交換,并不產(chǎn)生相應(yīng)消息通知用戶進(jìn)程[6]。因此,用戶進(jìn)程必須定時(shí)查詢通信狀態(tài)并自覺(jué)對(duì)通信緩沖區(qū)進(jìn)行訪問(wèn),否則會(huì)造成對(duì)串口通信請(qǐng)求反應(yīng)不及時(shí),使緩沖區(qū)發(fā)生溢出,通信出錯(cuò)。此外,若通信過(guò)程出現(xiàn)錯(cuò)誤而不能及時(shí)被發(fā)覺(jué),將造成通信過(guò)程長(zhǎng)時(shí)間停滯。為解決上述問(wèn)題并滿足系統(tǒng)對(duì)實(shí)時(shí)性的要求,在通信模塊的開(kāi)發(fā)中使用了多線程技術(shù),即啟動(dòng)了另外一個(gè)輔助線程來(lái)利用循環(huán)查詢方式讀取串口數(shù)據(jù)。當(dāng)輔助通信線程監(jiān)測(cè)到有通信請(qǐng)求時(shí),發(fā)送自定義消息,調(diào)用相應(yīng)的消息處理函數(shù)與下位機(jī)建立通信,讀取駕駛操作數(shù)據(jù)。基于多線程的上位機(jī)串行通信流程如圖5所示。
上位機(jī)的串行通信過(guò)程如下:
(1)打開(kāi)串行口。用CreateFile函數(shù)打開(kāi)串行口,創(chuàng)建通信資源的句柄。
(2)初始化串行通信資源。串行口打開(kāi)成功后,進(jìn)行串行口的初始化工作,配置串行口的通信參數(shù),如波特率、數(shù)據(jù)位數(shù)、停止位、校驗(yàn)位等。使用設(shè)備控制塊DCB修改這些參數(shù);使用CreateEvent為讀/寫(xiě)、自定義消息創(chuàng)建通信事件。
(3)超時(shí)設(shè)置。編寫(xiě)通信應(yīng)用程序的一個(gè)關(guān)鍵問(wèn)題是如何處理通信中的不可預(yù)知事件,如接收數(shù)據(jù)過(guò)程突然被中斷,或者發(fā)送數(shù)據(jù)突然停止等。如果處理不當(dāng),可能會(huì)引起I/O線程掛起或者線程被無(wú)限阻塞。因此在系統(tǒng)中使用了Set-CommTimeouts函數(shù)來(lái)設(shè)置通信異常的相應(yīng)處理規(guī)則。
(4)創(chuàng)建輔助通信線程。
(5)向下位機(jī)發(fā)送讀數(shù)據(jù)命令。使用WriteFile()函數(shù)向串口寫(xiě)數(shù)據(jù)。
(6)通過(guò)RS-232讀取操作數(shù)據(jù)。使用ReadFile()讀串口數(shù)據(jù)。
(7)數(shù)據(jù)分析。如有駕駛操作信號(hào)產(chǎn)生,則向主線程發(fā)送數(shù)據(jù)。
(8)關(guān)閉串口。使用CloseHandle()函數(shù)關(guān)閉串口通信資源。
3 結(jié)束語(yǔ)
本文利用單片機(jī)技術(shù)、計(jì)算機(jī)串行通信技術(shù),實(shí)現(xiàn)了基于半實(shí)物模型的人—車—路虛擬仿真中加速踏板、制動(dòng)踏板、離合器、變速器、方向盤等駕駛操作信號(hào)的數(shù)據(jù)采集。系統(tǒng)采用分布式上下位機(jī)結(jié)構(gòu),上下位機(jī)之間采用了點(diǎn)對(duì)點(diǎn)方式進(jìn)行RS-232接口通信。由于采用了基于多線程和查詢方式的模塊開(kāi)發(fā)技術(shù),系統(tǒng)具有很好的實(shí)時(shí)性和魯棒性。利用該數(shù)據(jù)采集系統(tǒng),成功地進(jìn)行了駕駛?cè)税踩刂栖囁俚奶摂M仿真試驗(yàn)。試驗(yàn)畫(huà)面如圖6所示。該系統(tǒng)的開(kāi)發(fā)方法,同樣適用于其他類型的人機(jī)交互環(huán)境。
參考文獻(xiàn):
[1]馬忠梅, 籍順心, 張凱,等. 單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版杜, 1998.
[2]李廣軍, 王厚軍. 實(shí)用接口技術(shù)[M].成都:電子科技大學(xué)出版社, 1998.
[3]馬玉春, 宋瀚濤. 串行通信協(xié)議的研究及應(yīng)用[J]. 計(jì)算機(jī)應(yīng)用研究, 2004, 21(4):228-229.
[4]林勇, 劉奔常. 基于DCOM的點(diǎn)對(duì)點(diǎn)數(shù)據(jù)遠(yuǎn)程傳輸[J]. 計(jì)算機(jī)應(yīng)用研究, 2003, 20(9):139-142.
[5]陰曉峰, 譚晶星, 雷魚(yú)龍,等. 基于串行通信的車載信息在線監(jiān)測(cè)系統(tǒng)[J].計(jì)算機(jī)工程, 2004,30(6):65-67.
[6]曹羅生. 基于多線程技術(shù)的異步串行通信的實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2004, 21(6):60-62.
注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”