王麗俠
(唐山學院 智能與信息工程學院,河北 唐山 063000)
無人駕駛智能車也叫無人車,是指在車內沒有駕駛員的情況下,通過無線遙控或者自身程序來控制汽車的行駛狀態和路徑線路等狀態參數,從而實現無人駕駛[1]。無人車具有廣泛的應用前景,它在智能交通系統上的應用是最典型的,不僅能適應天氣的變化,還能減少交通事故的發生。無人車在軍事上也具有重要作用,例如它可以在危險的核武器和生物化學污染過的地區進行巡邏和偵查,提高搜索的精確度,提高辦事的效率。在農業上,無人車可以用來進行精細作業。因此,無人車的研發顯得十分的必要和迫切。
目前,在無人車的路徑導航方面取得了巨大的研究進展。如麻省理工學院的無人車研發團隊在運動規劃系統中引入RRT算法,以提高其避障能力[2];西安交通大學的馬亮博士針對無人駕駛車輛的運動規劃問題,提出了一種變形RRT算法[3];文獻[4]提出了一種基于地圖匹配的宏觀定位和基于環境感知的微觀定位相結合的綜合定位方法,該方法實現了車輛在局部地圖中的全局精確定位。
本設計將基于全球定位系統GPS和百度地圖API進行無人車控制系統的設計,通過無線串口模塊使監控站與無人車進行信息交互,從而實現對無人車的導航控制。
無人車導航控制系統分為無人車導航終端和監控站兩部分。無人車導航終端以STM32F407為控制核心,并通過雙串口分別與無線傳輸模塊和GPS模塊連接,由此搭建無人車底層硬件平臺,無人車通過433 MHz的無線收發模塊與上位機監控平臺進行數據的無線傳輸。監控站運行于普通用戶配置的PC機,由C#語言編程實現,監控站軟件人機界面通過加載百度地圖的方式,將無人車的路徑信息進行實時顯示與跟蹤,并進行路線規劃與控制。
無人車總體設計框圖如圖1所示。

圖1 無人車總體設計框圖
本設計使用的無人車導航終端由STM32F407單片機模塊、L298N電機驅動模塊、無線串口模塊和GPS模塊四部分組成。L298N電機驅動模塊可以提高電機的運轉速速,從而帶動整個智能車的行駛。單片機STM32F407通過串口1連接無線傳輸模塊,用來和監控站進行數據傳輸;串口2連接GPS模塊,用來獲取定位信息,以進一步上傳給監控站進行顯示。監控站通過無線傳輸模塊發送控制指令信息給無人車,使無人車按規定路線行駛。
在無人車的設計中,STM32F407單片機通過GPIOB的PB1和PB2引腳控制左電機,通過PB3和PB4引腳控制右電機。當PBout(1)、PBout(2)、PBout(3)、PBout(4)均輸出為10,01或00時,對應無人車前進、后退或停止;當PBout(1)、PBout(2)、PBout(3)、PBout(4)輸出為1001時,無人車右轉;當PBout(1)、PBout(2)、PBout(3)、PBout(4)輸出為0110時,無人車左轉。
無線串口模塊為成都億佰特公司生產的E31-TTL-50,這是一款基于AX5043射頻芯片的直插型無線串口模塊,半雙工,使用433 MHz默認工作頻率,它具有抗干擾能力超強、編碼效率高、可加密等特點。設計中,無線模塊采用方式0,M0和M1,均接地,其RXD和TXD分別連接STM32F407單片機的UART1的PA9和PA10。
本設計GPS模塊采用U-BLOX系列中的NEO-6M芯片,考慮到無源陶瓷天線在室內的定位速度較慢,而有源天線定位速度較快,所以將GPS模塊配合有源天線來使用,以快速獲取定位信息。模塊默認波特率為9 600[5]。其中,模塊的TXD發送引腳和RXD接收引腳分別與STM32單片機UART2的PA3(UART2_RXD)和PA2(UART2_TXD)連接。模塊通過固定的幀格式傳遞GPS定位信息,通過編程實現無人車的位置信息的獲取。
2.2.1 無人車行駛設計
在行駛設計中,定義了控制電機的4個引腳,并編寫了5個函數,分別為前進、后退、左轉、右轉和中止函數,來控制無人車。當無人車接收到監控站發送的指令后,先對指令進行識別,判斷發送的是哪種控制信息,調用相應函數。無人車行駛設計的流程圖如圖2所示。
2.2.2 GPS定位設計
從監控站實時觀察無人車的位置,首先需要通過GPS模塊來獲取無人車的位置信息。GPS開始定位后,先把位置信息通過串口2發送給單片機,單片機收到后,再通過串口1發送給監控站。監控站收到無人車的經緯度坐標后,在百度地圖上顯示其位置。

圖2 無人車行駛設計流程圖
GPS數據傳送的流程圖如圖3所示。

圖3 GPS數據傳送流程圖
監控站軟件設計基于Visual Studio 2013平臺,使用C#語言和JavaScript腳本語言編程,結合百度地圖API二次開發來實現。
在Visual Studio 2013中使用SerialPort控件來進行串口通信,流程圖如圖4所示。

圖4 串口通信流程圖
監控站軟件運行后,自動調用GetPortNames()函數,將已連接的端口號顯示在Combobox的下拉列表中,工作人員匹配端口號,設置波特率、數據位、停止位和校驗位信息,設置正確后,監控站和無人車即可進行通信,從而控制無人車行駛及進行路徑信息的顯示。
將百度地圖嵌入監控站界面,既可以顯示出無人車的當前位置,也可以對無人車行駛路線進行規劃。要想實現這個功能需要借助.NET下的WebBrowser控件。
在監控站窗體中從工具箱中拖入WebBrowser控件,用來加載百度地圖API的本地網頁文件,進而顯示百度地圖。此時必須在Ground窗體From中添加一個Load事件,并加入以下代碼:
private void Ground_Load(object sender,EventArgs e)
{string str_url=Application.StartupPath+"BMap.htm";
Uri url=new Uri(str_url);
webBrowser1.Url=url;
webBrowser1.ObjectForScripting=this;
}
Form窗體的Load事件的實現:當打開監控站的界面時,自動與百度地圖的服務器建立連接,將地圖顯示在界面中。百度地圖調用流程圖如圖5所示。
加載地圖后,基于百度地圖的二次開發可實現路線規劃和路線顯示的擴展功能。路線規劃即為在導航軟件中將無人車的路線繪制出來,提取出經緯度信息及速度信息,通過無線串口模塊發送給無人車,使無人車按照既定路線行駛;路線顯示即無人車將路線發送到導航軟件中并顯示到地圖上,使操作者對無人車的行駛軌跡有所了解,從而能夠判斷其運行情況。

圖5 百度地圖調用流程圖
監控站界面運行后,設置串口通信的相關參數,打開串口,準備收發數據。無人車將行駛過程中的位置信息以經緯度的形式實時上報,并顯示在百度地圖中。同時,通過界面控制無人車的行駛路線,實現跟蹤、定位的功能,如圖6所示。界面右側加載百度地圖,地圖中紅色線為規劃路線,路線的經緯度信息以列表形式顯示在地圖左側,點擊發送按鈕即可發送至無人車;藍色線為實際行駛路線,可通過生成經緯度查看其經緯度列表;同時界面還可以顯示行駛速度及當前位置坐標等。

圖6 無人車導航系統監控站運行界面
本文完成了無人車導航終端硬件和軟件設計及監控站軟件設計。經實驗測試,監控站導航界面交互性良好,且與無人車的信息交互穩定、可靠,實時性強,系統拓展性良好,具有一定的實用價值。