GNSS仿真測試之三種常用坐標系與轉換

作者介紹

在當今的全球導航衛星系統(GNSS)技術領域,仿真測試是評估和驗證GNSS接收機性能的關鍵環節,全球導航衛星系統(GNSS)仿真測試是確保GNSS接收機和導航解決方案在實際部署前能夠正確、可靠地工作的關鍵步驟。無論是為了確保定位精度、測試信號干擾的影響,還是評估在復雜環境下的導航可靠性,掌握正確的坐標系知識對于進行有效的仿真測試至關重要。

在GNSS仿真測試的領域,三種關鍵的坐標系構成了我們工作的核心:地心地固坐標系(ECEF)、地理坐標系(LLA,包括緯度、經度和海拔高度)以及本地水平坐標系(ENU,即東-北-上)。

本文不僅將詳細介紹這三種坐標系的概念和特點,還將探討它們在GNSS仿真測試中的具體應用。我們將學習如何在實際的仿真環境中使用這些坐標系,以及如何在不同坐標系之間進行精確的轉換。這些轉換對于確保仿真測試的準確性至關重要,因為它們允許我們將衛星的全球位置與接收機的局部視角相匹配。掌握這些坐標系的轉換技能都將極大地提升您在GNSS仿真測試中的工作效率和成果的質量。

一、坐標系介紹

1.ECFF(Earth-Centered, Earth-Fixed)

ECEF坐標系是一個笛卡爾坐標系,一般中文叫做地心地固坐標系,其原點位于地球質心,X軸通過本初子午面和赤道的交點,Y軸位于赤道面上,通過東經90度,Z軸指向北極點。這個坐標系隨著地球一起旋轉,因此它固定在地球上。比如,鳥巢的ECEF坐標約為(-2175804.26,4383129.27,4077167.07),單位為米(m)。

在ECEF坐標系中,地球上的任何點都可以用三個坐標值(X, Y, Z)來表示,分別表示該點相對于地球質心的位置。這個坐標系對于全球定位系統(GPS)和其他GNSS系統尤其重要,因為衛星的位置通常以ECEF坐標來表示,經常被用來精確描述衛星的位置和計算衛星與接收機之間的距離。

2.LLA(Latitude, Longitude, Altitude)

LLA坐標系是一個球面坐標系,一般稱為地理坐標系,或根據三軸命名為緯經高坐標系,用于描述地球上某一點的位置。它由三個參數組成:

● 緯度(Latitude):指從赤道(0度緯度)到北極(90度北緯)或南極(90度南緯)的角度測量,它確定了地球表面上一個點的東西位置,范圍為-90°~90°,

● 經度(Longitude):指從本初子午線(0度經度,通過格林尼治天文臺)到東經或西經的角度測量,它確定了地球表面上一個點的南北位置,范圍為-180°~180°(或0~360°),

● 海拔高度(Altitude):指從地球表面(通常是平均海平面)到某一點的垂直距離。這個高度可以是從參考橢球體(如WGS84橢球體)的表面計算出的幾何高度,也可以是從平均海平面計算出的正高或從大地水準面計算出的正常高。

比如,鳥巢的LLA坐標為(39.99°,116.40°,50m)。

LLA坐標系是我們在日常生活中最常接觸到的坐標系,如地圖制作、導航和地理信息系統(GIS)中廣泛使用,或用于將地球表面的位置轉換為其他坐標系。在GNSS仿真測試中,LLA坐標系常用于定義接收機的初始位置和移動路徑。

3.ENU(East-North-Up)

ENU坐標系是一個笛卡爾坐標系,是一個局部的本地水平坐標系,也稱為東北天(東北上)坐標系。其原點位于地球表面上的一個特定點,通常與接收機的位置相對應。在ENU坐標系中,東軸(East)指向當地的東方向,北軸(North)指向當地的北方向,上軸(Up)垂直于水平面,指向天空。本地原點由大地坐標( lat0、lon0、h0 )描述。請注意,原點不一定位于橢球體的表面上。

若以鳥巢本身為原點,那么他的ENU坐標為(0,0,0),單位為m。

ENU坐標系常用于描述接收機附近的物體運動,如車輛的行駛軌跡或無人機的飛行路徑,因為它提供了一個與接收機位置直接相關的坐標系。

4.三個坐標系的對比

除此之外,還有一些常用的坐標系,例如NED坐標系(東北下坐標系)、AER坐標系(方位角-仰角-范圍本地坐標系)等。

