衛凱龍,王 泉,劉海亮,董和磊
(1.中國兵器工業第二一四研究所,江蘇 蘇州 215010;2.中北大學 儀器與電子學院,山西 太原 030051)
隨著科技的發展,定位系統對人們的生產生活方式產生了很大的影響,它已經走進每一個人的生活。定位系統重新定義了旅游業、物流行業以及眾多與生活息息相關的行業。本文主要研究用于尋找失蹤人口和野外探險緊急求救的定位系統。
我國每年有大量失蹤人口,其中大多數為生活不能自理的老人和兒童。如何在失蹤后的黃金24小時內尋找到失蹤人口成為一個社會難題。如果有完備且使用簡單的定位系統,可以在發現人口失蹤的第一時間通過定位鎖定大概位置,逐步縮小尋找范圍,最后找到失蹤人口[1-3]。
定位系統一般由空間部分、地面部分及用戶部分3部分組成。空間部分由環繞地球的衛星組成。衛星的分布使得需要被定位的物體在任何時間都能被至少4顆衛星觀測到。常見的衛星有我國的北斗衛星和美國的GPS等。地面部分主要由控制站和監測站組成。控制站控制衛星沿著規定軌道運行,監測站監測各衛星的各自時間。它們共同保障空間部分的正常運行,連接空間部分和用戶部分。用戶部分主要是用戶使用接收機接收數據,導航儀就是典型的接收機。隨著科技的發展,更精確的硬件、更人性化的軟件以及數據更精確的地圖會使定位系統的用戶體驗變得更好[4]。
本文研究的主要內容是基于嵌入式Arduino的定位系統。整體設計方案如圖1所示。GPS天線可以使GPS模塊收集到衛星信號;GPS模塊獲取衛星的數據,解析出重要參數,如經度、緯度及時間信息;通過單片機控制GPRS模塊將解析過的數據傳輸到云端服務器;GPRS模塊需要插入SIM卡;服務器中儲存的數據通過高德地圖或者百度地圖的開源接口,從地圖中獲取到較直觀的地理位置,進而完成對位置的小范圍鎖定[5-7]。

圖1 系統框圖
GPS定位系統由21顆工作衛星組成(北斗衛星系統由55顆衛星組成)。含有GPS模塊的接收機在任意地方和時間都可以觀測到4顆及以上的衛星,通過計算已知位置的衛星到用戶接收機之間的距離,觀測到多顆衛星以后,就可以確定接收機的具體位置。根據距離公式可以得到4個衛星與觀測物體之間的距離關系(以觀測到4顆衛星為例),如下所示:

式中:c是GPS信號的傳播速度,數值上與光速數值相同;ti為衛星時間差(i=1,2,3,4);t為接收機時間差;(xi,yi,zi)為第i個衛星的空間直角坐標(通過衛星導航數據獲得);(x,y,z)為被觀測物體的空間直角坐標;di為衛星到被觀測物體的距離,可以通過信號傳播的時間和光速相乘獲得。通過式(1)~式(4)這4個公式即可計算出被觀測物體的空間直角坐標(x,y,z)和t。實際上,在三維空間中,根據3點即可測得被觀測物體的坐標,但根據上面的公式,di通過c×t計算得到,由于c值特別大,當信號傳播時間特別短時,小誤差可能會對結果造成大偏差,另外,GPS衛星信號在傳輸過程中還可能會因為天氣等原因受到影響,因此需要增加1顆衛星的數據來校正誤差,共需要4顆衛星才能實現精準定位。以上所述的定位原理稱為單點定位(又稱絕對定位),只需要通過一個GPS接收器來確定位置。除了單點定位,還有差分定位(又稱相對定位),可以通過增加一個參考GPS接收器來實現更精確的定位[8]。
高德地圖是國內使用率較高的免費地圖導航產品。高德地圖的應用程序接口(Application Programming Interface,API)以HTTP接口形式為開發者提供基于高德地圖訪問地圖數據的能力。開發者不需要訪問源碼也無需理解地圖內部工作機制的細節,只通過接口即可使用各類型的地理數據服務。
本文使用的是高德API的逆地理編碼。將GPS獲取到的經緯度信息經過轉換加密發送到指定的接口,高德地圖就可以將其轉換為詳細的地址,且返回附近的興趣點(Point of Interest,POI)信息[9-10]。
使用高德API時,開發者需要申請Web服務的密鑰。系統將申請的密鑰和其他必填參數通過HTTP請求一同發送,接收HTTP請求返回的數據并解析數據。
單片機選擇Arduino。Arduino基于Arduino IDE環境編譯。Arduino板上的微控制器通過Arduino的編程語言編寫程序,編譯成二進制文件,燒錄進微控制器。對Arduino的編程是利用Arduino編程語言(基于Wiring)和Arduino開發環境(基于Processing)來實現的。相比其他單片機,Arduino簡單清晰,無需了解其內部硬件結構和寄存器設置。另外,Arduino及周邊產品相對質優價廉,可以節約學習成本,縮短開發周期。最重要的一點是,代碼燒錄直接通過USB線即可完成,不需要通過燒錄器。
GPS模塊選用U-BLOX芯片。該芯片體積小巧,性能優異,使用非常方便。GPS天線選擇陶瓷天線。除了陶瓷天線,還可以選擇需要額外供電的有源天線。相對無源天線,有源天線的功耗較大,成本較高,但是靈敏度要比無源天線高。本設計通過內置放大電路提高無源陶瓷天線的搜星速度。GPS天線的供電使用單片機輸出端口的3.3 V電壓即可。GPS模塊的原理如圖2所示。
為了確定GPS模塊的工作狀態,在芯片的TIMEPULSE端口連接PPS時鐘脈沖輸出腳狀態指示燈。PPS指示燈有2個狀態:常亮表示模塊開始工作,但定位不成功;閃爍表示模塊已經定位成功。

