2008年5月27日 星期二

GPS 座標計算原理

http://4rdp.blogspot.com/2008/05/gps.html

無論飛機或船艦都需要定位,因為在空中或大海上不像在陸地上可以循著道路行進,並且隨處有顯著的路標或地標可以辨識身在何處。而定位的技術根據人類科技的演化逐步精確,從早期觀察日月星辰以及指南針使用,可以粗略知道方位。但是這些無法滿足航海及航空需求,因為天候不佳時無法觀察天體,而磁羅經會因為地磁偏移產生誤差,所以需要其它定位儀器協助。本文先討論 GPS(Global Positioning System 全球定位系統) 座標計算,有空將再專章介紹陀螺儀羅盤(Gyrocompass)。

近年來GPS蠻火紅的,不少產品有此功能,比如汽車導航或高階手機。GPS 共有 24 顆衛星 (包含三顆備用衛星),分佈在六條相交30度的軌道上,任何地方只要能接收四顆衛星資料,就可以計算出在地球上的位置,在此僅討論座標計算的問題。



以地心為三度空間零點,XY 軸在赤道平面上,X 軸貫穿經度 0 度與180 度,Y 軸貫穿東西經 90 度,Z 軸貫穿南北兩極,距離地心半徑 R 的球體方程式為, X2 + Y2 + Z2 = R2
在這個立體座標上以點 (a,b,c) 為球心,半徑為 r 的球體方程式是,
(X – a)2 + (Y – b)2 + (Z – c)2 = r 2

GPS衛星傳遞的訊號包括衛星自身 (a,b,c) 座標資料以及發射時間,那麼 GPS 接收器就可以利用這些資訊計算位址。首先計算衛星與接收器間的距離 r = 光速 x (接收器接收時間 - 衛星發射時間) 。

假設現在有四顆衛星資料,



用四顆衛星計算,可以將二次方程式組問題簡化為一次線性代數計算。

a 為地球橢球的長半軸,b 為地球橢球的短半軸,
已知 (X,Y,Z) 座標,參考大地座標系可求出緯度 B 經度 L,


延伸閱讀:
GPS - Clock Error of Receiver
最小平方法 (Least Square) ,求解多顆衛星計算
GPS - Distance Error

2010 補充資料:
土地測量(Land Surveying)方面的問題,想要知道地理座標所在,GPS只是測量方法之ㄧ,也許您可以到國土測繪中心 http://www.nlsc.gov.tw/ 找到更專業的說明。

本文是本部落格最具人氣的專業文章之一,因此許多人留言及引用,下列為已知引用文:
市立高雄高工,陳俊榮,http://www.shs.edu.tw/works/essay/2008/10/2008102820101989.pdf
中山大學物理系,http://www2.nsysu.edu.tw/physdemo/docs/exp10/exp10doc3.pdf
大隻熊的部落格,http://blog.udn.com/mhwu1/4555469
德霖技術學院資訊工程系,http://b007.w2.dlit.edu.tw/ezfiles/7/1007/img/108/118.pdf