二、三個坐標系的轉換

ECEF(地心地固坐標系)、LLA(地理坐標系)和ENU(東-北-上坐標系)之間的轉換是通過一系列數學公式實現的。以下是這些坐標系之間轉換的基本方法:

1.ECEF到LLA的轉換:

這種轉換涉及到從笛卡爾坐標(X, Y, Z)到球面坐標(緯度, 經度, 海拔高度)的轉換。

● 首先,可以通過X和Y坐標計算出經度,通過Z坐標和地球的扁率計算出緯度。

● 然后,使用地球的參考橢球模型(如WGS84)來計算海拔高度。

2.LLA到ECEF的轉換:

這種轉換是從球面坐標到笛卡爾坐標的轉換。

● 經度和緯度可以直接用于計算ECEF坐標中的X和Y值。

● 海拔高度和地球的參考橢球模型用于計算Z值。

3.ECEF到ENU的轉換:

這種轉換通常需要一個參考點,該點的LLA坐標已知。

● 首先,將參考點的ECEF坐標轉換為LLA坐標。

● 然后,使用參考點的LLA坐標,通過一系列旋轉和平移變換,將ECEF坐標轉換為ENU坐標。

4.ENU到ECEF的轉換:

這是ECEF到ENU轉換的逆過程。

● 首先,根據參考點的LLA坐標計算坐標點的LLA坐標

● 經度和緯度可以直接用于計算ECEF坐標中的X和Y

● 海拔高度和地球的參考橢球模型用于計算Z值。

這些轉換涉及到復雜的數學計算,包括球面三角學、旋轉矩陣和橢球幾何學。

在實際應用中,這些轉換通常通過專業的數學庫或GIS軟件來實現,如PROJ、GDAL或MATLAB的地理工具箱等。

德思特AutoTest自動化測試平臺為用戶提供三種坐標軸的快速轉換工具,簡單輸入現有坐標點即可完成對其他兩個坐標系的轉換。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14575.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【git】學習記錄: 貯藏功能

Git 貯藏修改是一種臨時存儲工作目錄中已經修改但尚未提交的更改的機制。通過貯藏修改,你可以將當前的工作目錄狀態保存起來,以便你可以在之后的時間點重新應用這些更改,或者在不同的分支間切換時避免沖突。 要使用 Git 貯藏修改&#xff0c…

Linux(centos)常用命令

Linux(Centos)常用命令使用說明文檔 切換到/home目錄下 使用cd命令切換目錄,例如: cd /home列出/home目錄下的所有文件 使用ls命令列出目錄下的文件和子目錄,例如: ls /home新建目錄dir1 使用mkdir命…

頭歌OpenGauss數據庫-I.復雜查詢第1關:獲取前N名成績

本關任務:編寫函數來實現獲取前N名成績的方法。 提示:前面的實驗沒有提供編寫自定義函數的示例,需要參考OpenGauss數據庫文檔學習自定義函數的使用。 score表內容如下: IdScore13.5223.6534.2343.8554.2363.65 --#請在BEGIN - END…

python windows 開發.exe程序筆記

import win32api import win32gui import win32con import time import tkinter as tk## pyinstaller --onefile t4.py 將python 代碼打包為windows可執行文件 .exe ## airtext 大漠 def clickGoogle():hw win32gui.FindWindow("Chrome_WidgetWin_1", "新標…

解決Redis 緩存雪崩(過期時間不一致) 和 緩存穿透(黑名單)

