衛(wèi)凱龍,王 泉,劉海亮,董和磊
(1.中國兵器工業(yè)第二一四研究所,江蘇 蘇州 215010;2.中北大學(xué) 儀器與電子學(xué)院,山西 太原 030051)
隨著科技的發(fā)展,定位系統(tǒng)對人們的生產(chǎn)生活方式產(chǎn)生了很大的影響,它已經(jīng)走進(jìn)每一個人的生活。定位系統(tǒng)重新定義了旅游業(yè)、物流行業(yè)以及眾多與生活息息相關(guān)的行業(yè)。本文主要研究用于尋找失蹤人口和野外探險緊急求救的定位系統(tǒng)。
我國每年有大量失蹤人口,其中大多數(shù)為生活不能自理的老人和兒童。如何在失蹤后的黃金24小時內(nèi)尋找到失蹤人口成為一個社會難題。如果有完備且使用簡單的定位系統(tǒng),可以在發(fā)現(xiàn)人口失蹤的第一時間通過定位鎖定大概位置,逐步縮小尋找范圍,最后找到失蹤人口[1-3]。
定位系統(tǒng)一般由空間部分、地面部分及用戶部分3部分組成??臻g部分由環(huán)繞地球的衛(wèi)星組成。衛(wèi)星的分布使得需要被定位的物體在任何時間都能被至少4顆衛(wèi)星觀測到。常見的衛(wèi)星有我國的北斗衛(wèi)星和美國的GPS等。地面部分主要由控制站和監(jiān)測站組成??刂普究刂菩l(wèi)星沿著規(guī)定軌道運行,監(jiān)測站監(jiān)測各衛(wèi)星的各自時間。它們共同保障空間部分的正常運行,連接空間部分和用戶部分。用戶部分主要是用戶使用接收機(jī)接收數(shù)據(jù),導(dǎo)航儀就是典型的接收機(jī)。隨著科技的發(fā)展,更精確的硬件、更人性化的軟件以及數(shù)據(jù)更精確的地圖會使定位系統(tǒng)的用戶體驗變得更好[4]。
本文研究的主要內(nèi)容是基于嵌入式Arduino的定位系統(tǒng)。整體設(shè)計方案如圖1所示。GPS天線可以使GPS模塊收集到衛(wèi)星信號;GPS模塊獲取衛(wèi)星的數(shù)據(jù),解析出重要參數(shù),如經(jīng)度、緯度及時間信息;通過單片機(jī)控制GPRS模塊將解析過的數(shù)據(jù)傳輸?shù)皆贫朔?wù)器;GPRS模塊需要插入SIM卡;服務(wù)器中儲存的數(shù)據(jù)通過高德地圖或者百度地圖的開源接口,從地圖中獲取到較直觀的地理位置,進(jìn)而完成對位置的小范圍鎖定[5-7]。
圖1 系統(tǒng)框圖
GPS定位系統(tǒng)由21顆工作衛(wèi)星組成(北斗衛(wèi)星系統(tǒng)由55顆衛(wèi)星組成)。含有GPS模塊的接收機(jī)在任意地方和時間都可以觀測到4顆及以上的衛(wèi)星,通過計算已知位置的衛(wèi)星到用戶接收機(jī)之間的距離,觀測到多顆衛(wèi)星以后,就可以確定接收機(jī)的具體位置。根據(jù)距離公式可以得到4個衛(wèi)星與觀測物體之間的距離關(guān)系(以觀測到4顆衛(wèi)星為例),如下所示:
式中:c是GPS信號的傳播速度,數(shù)值上與光速數(shù)值相同;ti為衛(wèi)星時間差(i=1,2,3,4);t為接收機(jī)時間差;(xi,yi,zi)為第i個衛(wèi)星的空間直角坐標(biāo)(通過衛(wèi)星導(dǎo)航數(shù)據(jù)獲得);(x,y,z)為被觀測物體的空間直角坐標(biāo);di為衛(wèi)星到被觀測物體的距離,可以通過信號傳播的時間和光速相乘獲得。通過式(1)~式(4)這4個公式即可計算出被觀測物體的空間直角坐標(biāo)(x,y,z)和t。實際上,在三維空間中,根據(jù)3點即可測得被觀測物體的坐標(biāo),但根據(jù)上面的公式,di通過c×t計算得到,由于c值特別大,當(dāng)信號傳播時間特別短時,小誤差可能會對結(jié)果造成大偏差,另外,GPS衛(wèi)星信號在傳輸過程中還可能會因為天氣等原因受到影響,因此需要增加1顆衛(wèi)星的數(shù)據(jù)來校正誤差,共需要4顆衛(wèi)星才能實現(xiàn)精準(zhǔn)定位。以上所述的定位原理稱為單點定位(又稱絕對定位),只需要通過一個GPS接收器來確定位置。除了單點定位,還有差分定位(又稱相對定位),可以通過增加一個參考GPS接收器來實現(xiàn)更精確的定位[8]。
高德地圖是國內(nèi)使用率較高的免費地圖導(dǎo)航產(chǎn)品。高德地圖的應(yīng)用程序接口(Application Programming Interface,API)以HTTP接口形式為開發(fā)者提供基于高德地圖訪問地圖數(shù)據(jù)的能力。開發(fā)者不需要訪問源碼也無需理解地圖內(nèi)部工作機(jī)制的細(xì)節(jié),只通過接口即可使用各類型的地理數(shù)據(jù)服務(wù)。
本文使用的是高德API的逆地理編碼。將GPS獲取到的經(jīng)緯度信息經(jīng)過轉(zhuǎn)換加密發(fā)送到指定的接口,高德地圖就可以將其轉(zhuǎn)換為詳細(xì)的地址,且返回附近的興趣點(Point of Interest,POI)信息[9-10]。
使用高德API時,開發(fā)者需要申請Web服務(wù)的密鑰。系統(tǒng)將申請的密鑰和其他必填參數(shù)通過HTTP請求一同發(fā)送,接收HTTP請求返回的數(shù)據(jù)并解析數(shù)據(jù)。
單片機(jī)選擇Arduino。Arduino基于Arduino IDE環(huán)境編譯。Arduino板上的微控制器通過Arduino的編程語言編寫程序,編譯成二進(jìn)制文件,燒錄進(jìn)微控制器。對Arduino的編程是利用Arduino編程語言(基于Wiring)和Arduino開發(fā)環(huán)境(基于Processing)來實現(xiàn)的。相比其他單片機(jī),Arduino簡單清晰,無需了解其內(nèi)部硬件結(jié)構(gòu)和寄存器設(shè)置。另外,Arduino及周邊產(chǎn)品相對質(zhì)優(yōu)價廉,可以節(jié)約學(xué)習(xí)成本,縮短開發(fā)周期。最重要的一點是,代碼燒錄直接通過USB線即可完成,不需要通過燒錄器。
GPS模塊選用U-BLOX芯片。該芯片體積小巧,性能優(yōu)異,使用非常方便。GPS天線選擇陶瓷天線。除了陶瓷天線,還可以選擇需要額外供電的有源天線。相對無源天線,有源天線的功耗較大,成本較高,但是靈敏度要比無源天線高。本設(shè)計通過內(nèi)置放大電路提高無源陶瓷天線的搜星速度。GPS天線的供電使用單片機(jī)輸出端口的3.3 V電壓即可。GPS模塊的原理如圖2所示。
為了確定GPS模塊的工作狀態(tài),在芯片的TIMEPULSE端口連接PPS時鐘脈沖輸出腳狀態(tài)指示燈。PPS指示燈有2個狀態(tài):常亮表示模塊開始工作,但定位不成功;閃爍表示模塊已經(jīng)定位成功。
圖2 GPS模塊原理圖
發(fā)送數(shù)據(jù)的GPRS模塊選用了SIMCOM公司的SIM800芯片。相比于上一代已經(jīng)停產(chǎn)且只能在中國大陸使用的SIM900A,SIM800芯片可以在全球使用,而且能夠以更低功耗實現(xiàn)語音、SMS、數(shù)據(jù)及傳真信息的傳輸。GPRS模塊原理如圖3所示。
在系統(tǒng)軟件部分,先進(jìn)行GPS模塊部分的編程,再進(jìn)行GPRS模塊部分的編程。之后將兩個程序結(jié)合起來,經(jīng)過修改,得到系統(tǒng)整體程序。程序結(jié)構(gòu)如圖4所示。GPS模塊的RX和TX接口與GPRS模塊的TX和RX接口通過單片機(jī)相連。將兩個模塊的波特率設(shè)置為一致,都設(shè)置為9 600。
GPS模塊與單片機(jī)開發(fā)板連接,加載編寫程序后,可在串口監(jiān)視器獲取到數(shù)據(jù),也可使用USBTTL工具在串口調(diào)試助手中獲取數(shù)據(jù)。
GPRS模塊SIM800需要獨立供電(若采用SIM900A則不要獨立供電),GPS模塊可通過單片機(jī)的5 V輸出端供電,二者均可采用獨立電池進(jìn)行供電。獲取GPS數(shù)據(jù)的過程中,定義GPS模塊的波特率為9 600。由于NMEA-0183協(xié)議中GPRMC指令(也可以使用其他指令如$GPGLL定位地理信息和$GPGGAGPS定位信息)含有所需要的信息,對該條指令進(jìn)行解析,信息保存的位置是一定的,即使數(shù)據(jù)獲取為空位置也會保留。因此,按照位置讀取所需要的數(shù)據(jù)。在實際操作過程中,時間的獲取速度遠(yuǎn)快于緯度和經(jīng)度,而且經(jīng)緯度獲取是一致的,因此只要判斷經(jīng)緯度之中的一個是否為空就可以了。本文程序中,若判斷緯度為空,則繼續(xù)掃描GPS獲取的信息。若判斷緯度不為空,即可輸出信息。在最終程序定義了若數(shù)據(jù)不為空,在單片機(jī)板的輸出口和GND端放置的二極管亮,若數(shù)據(jù)為空,二極管不亮。這樣,用戶在定位過程中即可判斷是否獲取到了經(jīng)緯度信息。
GPRS模塊將GPS數(shù)據(jù)發(fā)送到數(shù)據(jù)庫。系統(tǒng)要將得到的數(shù)據(jù)處理并顯示出來,需要連接數(shù)據(jù)庫,從中獲取GPS模塊得到的經(jīng)緯度和時間信息。調(diào)用過程如圖5所示。
數(shù)據(jù)庫中的經(jīng)緯度信息是通過GPS定位系統(tǒng)得到的原始經(jīng)緯度,數(shù)據(jù)為原始坐標(biāo)。要將數(shù)據(jù)庫中的數(shù)據(jù)通過網(wǎng)頁顯示出來,需要先建立一個連接數(shù)據(jù)庫的文件,再建立一個將數(shù)據(jù)庫中的信息顯示在網(wǎng)頁上的文件。原始坐標(biāo)經(jīng)過轉(zhuǎn)化后,可以得到基于WGS-84坐標(biāo)系的經(jīng)緯度。由于國內(nèi)不允許直接使用WGS-84坐標(biāo)系標(biāo)注地圖,國內(nèi)不同地圖通常采用不一樣的坐標(biāo)系,因此數(shù)據(jù)必須經(jīng)過加密成為火星坐標(biāo)、百度坐標(biāo)、搜狗坐標(biāo)及圖吧坐標(biāo)等才可以正常使用。2002年,國家測量局通過加密WGS-84坐標(biāo)系,創(chuàng)立了我國通用的坐標(biāo)體系——火星坐標(biāo)(GCJ-02)。原始坐標(biāo)系轉(zhuǎn)化過程如圖6所示。
圖3 GPRS模塊原理圖
圖4 程序結(jié)構(gòu)圖
圖5 數(shù)據(jù)庫調(diào)用過程
圖6 原始坐標(biāo)系轉(zhuǎn)化過程
高德地圖(國內(nèi))使用的是火星坐標(biāo),因此最后將轉(zhuǎn)換好的火星坐標(biāo)發(fā)送到高德地圖的API接口。高德地圖的API接口可以返回直接的漢字地址,也可以以地圖的形式顯示出來。本文使用的是通過地圖顯示出來的方式?;鹦亲鴺?biāo)發(fā)送過程如圖7所示。
本文使用的高德地圖API接口是基于個人版開發(fā)的?;谄髽I(yè)版的API可以獲得更高的權(quán)限,并且使用次數(shù)和地址解析的速度有更明顯的優(yōu)勢。
測試得到的數(shù)據(jù)經(jīng)過換算,得到WGS-84坐標(biāo)系下的經(jīng)緯度,經(jīng)過加密,得到GCJ-02坐標(biāo)系下的數(shù)據(jù)。數(shù)據(jù)在數(shù)據(jù)庫中直接進(jìn)行轉(zhuǎn)化和加密并保存。系統(tǒng)調(diào)用保存的數(shù)據(jù)庫,并將數(shù)據(jù)庫中的文件顯示出來,數(shù)據(jù)結(jié)果如圖8所示。將此數(shù)據(jù)進(jìn)行逆地址解析,得到具體的位置信息。測試數(shù)據(jù)經(jīng)過高德API的逆地址解析后,可以在高德地圖上正確地顯示位置信息。
圖7 火星坐標(biāo)發(fā)送至高德API接口
圖8 定位測試結(jié)果圖
本文通過GPS定位系統(tǒng)定位,經(jīng)過單片機(jī)Arduinio處理數(shù)據(jù),再經(jīng)過GPRS數(shù)據(jù)模塊將數(shù)據(jù)發(fā)送至客戶端,調(diào)用高德地圖API實時顯示位置。經(jīng)過測試,該系統(tǒng)可以實現(xiàn)定位并在高德地圖上實時顯示位置信息。該設(shè)計實現(xiàn)了定位系統(tǒng)模塊的集成化,縮小了體積,減輕了重量,提高了通用性和可靠性,應(yīng)用前景廣闊,具有良好的社會效益。