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