解決Redis 緩存雪崩(過期時間不一致) 和 緩存穿透(黑名單) public Product getdetailById(Integer id) {String key "product." id;// 查詢黑名單中是否有該keyBoolean b hashOperations.hasKey(PROODUCT_DETAIL_B…

算法 Hw7

Hw 7 Graph Algorithm 1 Edge detection2 Reachability3 Bitonic shortest paths 1 Edge detection 由 Cut Property 可知:如果 e 是從某個集合 S 到補集 V?S 的開銷最小的邊,則 e 一定所有最小生成樹中。 由 Cycle Property 可知:如果 e 是…

Gradle常見問題及總結

使用android studio開發項目,難免遇到gradle相關的錯誤,在此總結。 gradle插件與gradle home版本關系錯誤 參考更新 Gradle Gradle下載太慢 Index of /gradle/ (tencent.com) 是國內下載地址,手動下載對應版本即可 緩存不刷新 問題描述 maven發布…

jenkins插件之xunit

分析測試工具執行的結果,并圖形化,比如phpunit,phpstan,可分析junit格式的結果 安裝jenkins插件 搜索xunit并安裝 項目配置 配置 - Build Steps 您的項目 - 配置 - Build Steps, 新增 Run with timeout 超時時間根據實際情況配置 Build…

Day38 貪心算法part05

LC435無重疊區間(未掌握) 思路:先對數組進行排序,找到非重疊的區間的個數,然后區間的總數減去非重疊區間的個數即是需要移除的區間的個數與LC452用最少數量的箭引爆氣球類似,但是不同的是[1,2]和[2,3]在此題并不是重疊區間但是在…

oracle怎么處理json格式

向數據庫導入json相關jar包 loadjava -r -f -u bsuser/XXXX192.168.10.31/bsorcl json.jar 要刪除的話,刪除指定jar dropjava -u bsuser/XXXX192.168.10.31/bsorcl json.jar select * from user_java_classes 然后我們就可以取到json串中任意節點的值

Linux完整版命令大全(四)

2. linux系統設置命令 alias 功能說明:設置指令的別名。語  法:alias[別名][指令名稱]補充說明:用戶可利用alias,自定指令的別名。若僅輸入alias,則可列出目前所有的別名設置。 alias的效力僅及于該次登入的操作。…

行列視(RCV)部署在互聯網還是部署在企業內部?

行列視(RCV)的部署方式可以根據企業的具體需求和情況來靈活選擇。它既可以部署在互聯網上,也可以部署在企業內部。 對于希望實現遠程訪問、多地點協同工作或者與第三方服務集成等需求的企業,可以選擇將行列視(RCV&…

Postgresql源碼(129)JIT函數中如何使用PG的類型llvmjit_types

0 總結 llvmjit_types文件分三部分 類型定義:llvm通過變量找到對應結構體的定義,在通過結構體內的偏移量宏使用成員變量。模版函數定義: 第一:AttributeTemplate被當做一個函數屬性的模板(例如nofree、nosync等clang…

SpringBoot項目中redis序列化和反序列化LocalDateTime失敗

實體類中包含了LocalDateTime 類型的屬性,把實體類數據存入Redis后變成這樣: 此時,存入redis不會報錯,但是從redis獲取的時候,會報錯: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Ca…

Springboot項目打包:將依賴的jar包輸出到指定目錄

場景 公司要對springboot項目依賴的jar包進行升級,但是遇到一個問題,項目打包之后,沒辦法看到他里面依賴的jar包,版本到底是不是升上去了,沒辦法看到。 下面是項目打的jar包 我們通過反編譯工具jdgui,來…

VUE3和VUE2

VUE3和VUE2 上一篇文章中,我們對VUE3進行了一個初步的認識了解,本篇文章我們來進一步學習一下,順便看一下VUE2的寫法VUE3是否能做到兼容😀。 一、新建組件 我們在components中新建一個組件,名稱為Peron,…

緩存降級

當Redis緩存出現問題或者無法正常工作時,需要有一種應對措施,避免直接訪問數據庫而導致整個系統癱瘓。緩存降級就是這樣一種機制。 主要的緩存降級策略包括: 本地緩存降級 當Redis緩存不可用時,可以先嘗試使用本地進程內緩存,如Guava Cache或Caffeine等。這樣可以減少對Redis…

陰影映射(線段樹)

實時陰影是電子游戲中最為重要的畫面效果之一。在計算機圖形學中,通常使用陰影映射方法來實現實時陰影。 游戲開發部正在開發一款 2D 游戲,同時希望能夠在 2D 游戲中模仿 3D 游戲的光影效果,請幫幫游戲開發部! 給定 x-y 平面上的…

再次學習History.scrollRestoration

再次學習History.scrollRestoration 之前在react.dev的源代碼中了解到了這個HIstory的屬性,當時寫了一篇筆記來記錄我對它的理解,現在看來還是一知半解。所以今天打算重新學習一下這個屬性,主要從屬性以及所屬對象的介紹、使用方法&#xff0…

每日一題(2)——100~200間的素數

方法一&#xff1a; public class suCount {public static void main(String[] args){int sum0;c1:for(int i100;i<200;i){for(int j2;j<i;j){if(i%j0)continue c1;//continue中斷循環&#xff0c;且返回外層循環&#xff0c;進入下一次遍歷else if(ji-1){System.out.pr…