(長安大學 汽車學院,西安 710064)
汽車駕駛模擬器是一種能夠正確模擬汽車駕駛動作,使駕駛者有實車駕駛感受的仿真設備[1]。駕駛者通過操縱汽車駕駛模擬器上的人機交互設備來感受類真實的汽車駕駛狀態,通過場景建模、音效渲染等虛擬現實技術獲得良好的沉浸感。汽車駕駛模擬器不僅能夠模擬科目二、科目三、城市工況、高速工況、環山路等多種道路狀況,還能夠模擬夜晚、雨雪、霧天等多種天氣狀況[2],使駕駛者在操作過程中熟悉駕駛環境,提高適應能力及反應速度。由于汽車駕駛模擬器安全高效、節能環保等優點,目前被廣泛用于駕駛員模擬考試、科研及教學等多種領域[3]。
汽車駕駛模擬器系統可分為視景仿真系統、軟件設計系統、硬件控制系統三大部分,其中硬件控制系統主要包括模擬器數據采集系統、數據通信系統、儀表控制系統、力反饋系統等。控制系統能夠實時地采集駕駛者的操作狀態數據并實現與主控計算機的通信、儀表盤控制及方向盤回正[4],是實現人機交互的重要基礎。因此,為了保證模擬器有良好的沉浸感、交互性與實時性,應對控制系統進行合理設計。
本文設計的汽車駕駛模擬器控制系統具有精確度高、擴展性強、成本低等特點。其中數據采集系統基于ATmega2560單片機進行設計,能夠獲取汽車踏板、方向盤、安全帶、點火開關、照明燈光、轉向燈光、危險報警閃光燈、換擋機構、手剎、喇叭、雨刷、后視鏡位置等狀態信息。使用Arduino UNO R3開發板、電機擴展板、步進電機實現了車速表和轉速表的控制,并借助VS2010完成了與主控計算機之間的通信,確保模擬器的工作實時、高效、準確。
設計汽車駕駛模擬器控制系統,首先需要明確其功能需求,根據需求確定系統總體方案設計[5]。該系統需要考慮的功能需求主要如下:

圖2 數據采集系統硬件設計框圖
1)能精確實現基本駕駛操作。由于科目二考試練習需要,方向盤、離合踏板、制動踏板、加速踏板、后視鏡位置調節旋鈕等模擬信號傳輸應較為精準,結合車輛動力學模型呈現出較高質量的車輛半聯動狀態。車輛起步、行駛和停車時用到的安全帶、點火開關、手剎、換擋機構、喇叭、左右轉向燈、危險報警閃光燈及特殊天氣時使用的霧燈、示廓燈、遠近光燈、雨刷等信號傳輸應高效可靠。駕駛模擬器結構組成應符合行業標準JT/T 378-2014《汽車駕駛培訓模擬器》的要求。此為汽車駕駛模擬器最基本且最重要的任務;
2)車輛狀態顯示。在汽車行駛過程中需要實時監控車輛速度及發動機轉速,設計儀表盤實物可以更加直觀地顯示車輛狀態,并使駕駛員養成良好的駕駛習慣。
3)實時響應、安全可靠。延時響應不僅影響到駕駛者的體驗感,還可能使科目二、科目三模擬考試無法正常進行,因此所有的硬件設備都應快速響應,分離數字信號和模擬信號,盡量減少模擬信號收到的干擾源,并優化串口通信,給駕駛者更好的交互感和沉浸感。
為實現上述功能需求,本方案基于開源平臺、低功耗的AVR單片機設計了數據采集系統,將采集到的設備操作狀態分為模擬信號和數字信號分別處理,數據以數據幀的方式傳輸給主控計算機。主控計算機根據串口通信協議讀取各類數據,結合動力學模型、視景平臺和音效完成模擬駕駛功能。然后,主控計算機將動力學模型計算得到的車速和發動機轉速等信息生成數據幀寫入儀表控制系統,驅動步進電機旋轉。系統總體結構框圖如圖1所示。

圖1 系統總體結構框圖
根據需求分析,汽車駕駛模擬器數據采集系統共需6路模擬輸入,23路數字輸入。而ATmega2560單片機有100個管腳,其中包括16路模擬輸入,54路數字輸入/輸出,4路UART接口[5],適合本系統大量IO接口的設計需求。
本系統采用ATmega2560單片機為主控制器,并設計了電源電路、時鐘電路、復位電路、數據采集電路、濾波電路、串行接口電路[6],其與主控計算機的通信采用UART(Universal Asynchronous Receiver and Transmitter)接口, USB轉TTL設備采用以CH340芯片為核心的集成模塊,單片機燒錄程序采用ICSP(In-Circuit Serial Programming)接口[7]。具體硬件設計框圖如圖2所示。下文著重設計了電源電路及數據采集電路。
2.1.1 電源電路設計
電源模塊可為系統提供5 V和3.3 V電源,電源電路包括外接電源供電電路、電源濾波電路、電源穩壓電路、USB供電電路、電源切換電路等。在此電路中當運算放大器輸入端V+

