宋玉龍,常然然
(1.西北工業(yè)大學(xué) 電子信息學(xué)院 陜西 西安 710129;2.西北工業(yè)大學(xué) 管理學(xué)院 陜西 西安 710129)
移動機器人是一種在復(fù)雜的環(huán)境下工作的,具有自規(guī)劃、自組織、自適應(yīng)能力的機器人。在移動機器人的相關(guān)技術(shù)研究中,導(dǎo)航技術(shù)可以說是其核心技術(shù),也是其實現(xiàn)真正的智能化和完全的自主移動的關(guān)鍵技術(shù)。移動機器人的導(dǎo)航方式很多,有慣性導(dǎo)航、視覺導(dǎo)航、基于傳感器數(shù)據(jù)導(dǎo)航、衛(wèi)星導(dǎo)航等[1]。對于室外環(huán)境來說,GPS衛(wèi)星導(dǎo)航是首選,而且為了提高機器人導(dǎo)航定位精度以及應(yīng)變復(fù)雜環(huán)境的能力,可以與視覺導(dǎo)航和傳感器數(shù)據(jù)導(dǎo)航相結(jié)合,這樣機器人就可以獨立完成導(dǎo)盲、勘探、自動貨運等復(fù)雜任務(wù)。
這里我們讓機器人事先采集行進路徑上某些點的位置坐標(biāo)構(gòu)建路線,行進過程中實時獲取當(dāng)前坐標(biāo)和移動方向,并與構(gòu)建的路線作比較,從而指導(dǎo)機器人運動。
圖1 系統(tǒng)結(jié)構(gòu)Fig.1 System structure
如圖1所示,本系統(tǒng)采用以GPS導(dǎo)航為主,以攝像頭和超聲波傳感器為輔的方式來實現(xiàn)機器人的自主移動。不過要想自主移動,只有實時GPS導(dǎo)航數(shù)據(jù)是不夠的,機器人要到達某地還必須知道該目的地的位置,以及可走的路徑,這就需要有地圖作為參照??梢允褂镁哂薪?jīng)緯度信息的電子地圖來作匹配,也可以采用更簡單的辦法,即事先在行進路徑上用GPS接收裝置測得幾個點的經(jīng)緯度信息,從而構(gòu)成簡易的行進路線圖,這種方法適用于目的地比較固定且數(shù)量較少的情況。
本設(shè)計以Samsang公司的ARM芯片S3C6410為處理器,嵌入Windows CE 6.0操作系統(tǒng),外圍除了常用的顯示(LCD、LED)、接口(串口、USB接口、網(wǎng)絡(luò)接口、電源接口)資源外,還連接了GPS模塊(包括GPS天線)、攝像頭和超聲波傳感器。以這塊電路板作為機器人的上位機,綜合3個模塊獲取的數(shù)據(jù)來指導(dǎo)機器人的運動。下面將主要介紹GPS模塊部分。
采用廣州鑫圖科技有限公司的GPS模塊GS-91。這是一款體積小巧、高性能、低功耗的GPS引擎板,它使用SiRF Star III芯片組,可以一次跟蹤20顆衛(wèi)星,跟蹤靈敏度高達-159dBm。模塊具有兩個串口,4 MB的Flash,支持NMEA-0183數(shù)據(jù)格式輸出[2]。
圖2是GS-91模塊的應(yīng)用電路原理圖。其中,RXA是GS-91用于接收軟件指令的主要接收通道,TXA是用于輸出導(dǎo)航和測量數(shù)據(jù)的主要發(fā)送通道。
GS-91模塊導(dǎo)航數(shù)據(jù)輸出采用NMEA-0183標(biāo)準(zhǔn),它是由 NMEA(National Marine Electronics Association,美國國家海事電子協(xié)會)于1983年制定的。NMEA-0183數(shù)據(jù)采用ASCII標(biāo)準(zhǔn)。數(shù)據(jù)傳輸以“語句”的方式進行,每個語句均以“$”開頭,然后是兩個字母的“識別符”和三個字母的“語句名”組成的ID信息頭,接著就是以逗號分割的數(shù)據(jù)體,語句末尾為校驗和,整條語句以回車換行符結(jié)束。
圖2 GS-91應(yīng)用電路原理圖Fig.2 GS-91 application circuit schematic
NMEA-0183的數(shù)據(jù)信息有十幾種,例如:$GPGGA、$GPGLL、$GPGSA、$GPGSV、$GPRMC 等,我們所關(guān)心的定位數(shù)據(jù)如經(jīng)緯度、速度、時間等均可以從“$GPRMC”開頭的語句中獲得。下面是一條GPRMC語句實例,表1對該語句的各字段進行了說明。
$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.130,309.62,120598,23.1,E*10
表1 GPRMC數(shù)據(jù)格式Tab.1 GPRMC data format
軟件部分以微軟的Visual Studio 2008為開發(fā)工具,安裝完 WinCE6.0的 SDK(Software Development Kit,軟件開發(fā)工具包)后,創(chuàng)建智能設(shè)備MFC工程,即可開始軟件編寫。這里的SDK可以使用標(biāo)準(zhǔn)的,也可以自己編譯生成。
圖3所示為本系統(tǒng)獲取GPS導(dǎo)航數(shù)據(jù)并處理的軟件界面。打開界面后,選擇端口號和波特率,點擊“打開串口”按鈕,然后點擊“開始接收”按鈕,左側(cè)“接收區(qū)”的編輯框就會不斷地顯示從GS-91模塊輸出的NMEA格式導(dǎo)航數(shù)據(jù),并且在“經(jīng)度”、“緯度”編輯框中實時顯示相應(yīng)信息。
制作路線圖的方法為,將機器人帶到目標(biāo)路徑上的幾個位置,點擊“采點”按鈕,即可把當(dāng)前的經(jīng)度緯度信息保存,并顯示在“采點區(qū)”的列表框中。路線圖制作完成后,機器人在行進過程中即可根據(jù)實時獲取的當(dāng)前位置信息和運動方向來判斷下一步的運動策略。
獲取GPS導(dǎo)航數(shù)據(jù)實際上就是通過串口讀取GS-91輸出的NMEA格式數(shù)據(jù)的過程,下面將介紹WinCE下讀取串口程序的開發(fā)過程。
3.2.1 打開串口
點擊“打開串口”按鈕,進入此按鈕的消息響應(yīng)函數(shù),函數(shù)中執(zhí)行打開串口和串口參數(shù)配置等操作。
圖3 軟件界面Fig.3 Software interface
首先調(diào)用CreateFile()函數(shù)打開指定的端口。
接著對串口進行參數(shù)配置,如波特率、數(shù)據(jù)位、停止位、奇偶校驗等。參數(shù)設(shè)置過程為:首先調(diào)用GetCommState()獲取串口的當(dāng)前配置,得到結(jié)構(gòu)體DCB(Device Control Block,設(shè)備控制塊)的指針,通過它給DCB結(jié)構(gòu)體賦值,然后傳給SetCommState()函數(shù)對串口進行配置。
最后設(shè)置串口的超時參數(shù),設(shè)置方法與上述參數(shù)設(shè)置類似,先通過GetCommTimeouts()得到一個結(jié)構(gòu)體指針,賦值后傳給SetCommTimeouts()進行設(shè)置。
3.2.2 開始接收
點擊“開始接收”按鈕,進入此按鈕的消息響應(yīng)函數(shù),函數(shù)中調(diào)用CreateThread()開辟了一個線程,用于接收串口數(shù)據(jù)。由于接收過程需要調(diào)用WaitCommEven()函數(shù)來不停地等待數(shù)據(jù)到來事件,會致使程序無法響應(yīng)其他操作,因此用開辟線程的辦法來防止信息擁堵。
3.2.3 接收線程
圖4所示為接收串口數(shù)據(jù)的線程中執(zhí)行的操作流程。程序?qū)崿F(xiàn)了串口數(shù)據(jù)的接收,并把接收到的數(shù)據(jù)傳遞給Dlg類,用于后期進行定位信息提取及顯示等操作。
3.2.4 消息響應(yīng)函數(shù)
獲得串口接收線程中得到的數(shù)據(jù),進行格式轉(zhuǎn)換后則開始提取定位數(shù)據(jù)等有用信息,并將提取結(jié)果顯示到對話框界面上。
定位數(shù)據(jù)的提取過程專注于“$GPRMC”語句,表1中對該語句結(jié)構(gòu)作了詳細說明,我們可以從中得到當(dāng)前的經(jīng)緯度信息。在3.2.4介紹的消息響應(yīng)函數(shù)中,得到NMEA導(dǎo)航數(shù)據(jù)后,按照圖5所示的流程即可完成數(shù)據(jù)提取。
圖5 接收數(shù)據(jù)處理流程圖Fig.5 Flow chart of processing the received data
圖6是圖5中“尋找目標(biāo)ID頭‘$GPRMC’”子過程的流程圖。值得注意的是,程序中不可出現(xiàn)m_strRecv[i+k](k為大于0的整數(shù))這樣的表達式。有人會以(m_strDataReceived[i]== ’$’&&m_strDataReceived[i+3]== ’R’)為判斷條件來提取ID頭,看起來方便但會很容易造成超出數(shù)組元素個數(shù)的錯誤。
圖6 尋找目標(biāo)ID頭流程Fig.6 Flow chart of finding wanted ID header
圖7是圖5中“提取經(jīng)緯度信息”子過程的流程圖,同樣也要應(yīng)遵循每次循環(huán)應(yīng)僅處理當(dāng)前一位數(shù)據(jù)m_strRecv[i]的原則。
連接GPS天線,在空曠的場地給電路板上電,運行開發(fā)的軟件,獲得如圖8所示的運行結(jié)果??梢钥吹?,當(dāng)前的位置為東經(jīng) 108.458035°,北緯 34.018866°。
上面是摘取圖8中“接受區(qū)”編輯框里的一條語句,參照表1可以看出各項信息都合乎常理,系統(tǒng)成功運行。
圖7 提取經(jīng)緯度信息流程Fig.7 Flow chart of picking up position information
圖8 軟件運行結(jié)果Fig.8 Results of runnig
系統(tǒng)在ARM硬件平臺下,用ARM芯片的串口引腳連接GPS模塊GS-91,并在Visual Studio 2008下開發(fā)了讀取串口以獲取導(dǎo)航數(shù)據(jù)的軟件,該軟件還實現(xiàn)了實時提取當(dāng)前經(jīng)緯度信息并顯示,以及采點構(gòu)建行進路線的功能。本系統(tǒng)可為自主移動機器人提供GPS導(dǎo)航定位服務(wù),簡單可行,極具借鑒價值。
[1]鄧旭玥,王偉,易建強,等.移動機器人導(dǎo)航研究現(xiàn)狀及其發(fā)展趨勢展望[J].可編程控制器與工廠自動化(PLC FA),2004(11):4-8.
DENG Xu-yue,WANG Wei,YI Jian-qiang,et al.Mobile robotnavigation and development trend research[J].Programmable Controller&Factory Automation,2004,11:4-8.
[2]廣州鑫圖科技有限公司.GPS Engine Board GS-91[EB/OL].Http://www.gzxintu.com.
[3]百 度 百 科.NMEA[EB/OL]. (2011-06-25).http://baike.baidu.com/view/1303668.htm.
[4]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
[5]張歡,鈕文良.Windows CE系統(tǒng)開發(fā)基礎(chǔ)與實例[M].北京:中國電力出版社,2009.
[6]李景峰,楊麗娜,潘恒,等.Visual C++串口通信技術(shù)詳解[M].北京:機械工業(yè)出版社,2010.