35 則留言:

  1. 這算式是甚...甚...甚麼...?

    回覆刪除
  2. 如果您已經高中畢業 這樣的計算式 應該看得懂

    不然您得複習:
    解析幾何(球體座標)、線性代數(陣列)、三角函數

    回覆刪除
  3. 多謝你的網站,讓我知道了原理。雖然我的數學不佳,但也獲益不少。
    (我一直也偑服數學好的人...)

    回覆刪除
  4. 別客氣,我不清楚您的學歷背景,不過數學力是可以培養的。

    一般日常生活,小學數學就足夠了,中學的幾何與代數可以處理簡單的工藝問題,對於解析幾何、線性代數、三角函數、對數,這些都是工程師的基本數學知識,工程數學與機率統計則需要微積分的基礎。

    如果想成為優秀的軟體設計師,學好數學,對你會有很大的加分。

    其它的文章,也希望能給你助益。

    回覆刪除
  5. 非常感謝你的分享 其實我是為了做報告才找到這裡的 借用一些數學公式請見諒
    你自介提的 網路巨變元年 我會去借來看
    雖然不是獲益良多 因為很多看不懂 但看了你的部落格 心裡多了一些想法 謝謝~

    回覆刪除
  6. 成立此部落格,就是要幫助有求知需求的朋友,多觀察、多閱讀、多思考。這裡發佈的文章,是經過自己消化吸收,有個人獨創見解,在其他地方應該是找不到。

    很高興您能留言表達意見。

    回覆刪除
  7. 從wiki關於GPS的資料鏈接找到這裡。您給的公式很清楚,終於明白為什麽要4顆衛星來定位了。也知道怎么計算了。謝謝!

    回覆刪除
  8. 其實三顆衛星資料也可以計算位置,但是需要求解三元二次方程式,反而更複雜。

    這裡只是留下個人所學所知,其實研發就是利用大家所知的知識,開發出商品,有空常來逛逛,說不定有新發現。

    回覆刪除
  9. 相當精采!感謝你的資料提供!!
    另外我在另一個網站上找到相關資料,我覺得他裡頭的等式似乎有問題,在d1前的c (光速)的 + 號是否應該改成 = 號?不知你覺得如何?

    link: http://www.autooo.net/Html/communication/Communication-Case/2007-6/4/07640625.html

    回覆刪除
  10. 謝謝您的稱讚,您所提供的連結,網頁公式確實需要修正為等號。

    這是我第一次看到其它網頁提出類似的公式,也許還有其它網頁有類似公式,但是有明確的數學式推導,這裡應該是台灣第一站。

    回覆刪除
  11. 剛好在查 GPS 資料時路過貴站, 透過這些數學公式總算知道手上的 PDA GPS 定位原理.

    非常感謝你的分享.

    另外, 最開始的四式公式似乎有標示錯誤, 每式的最後一個變數應該是 Z 而不是 Y ?

    回覆刪除
  12. Hi Den,

    感謝您的指正,公式已修正。
    如果有發現其它錯誤,煩請告知。
    謝謝。

    回覆刪除
  13. Hello Bridan

    We're looking for an Algorithm RD Ast. Manager. Could I know how to contact you directly?
    Thank you~

    Here's my company website for your ref. www.longood.com.tw

    Best regards,
    Jocelyn

    回覆刪除
  14. Hi Jocelyn,

    Thanks for your recognition.

    I'm satisfied the present work and life.
    There is not plan to switch my job now.
    And my company is not allowed its employees part time.

    Unfortunately, I am afraid have to reject your kind invitation at the moment.

    In the future, I will contact with you directly when the timing is right.

    Thank you.

    Best Regards,
    Bridan

    回覆刪除
  15. Hi Bridan

    I can tell that you really love your job and love to share your knowledgement with others.

    Here's my email: Jocelyn@longood.com.tw
    Wish I could receive some information and joke from you.

    Best regards,
    Jocelyn

    回覆刪除
  16. Hello Jocelyn,

    You are welcome.

    I have put your e-mail into my friend loop.
    If I have useful or interesting stuff, I am going to send you by e-mail.

    Thank you.

    Best regards,
    Bridan

    回覆刪除
  17. 小弟數學不太好, 最近要作一個類似 GPS 的系統. 在空間中, 利用數個已知座標與未知點的距離, 算出未知點的座標.
    為了這個問題, 查訪了網路上許多文件, 路過貴寶地, 感謝大大您大方的寫出計算方式. 不過大大您寫的公式, 與 GPS 計算座標的作法, 有一點出入.
    GPS 會先假設接收機的時鐘與衛星的時鐘有誤差. 所以四個衛星的測得的距離, 還包含一個時間上的誤差, 成為四個未知數的聯立方程式, 並非如大大所列的公式. 希望有機會可以看看大大解出包含時鐘誤差的公式. 謝謝!

    回覆刪除
  18. Hi Bernie,

    我並非 GPS 相關產品的研發人員,個人只是將所知所學融會貫通,整理出重要公式。

    確實我所列的式子,是假設接收器的時間與衛星時鐘同步,關於時間誤差問題,我會另外專章說明。

    很高興您能提出問題,我想您應該是研究生,這部分您應該也有能力解出,有興趣的讀者,可以先自行閱讀 http://en.wikipedia.org/wiki/Global_Positioning_System 。

    回覆刪除
  19. 小弟不是研究生, 畢業至今已15個年頭, 一半以上的知識都還老師了. 不過在大大您的鼓勵下, 小弟還是試著去解這個代數題.

    首先在距離 r1, r2, r3, r4 上加入未知數 - 誤差 e. 如大大您的計算的方式, 在 1-2, 2-3, 3-4, 4-1 之後, e 的二次變數一併被減掉. 為了消去 e 成為三元一次聯立方程式, 所以在新的方式程中乘上 e 的係數互減, 消去變數 e 之後, 成為新的三元方程式.

    但是很奧妙的是, 小弟用電腦模擬計算這個結果, 發現用行列式在解 x, y, z 時, delta 都固定是 0 (無解或無限多解)...

    後來重新由幾何去思考, 小弟有了一個新的想法. 與已知點距離為 d, 可以構成一個球面. 但是如果加入了一個變數 e (誤差), 這個球面就變成了球殼.

    這個題目變成要由四個球殼上求得交點. 兩個球殼的交點是一個環, 但是兩個環的交點, 應該是一個線段, 而非一個點. 所以電腦模擬出 delta 固定是 0, 應該就是意味著非單一解.

    後來小弟試著把已知點由四個改成五個, 這樣電腦模擬就可以順利計算出 x, y, z 及 e.

    這時, 小弟就不禁開始好奇, GPS 定位是只需要四顆衛星的訊號, 就可以定位為正時, 好神奇, 不知怎麼作到的!

    回覆刪除
  20. Hi Bernie,

    原來 39 是指年齡!OK,在我正式貼文前先簡略答覆您的疑點,重點在 "校正"。

    每個出廠的GPS產品,工廠可以先求出個別的時鐘誤差,將它紀錄在機器中,消費者使用時只要有四顆衛星就能定位。

    希望您能參透我所說明的玄機。

    回覆刪除
  21. 您好,我是一個普通的大學本科學生,通過搜索引擎來到這裡。

    多謝您的網站,很少能看到如此清晰的原理解析,非常感謝您的指導。

    但是,我有一疑問,如果不考慮誤差e的話,那麼您給出的四個原始方程中僅有三個未知數,爲什麽一定要4-1.3-1.2-1把四個方程變成3個方程呢?

    還有,後來您說誤差e可以提前校正,我也有不同的看法。我感覺移動設備的時鐘精度是比較低的,運行時會誤差會經常變化。

    我的想法就是,在您的公式中,如bernie所言,加入誤差e,直接4個方程四個未知數求解,不知是否可行?

    希望得到您的指導,謝謝!

    回覆刪除
  22. 很高興您留言提問題,只是不知如何稱呼?

    我喜歡以淺顯易懂的方式,說明解釋難懂的原理,通常讀者有一般水準,應該可以理解吸收,這裡每篇文章仔細閱讀,應該可以讓您有所獲益。

    言歸正傳,將四個三元二次方程式,利用相減計算,簡化成三個三元一次方程式,可以降低電腦解算時間不是很好嗎?況且多元二次方程式組,很難利用線性代數(陣列)去解算,所以才會利用這樣的數學技巧,化為多元一次方程組求解。

    關於時鐘精度,確實沒有東西可以保證自身毫無誤差,包括衛星上的時鐘,因為 GPS 商品它必須利用時鐘精確計算座標,所以它選用的晶體振盪器零件誤差規格應該在 20 ppm 以內,而且頻率是非常穩定的,也就是時間不會忽快忽慢,因此時間誤差是非常穩定。

    研發養成所還有多篇討論 GPS 專文在 航海天文分類,其中 GPS - Clock Error of Receiver 有討論 error e, 歡迎您查閱。

    回覆刪除
  23. 您好!謝謝您留言指導,看了您的知道後,頗有豁然開朗之感,真的很感謝您。

    另外,我看了您的GPS - Clock Error of Receiver后,感覺第二種方法,實質上,是認為高度z=0,那麼,它應該就是增加的一個方程吧。

    對了,我的名字是趙暉。

    再次感謝您的指導!

    回覆刪除
  24. 趙暉您好,很高興能與你網路相識。

    關於第二個方法,把地表當成一個球,這個新增的方程式為 X^2 + Y^2 + Z^2 = R^2 ,因為那個假想衛星在地心,XYZ 座標在 (0,0,0),R 為地球半徑。不過 GPS 商品應該不會使用這方法,誤差會很大。

    回覆刪除
  25. Dear Bridan:
    日前我用google app inventor可以約略計算透過手機的gps找出兩處異地的經緯度求其距離。
    如果我想用google app inventor去找兩點經緯度的方位角,不知道我該如何實現此部分?

    回覆刪除
  26. 薛老師您好,

    想求方位角,須利用球面三角學的正弦定律,假設一球面三角形 ABC ,其邊長為 abc ,而對邊角為 ABC ,那球面三角形的正弦定律為,
    sinA/sin(a) = sinB/sin(b) = sinC/sin(c)

    假設 A點為起點,B點為終點,C點為北極或南極,那就可以求出起點角度A。

    不知這樣的題示,可否理解?我會準備一篇專文討論這問題。

    回覆刪除
  27. 薛老師, 我寄一份app inventor code給您, 可以計算現在位置與台北101之間的距離.

    回覆刪除
  28. 阿吉老師好:
    謝謝您提供的檔案。日前我自己也有以app inventor完成做過經緯度測距,目前剩下方位角未搞定。
    之前曾見過有一個ipad軟體(http://app.yipee.cc/iphone/concierge-car-locator-%E7%B0%A1%E5%96%AE%E6%89%BE%E8%BB%8A%E4%BD%8D%E7%BD%AE%E8%BB%9F%E9%AB%94/)

    他可以找出車子停車的位置,與當前位置兩點間的方位。
    我覺得很有趣,所以想自己試試看。

    回覆刪除
  29. 阿吉與薛老師兩位好,

    兩位老師已經先聊起來了 ^_^,昨天正好與阿吉老師吃飯,談起薛老師遭遇 APP inventor 問題,本週計畫先介紹阿吉的新書,下週再談論航海學的大圈航法,了解這原理後,就可以算出兩地的距離及方位,敬請期待。

    回覆刪除
  30. 我用google app inventor搭配samsung galaxy tab的gps,讀取經緯度的資料。發現gps抓回來的數據,本身會與所在之處有誤差的情形。

    我也試著用手機上的軟體google map定位我目前所在之處,確實其落點是錯誤的,與正確的點,相差有30~50m左右。這是合理的嗎?
    當然,因為誤差,所以計算兩點經緯度,測距離以及方位,都會有嚴重影響。

    不過papago在導航時,卻又能準確落在正確的道路上?

    不知您有何看法?

    回覆刪除
  31. 薛老師您好,

    關於GPS座標誤差問題,需要靠其它方法修正,因為你直接引用 App Inventor 的 API,我不知道它內部如何計算處理,你可以有兩種方式解決,

    一、用其它的 API,最好是可以取得原始衛星座標資料,自己列式計算。
    二、利用其它感測器輔助,如加速度、電子羅盤等,再加上軟體識別地圖路線,找出座標位置。

    回覆刪除
  32. 我覺得手機抓到的經緯數據與地圖上有誤差,經查詢網路上的資料發現:
    地圖上的經緯度與實際上地圖有誤差,是為了軍事保密之用,因此在經緯度與地圖之間存在一個偏移量,因此出現在地圖上的落點,便與所處的位置不同。

    不過據最新資料,有網友討論說「google map已將偏移的計算plugin在地圖中,暫時無法得知計算的偏移公式。

    換句話說:如果要使用google map,似乎得接受偏移量的事實。否則自己得找出偏移值。

    回覆刪除
  33. 薛老師您好,

    謝謝補充資料,從軍事角度來看,故意在地圖上製造偏移,可以防止敵人鎖定攻擊,不過由以前學航海的經驗,海圖是精確的,不然大船擱淺不得了,我認為 GPS 有分級,軍用較精準,商用存在較大偏差,需要其它方法修正。

    回覆刪除
  34. 其實三顆衛星就夠了吧。。。三顆衛星的解是兩個點,分別在三顆衛星組成的面的兩邊。除非你三顆衛星的面通過地心,不然不會兩個點都在地表。通常情況下如果只有三顆衛星的訊號,三顆肯定靠近地球的同一端,兩個解一個在地表一個在空中。嘛,其實也就是變向把地球當成第四顆球。。

    回覆刪除
    回覆
    1. 你很清楚三顆衛星會解出兩個點,GPS必須精準算出位置,不然會出事情的,因此用四顆衛星求解才是正道。

      刪除