圖3 電源電路
2.1.2 模擬信號電路設計
模擬信號的采集使用了線性型霍爾傳感器、電位器和PS2操縱桿。由于科目二考試中車輛大部分時間處于半聯動狀態,因此對方向盤和三踏板的精確度要求比較高,為了更好地模擬考試評分制度,需要此類模擬信號穩定且準確。除了傳感器標定及動力學模型搭建以外,數據采集系統硬件濾波電路也是不可缺少的。本系統在模擬輸入端加入電源去耦電容及輸出端對地的濾波電容??紤]到科目二考試中需用到后視鏡調節按鈕,PS2操縱桿可提供上下、左右兩個方向的模擬信號,能夠模擬真實車輛中手動型后視鏡調節按鈕。模擬信號電路如圖4所示。

圖4 模擬信號電路
2.1.3 數字信號電路設計
數字信號的采集使用了開關型霍爾傳感器和開關控制電路兩大類。換擋機構使用集成的開關型霍爾傳感器模塊,其本質為數字信號輸出,相當于6個開關信號,操縱桿擺動到相應擋位時,此擋位輸出為高電平,其余擋位輸出為低電平。其余數字信號本質也為開關量,根據電路系統本身需要設計為上拉電阻或下拉電阻式開關控制電路。以轉向燈信號為例,左、右轉向燈信號輸出端對地各接一個10 k Ω的下拉電阻,與電源之間接各有一個開關,當某一轉向燈開啟時,對應的開關閉合,完成輸出信號由低電平到高電平的變化。危險報警閃光燈開啟時,兩個開關同時閉合。相應的開關控制電路如圖5所示。

圖5 開關控制電路
步進電機28BYJ-48電機是永磁型單極性四相步進電機,電機工作電壓為5~12 V??刂破鬟x用Arduino UNO R3開發板,具有6路模擬輸入,14路數字輸入/輸出。28BYJ-48步進電機有5個引腳,需接入4路數字信號,1路GND,由此可知開發板滿足儀表控制系統硬件需求。配套使用Arduino AFMotor電機擴展板,并外接12 V直流電源供電,擴展板帶有兩個L293D芯片,可驅動兩個電機同時轉動。L293D是一種雙橋驅動芯片,每一個L293D可同時驅動1路步進電機或者2路直流電機[10],連接示意圖如圖6所示。

圖6 步進電機驅動電路連接示意圖
硬件設計保證了信號傳輸的可靠性,而軟件設計可以保證汽車駕駛模擬器具體動作的準確性、實時性。軟件設計分為單片機程序設計和串口通信設計兩部分,本系統中單片機程序設計采用Arduino平臺的開發工具Arduino IDE,通過C++語言編程,可直接將程序燒寫進單片機。ATmega2560帶有ICSP在線串行編程功能,通過VCC、MISO、MOSI、SCK、GND、RESET等6個接口為單片機燒錄程序,通過UART實現與主控計算機的通信功能。Arduino UNO R3開發板則通過開發板上的USB接口芯片ATmega16U2實現與主控計算機的通信功能。主控計算機程序用VS2010開發,用于處理單片機發送的數據幀,提取各模擬信號值和數字信號值并代入車輛動力學模型。
單片機的主要功能包括定義引腳、數據采集與處理、信號濾波、生成數據幀等,數據采集系統軟件控制流程圖如圖7所示。其中決定汽車駕駛模擬器真實感的部分是數據的采集與處理[11],尤其是模擬信號量的處理方式,所以需對模擬信號增加軟件濾波設計,使信號更加穩定。由于ATmega2560內置模數轉換功能,能將輸出的模擬信號轉變為數字量,且線性型霍爾傳感器和電位器的模擬信號量都呈線性變化,可以用map()函數作映射。數字信號用一位或多位開關量表示。模擬信號通過analogRead()讀取信號值,數字信號需用pinMode(pin,INPUT)設置引腳為輸出模數,再通過digitalRead()讀取信號值,最后數據幀以數組的形式發送。需注意在Arduino IDE中設置的波特率要與主控計算機程序的波特率一致。

