GPS設(shè)計說明
GPS模塊設(shè)計,與其說我們是在處理GPS信號,不如說我們在處理GPS接收機傳過來的信號更準確一些,因為GPS接收機接收GPS衛(wèi)星信號后,會經(jīng)過一系列的算法來計算當前的經(jīng)緯度、減少誤差、減少漂移等工作,然后才會把計算后的結(jié)果傳給我們,因些我們只需要根據(jù)協(xié)議來處理GPS接收機給我們的數(shù)據(jù)就可以了,下面將以兩節(jié)來介紹GPS的基本原理,以后的小節(jié)來介紹軟 件開發(fā)時如何處理GPS接收機傳過來的信號。
1.1 GPS原理
GPS即全球定位系統(tǒng)(Global Positioning System)是美國從本世紀70年**始研制,歷時20年,耗資200億美元,于1994年全面建成,具有在海、陸、空進行全方位實時三維導(dǎo)航與定位能力的新一代衛(wèi)星導(dǎo)航與定位系統(tǒng)。經(jīng)近10年我國測繪等部門的使用表明,GPS以全天候、高精度、 自動化、高效益等顯著特點,贏得廣大測繪工作者的信賴,并成功地應(yīng)用于大地測量、工程測量、航空攝影測量、運載工具導(dǎo)航和管制、地殼運動監(jiān)測、工程變形監(jiān)測、資源勘察、動力學(xué)等多種學(xué)科,從而給測繪領(lǐng)域帶來一場深刻的技術(shù)**。
全球定位系統(tǒng)(Global Positioning System)是美國第二代衛(wèi)星導(dǎo)航系統(tǒng)。是在子午儀衛(wèi)星導(dǎo)航系統(tǒng)的基礎(chǔ)上發(fā)展起來的,它采納了子午儀系統(tǒng)的成功經(jīng)驗。和子午儀系統(tǒng)一樣,全球定位系統(tǒng)由空間部分、地面監(jiān)控部分和用戶接收機三大部分組成。
按目前的方案,全球定位系統(tǒng)的空間部分使用24顆高度約2.02萬千米的衛(wèi)星組成衛(wèi)星星座。21+3顆衛(wèi)星均為近圓形軌道,運行周期約為11小時58分,分布在六個軌道面上(每軌道面四顆),軌道傾角為55度。衛(wèi)星的分布使得在全球的任何地方,任何時間都可觀測到四顆以上的衛(wèi)星,并能保持良好定位解算精度的幾何圖形(DOP)。這就提供了在時間上連續(xù)的全球?qū)Ш侥芰Α?br style="word-wrap: break-word; " />
地面監(jiān)控部分包括四個監(jiān)控站、一個上行注入站和一個主控站。監(jiān)控站設(shè)有GPS用戶接收機、原子鐘、收集當?shù)貧庀髷?shù)據(jù)的傳感器和進行數(shù)據(jù)初步處理的計算機。監(jiān)控站的主要任務(wù)是取得衛(wèi)星觀測數(shù)據(jù)并將這些數(shù)據(jù)傳送至主控站。主控站設(shè)在范登堡空軍基地。它對地面監(jiān)控部實行全面控制。主控站主要任務(wù)是收集各監(jiān)控站對GPS衛(wèi)星的全部觀測數(shù)據(jù),利用這些數(shù)據(jù)計算每顆GPS衛(wèi)星的軌道和衛(wèi)星鐘改正值。上行注入站也設(shè)在范登堡空軍基地。它的任務(wù)主要是在每顆衛(wèi)星運行至上空時把這類導(dǎo)航數(shù)據(jù)及主控站的指令注入到衛(wèi)星。這種注入對每顆GPS衛(wèi)星每天進行一次,并在衛(wèi)星離開注入站作用范圍之前進行最后的注入。
全球定位系統(tǒng)具有性能好、精度高、應(yīng)用廣的特點,是迄今最好的導(dǎo)航定位系統(tǒng)。隨著全球定位系統(tǒng)的不斷改進,硬、軟件的不斷完善,應(yīng)用領(lǐng)域正在不斷地開拓,目前已遍及國民經(jīng)濟各種部門,并開始逐步深入人們的日常生活。
GPS的基本定位原理是:衛(wèi)星不間斷地發(fā)送自身的星歷參數(shù)和時間信息,接收機到這些信息后,經(jīng)過計算求出接收機的三維位置,三維方向以及運動速度和時間信息。
上述四個方程式中待測點坐標x、 y、 z 和Vto為未知參數(shù),其中di=c△ti (i=1、2、3、4)。
di (i=1、2、3、4) 分別為衛(wèi)星1、衛(wèi)星2、衛(wèi)星3、衛(wèi)星4到接收機之間的距離。
△ti (i=1、2、3、4) 分別為衛(wèi)星1、衛(wèi)星2、衛(wèi)星3、衛(wèi)星4的信號到達接收機所經(jīng)歷的時間。
c為GPS信號的傳播速度(即光速)。
四個方程式中各個參數(shù)意義如下:
x、y、z 為待測點坐標的空間直角坐標。
xi 、yi 、zi (i=1、2、3、4) 分別為衛(wèi)星1、衛(wèi)星2、衛(wèi)星3、衛(wèi)星4在t時刻的空間直角坐標,可由衛(wèi)星導(dǎo)航電文求得。
Vt i (i=1、2、3、4) 分別為衛(wèi)星1、衛(wèi)星2、衛(wèi)星3、衛(wèi)星4的衛(wèi)星鐘的鐘差,由衛(wèi)星星歷提供。
Vto為接收機的鐘差。
由以上四個方程即可解算出待測點的坐標x、y、z 和接收機的鐘差Vto 。
上述的計算方式,大家不要有心理上的障礙,因為我們接觸不到這些,這些均是接收機來處理的,接收機處理后,通過NMEA 0183協(xié)議將計算結(jié)果傳輸給我們。
1.2 GPS的誤差
有很多種因素會影響到GPS的準確率:
以下是一個GPS誤差引入簡表:
衛(wèi)星時鐘誤差:0-1.5米
衛(wèi)星軌道誤差:1-5米
電離層引入的誤差:0-30米
大氣層引入的誤差:0-30米
接收機本身的噪音:0-10米
多路反射:0-1米
總定位誤差:大約28米
上述的簡表,并不表示一定會存在這么大的誤差,這是給出的最好及最差的范圍,當然最好情況不能同時發(fā)生,最差的情況也不能同時發(fā)生。
而且在衛(wèi)星的導(dǎo)航電文中,已經(jīng)包含了大氣層的修正參數(shù),能夠消除50%到70%的誤差。
而且這兩年出的GPS(我指的是著名廠商的各種手持機)的誤差的大致范圍是10米,現(xiàn)在GARMIN和MAGELLAN手持機的標稱精度是7米(在95%的情況下)。
但對我們在應(yīng)用軟件開發(fā)時,不需要考慮如何來降低精度,因為我們是從GPS接收機處接收的數(shù)據(jù),這個數(shù)據(jù)已經(jīng)經(jīng)過接收機的處理,已經(jīng)達到最好的精度,如果需要考慮,那就在項目開始前考慮一下選擇哪個廠商的接收機就可以了。
另外,在現(xiàn)有情況下,單臺GPS接收機要想達到1m以內(nèi)的精度是不可能實現(xiàn)的,原因除GPS本身精度外,還包括地圖、定位點測繪、嵌入式設(shè)備的運行速度等,而且過度追求定位精度并無實際的意義。
1.3 PDA與GPS接收機的連接和處理流程
1.3.1PDA與接收機連接示意圖:
PDA與GPS接收機是單向通訊,也就是說PDA只被動接收傳輸過來的數(shù)據(jù),不需要向GPS接收機發(fā)送數(shù)據(jù)。
1.3.2端口設(shè)置
基于Windows Mobile 5.0系統(tǒng)的移動設(shè)備,提供了對GPS接收機的連接設(shè)置,可以將硬件連接端口映射為軟件的COM口,也就是說,無論硬件連接的是哪一類端口,對應(yīng)用程序來說均可以按串口的工作方式進行讀取,設(shè)置程序的界面如下圖:
正常情況下,傳輸?shù)牟ㄌ芈蕿?800BPS,但這個還要留意硬件廠商所提供的參數(shù)。
1.3.3 工作流程
1.4 PDA與GPS接收機的通訊方法
PDA與GPS通訊主要以串口的方式完成,雖然現(xiàn)在對于PDA來說GPS模塊有多種硬件接口可選(如紅外、CF、藍牙等),但最后在處理時,均會被映射為串口的方式進行讀取。
因此,對GPS數(shù)據(jù)的接收和處理,主要是完成對串口的打開、設(shè)置及讀取。
下面的代碼是eVC下對串口的操作方式的DEMO(具體的用法請參看eVC幫助或MSDN):
1.4.1打開串口
eVC采用如下代碼打開串口中:
m_hCom = CreateFile(_T(“COM8:”),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(m_hCom == INVALID_HANDLE_VALUE)
{
dwError = GetLastError();
AfxMessageBox(_T("串口打開錯誤,%d!"),dwError);
}
1.4.2配置串口
//設(shè)置串口接收和發(fā)送緩沖大小
SetupComm(m_hCom,2048,2048);
//設(shè)置事件
SetCommMask(m_hCom, 0);
//設(shè)置超時時間
TimeOuts.ReadIntervalTimeout = 1000;
TimeOuts.ReadTotalTimeoutMultiplier = 500;
TimeOuts.ReadTotalTimeoutC**tant = 5000;
TimeOuts.WriteTotalTimeoutMultiplier= 500;
TimeOuts.WriteTotalTimeoutC**tant = 5000;
DCB dcb;//建立設(shè)備描述表
GetCommState(m_hCom,&dcb);//取當前設(shè)備描述
// 硬件流控制設(shè)置
dcb.fOutxCtsFlow = FALSE;
dcb.fRtsControl = FALSE;
// XON/XOFF流控制設(shè)置
dcb.fInX=dcb.fOutX = FALSE;
dcb.fBinary=TRUE;
dcb.BaudRate = 9600;//9600; // 數(shù)據(jù)傳輸速率
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
//設(shè)置串口屬性
SetCommState(m_hCom,&dcb);
1.4.3讀取數(shù)據(jù)
BYTE *byteBuff;
int intLength;
Status = ReadFile(m_hCom,byteBuff,intLength,&intLength,&m_osRead);
if(!Status)
{
if(GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(m_osRead.hEvent,INFINITE);//5000);
return intLength;
}
return 0;
}
return intLength;
1.5 PDA與GPS接收機的通訊協(xié)議
無論哪一個廠商的GPS接收機均提供對標準GPS通訊協(xié)議NMEA 0183的支持,因此我對所有GPS數(shù)據(jù)讀取,實際上是對NMEA 0183協(xié)議的解釋,當然個別廠商也會提供自己的通訊協(xié)議,但這個不在考慮之列,因為NMEA 0183對每一個廠商來說,還是首選。
1.5.1協(xié)議描述
NMEA0183協(xié)議是美國國家海洋電子協(xié)會(NationaIMarine Electronlcs Association)制定的GPS接口協(xié)議標準。NMEA0183定義了若干代表不同含義的語句,每個語句實際上是一個ASCII碼串。這種碼直觀,易于識別和應(yīng)用。在試驗中,不需要了解NMEA0183通信協(xié)議的全部信息,僅需要從中挑選出需要的那部分定位數(shù)據(jù),其余的信息忽略掉。
一個完整的NEMA0183語句是從起始符“$GPGGA”到終止符“”為止的一段字符串。需要掌握的信息是經(jīng)緯度、經(jīng)緯度方向、GPS定位狀態(tài)和接收信號的時間。所以當接收到這樣一個完整的NEMA0183語句時,提取有用信息的方法是:先判定起始符$GPGGA的位置,從起始符開始讀人數(shù)據(jù),再通過異或校驗后的語句中尋找字符“,”,然后截取前后兩個“,”之間的字符(串)獲得所關(guān)心的數(shù)據(jù),并以回車符為一個CPS語句的終止符,得到一個完整的GPS信號。在提取出的GPS語句中,找尋經(jīng)緯度所在的逗號位置,讀出經(jīng)緯度坐標,再將經(jīng)緯度坐標進行度數(shù)的轉(zhuǎn)換。因為地圖的坐標是以度數(shù)為標準的。
聲明①:文章部分內(nèi)容來源互聯(lián)網(wǎng),如有侵權(quán)請聯(lián)系刪除,郵箱 cehui8@qq.com
聲明②:中測網(wǎng)登載此文出于傳遞更多信息之目的,并不意味著贊同其觀點或證實其描述,文章內(nèi)容僅供參考。