圖2 GPS模塊原理圖
發送數據的GPRS模塊選用了SIMCOM公司的SIM800芯片。相比于上一代已經停產且只能在中國大陸使用的SIM900A,SIM800芯片可以在全球使用,而且能夠以更低功耗實現語音、SMS、數據及傳真信息的傳輸。GPRS模塊原理如圖3所示。
在系統軟件部分,先進行GPS模塊部分的編程,再進行GPRS模塊部分的編程。之后將兩個程序結合起來,經過修改,得到系統整體程序。程序結構如圖4所示。GPS模塊的RX和TX接口與GPRS模塊的TX和RX接口通過單片機相連。將兩個模塊的波特率設置為一致,都設置為9 600。
GPS模塊與單片機開發板連接,加載編寫程序后,可在串口監視器獲取到數據,也可使用USBTTL工具在串口調試助手中獲取數據。
GPRS模塊SIM800需要獨立供電(若采用SIM900A則不要獨立供電),GPS模塊可通過單片機的5 V輸出端供電,二者均可采用獨立電池進行供電。獲取GPS數據的過程中,定義GPS模塊的波特率為9 600。由于NMEA-0183協議中GPRMC指令(也可以使用其他指令如$GPGLL定位地理信息和$GPGGAGPS定位信息)含有所需要的信息,對該條指令進行解析,信息保存的位置是一定的,即使數據獲取為空位置也會保留。因此,按照位置讀取所需要的數據。在實際操作過程中,時間的獲取速度遠快于緯度和經度,而且經緯度獲取是一致的,因此只要判斷經緯度之中的一個是否為空就可以了。本文程序中,若判斷緯度為空,則繼續掃描GPS獲取的信息。若判斷緯度不為空,即可輸出信息。在最終程序定義了若數據不為空,在單片機板的輸出口和GND端放置的二極管亮,若數據為空,二極管不亮。這樣,用戶在定位過程中即可判斷是否獲取到了經緯度信息。
GPRS模塊將GPS數據發送到數據庫。系統要將得到的數據處理并顯示出來,需要連接數據庫,從中獲取GPS模塊得到的經緯度和時間信息。調用過程如圖5所示。
數據庫中的經緯度信息是通過GPS定位系統得到的原始經緯度,數據為原始坐標。要將數據庫中的數據通過網頁顯示出來,需要先建立一個連接數據庫的文件,再建立一個將數據庫中的信息顯示在網頁上的文件。原始坐標經過轉化后,可以得到基于WGS-84坐標系的經緯度。由于國內不允許直接使用WGS-84坐標系標注地圖,國內不同地圖通常采用不一樣的坐標系,因此數據必須經過加密成為火星坐標、百度坐標、搜狗坐標及圖吧坐標等才可以正常使用。2002年,國家測量局通過加密WGS-84坐標系,創立了我國通用的坐標體系——火星坐標(GCJ-02)。原始坐標系轉化過程如圖6所示。

圖3 GPRS模塊原理圖

圖4 程序結構圖

圖5 數據庫調用過程

圖6 原始坐標系轉化過程
高德地圖(國內)使用的是火星坐標,因此最后將轉換好的火星坐標發送到高德地圖的API接口。高德地圖的API接口可以返回直接的漢字地址,也可以以地圖的形式顯示出來。本文使用的是通過地圖顯示出來的方式。火星坐標發送過程如圖7所示。
本文使用的高德地圖API接口是基于個人版開發的。基于企業版的API可以獲得更高的權限,并且使用次數和地址解析的速度有更明顯的優勢。
測試得到的數據經過換算,得到WGS-84坐標系下的經緯度,經過加密,得到GCJ-02坐標系下的數據。數據在數據庫中直接進行轉化和加密并保存。系統調用保存的數據庫,并將數據庫中的文件顯示出來,數據結果如圖8所示。將此數據進行逆地址解析,得到具體的位置信息。測試數據經過高德API的逆地址解析后,可以在高德地圖上正確地顯示位置信息。

圖7 火星坐標發送至高德API接口

圖8 定位測試結果圖
本文通過GPS定位系統定位,經過單片機Arduinio處理數據,再經過GPRS數據模塊將數據發送至客戶端,調用高德地圖API實時顯示位置。經過測試,該系統可以實現定位并在高德地圖上實時顯示位置信息。該設計實現了定位系統模塊的集成化,縮小了體積,減輕了重量,提高了通用性和可靠性,應用前景廣闊,具有良好的社會效益。