圖7 數據采集系統軟件控制流程圖
本系統軟件設計主要用到三部分:1)Arduino第三方庫AccelStepper,使開發板可以同時控制兩個28BYJ-48步進電機;2)第三方庫AFMotor,使步進電機可以在AFMotor電機擴展板的配合下進行工作;3)定時中斷函數。儀表控制系統軟件控制流程如圖8所示。
步進電機驅動程序的設計過程中需要解決以下問題:1)由于數據幀發送頻率很快,電機還未轉到目標位置時就會得到下一幀的目標位置,容易出現電機指針抖動或者錯亂的現象; 2)若下一幀目標位置與上一幀相同,電機會返回位置0重新轉動。為解決這些問題,保證數據穩定,需在電機未到目標位置時關閉串口,且在檢測到下一幀目標位置與上一幀目標位置相同時開啟定時中斷,每100ms檢測一次,直到目標位置不同時,通過moveTo()函數賦予電機輸出軸目標位置,再用run()函數執行轉動指令。
單片機向主控計算機實時發送數據幀,數據幀由幀頭和數據信息構成[12],每一類信號都由信號位置標識符、分隔符和信號輸出值組成,使數據信息能夠被主控計算機分類提取[13]。數據幀格式如表1所示。

表1 數據幀格式
采用UART通信,在Arduino IDE中查看當前設備的COM口編號,在VS2010環境下編程,首先由com[0].Open()函數設置波特率并打開串口,設置緩沖器長度,由com[0].Read()函數讀取數據幀信息,然后根據數據幀中信號位置標識符和分隔符讀取各信號值[14]。同時將動力學模型中的車速和發動機轉矩提取出來,發送給Arduino UNO R3開發板,查看COM口編號,由com[1].Open()函數設置波特率并打開串口,經過開發板上的USB接口芯片,用com[1].Write()函數完成通信。變量的信號輸出值范圍示例如表2所示。

表2 變量的信號輸出值范圍示例
為了驗證本系統的準確度與實時性,在駕駛模擬器上進行實驗,實驗結果表明:23路數字信號響應迅速、準確,離合、制動、加速踏板能實現汽車半聯動的狀態,但在倒車入庫、側方停車等項目中發現方向盤精度不夠高,從而影響模擬科目二考試結果。因此需要對方向盤進行準確標定。汽車方向盤可旋轉1 080°,設最左邊為-540°,最右邊為540°,以每10°為單位測量線性型霍爾傳感器的模擬信號值,并做5次實驗求取平均值,得到圖9實線部分。

圖9 方向盤標定結果
由圖9實線部分可知,方向盤在轉動的過程中并不完全是線性變化的,尤其在右轉彎時會有較大的偏差。由實驗值擬合的一元二次函數:
y=0.501 5x+370
(1)
引入誤差指標R2來評價擬合曲線的精確度,其范圍為0-1,越接近1說明擬合曲線的精確度越高。R2能夠通過如下公式得到:
(2)

由此公式得到擬合函數的R2為0.98902,為使方向盤完全準確,擬合函數的R2應盡量接近1,可采用分段函數的方式,在擬合產生較大偏差時斷開,從而使擬合曲線與實驗測量值的誤差保持在一定范圍內。經過多次試驗,確保方向盤每90°的模擬信號值盡量準確,所得的分段函數為:
y=
(3)
如圖9所示,分段擬合后的函數值基本與實驗平均值完全重合,分段后R2為0.999 79,信號處理過程優化前后對比如表3所示。證明優化后方向盤在轉動過程中,角度與模擬信號值的對應關系較為準確,由此可根據單片機發送的模擬信號值得到方向盤轉動角度,將此數值代入汽車動力學模型中,根據方向盤和車輪轉動角度的比例關系,可以得到當前狀態車輪的轉動角度。

表3 方向盤信號處理過程優化前后對比
優化后的汽車駕駛模擬器控制系統在功能的實現方面滿足行業標準(JT/T 378-2014),且準確性和實時性較好。在真實駕考場地等比例還原的仿真視景平臺中實驗,該系統可以完成倒車入庫、側方停車、坡道起步、直角轉彎、S彎等所有科目二考試科目,且能夠在多種工況中穩定行駛,即使在崎嶇的環山路中也能保持良好的實時性及沉浸感。經多次實驗,模擬信號和數字信號傳輸準確率達100%。另外,車速表和轉速表在低速工況下表現較好,但高速時稍有延遲。對于此問題,需要通過優化儀表控制系統軟件程序來解決。本系統在駕駛模擬器實驗平臺上驗證如圖10所示。

圖10 本系統在駕駛模擬器實驗平臺上驗證
本文設計開發了一種基于單片機的汽車駕駛模擬器硬件控制系統,分為數據采集系統和儀表控制系統兩部分。對汽車駕駛模擬器進行需求分析后,基于Arduino平臺設計了數據采集電路、數據處理程序及電機控制程序,并優化了方向盤的信號傳輸精度,符合行業標準JT/T 378-2014《汽車駕駛培訓模擬器》的功能要求。且硬件電路簡單、可靠性好、成本低。并通過串口通信使主控計算機同時完成讀寫,最后在汽車駕駛模擬器上對該系統進行多次實驗驗證。實驗結果表明:系統實時性、穩定性和沉浸感較好,取得了理想效果。