一種基於Android內核層實現高精度衛星導航定位方法
2023-06-14 03:18:16
一種基於Android內核層實現高精度衛星導航定位方法
【專利摘要】本發明涉及一種基於Android內核層實現高精度衛星導航定位方法,本發明具體方法包括:1、從標準Android作業系統的HAL層開始,增加對下層晶片(或模塊)定位原始觀測數據的抽象和封裝,向上逐層增加高精度定位擴展接口和相關回調函數接口等,並在應用框架層新設置一批高精度定位應用編程接口;2、在HAL層增加精密單點定位、差分定位、實時動態差分定位。通過本方法可以使得:Android第三方應用開發者調用原有標準GNSS普通定位API,即可獲得高精度定位結果;調用本方法在Java框架層新增加的API,在Java應用層獲得定位硬體輸出的原始觀測數據,實現自定義的高精度定位。
【專利說明】-種基於Android內核層實現高精度衛星導航定位方法
【技術領域】
[0001] 本發明涉及高精度衛星定位導航領域,尤其涉及在車聯網、車載Android系統中 使用的一種基於Android內核層實現高精度衛星導航定位方法。
【背景技術】
[0002] 對於汽車電子行業來說,充斥著許多新興事物,從車聯網到車載導航,熱點源源不 斷。隨著受眾群體的增加,車載導航的種類也越來越多。
[0003] 科技在發展,智能作業系統與車輛結合已經是現在的發展趨勢,蘋果公司推出了 carplay, Google公司推出了Android Auto等都是典型代表。這種趨勢代表著智能車聯網 的發展導向。
[0004] 高精度衛星導航定位是利用地面增強系統,提高衛星定位的精度。目前普通衛星 導航的定位精度只能在10-20米,通過高精度定位算法可以將定位精度提高到亞米級,從 而可以掌握車輛變道、超速等行為,實現車輛主動安全控制,是車聯網亟需的技術;
[0005]目前對於車載的智能作業系統中,實施高精度定位的難度較大,一般第三方App 開發者難以使用。
【發明內容】
[0006] 本發明主要是解決現有技術所存在的技術問題;提供了一種Android第三方應用 開發者調用原有標準GNSS普通定位API,即可獲得高精度定位結果的一種基於Android內 核層實現高精度衛星導航定位方法。
[0007] 本發明還有一目的是解決現有技術所存在的技術問題;提供了一種現有Android 第三方應用程式無需進行修改,即可直接獲得高精度定位結果的一種基於Android內核層 實現高精度衛星導航定位方法。
[0008] 本發明再有一目的是解決現有技術所存在的技術問題;提供了一種能夠在Java 應用層獲得定位硬體輸出的原始觀測數據,實現自定義的高精度定位的一種基於Android 內核層實現高精度衛星導航定位方法。
[0009] 本發明的上述技術問題主要是通過下述技術方案得以解決的:
[0010] -種基於Android內核層實現高精度衛星導航定位方法,其特徵在於,從標準 Android作業系統的HAL層開始,增加對下層晶片或模塊定位原始觀測數據的抽象和封裝, 向上逐層增加高精度定位擴展接口和相關回調函數接口。其中,向上逐層新增高精度定位 擴展接口和相關回調函數接口依次是:
[0011]在HAL層中:
[0012]新增1. 1:由標準Andorid內核中Gpslnterface接口的get_extension函數引 出一組高精度GNSS定位接口函數,稱為PGpsInterface接口函數,用以滿足高精度定位相 關設置需求;
[0013]新增1. 2 :在標準Andorid內核中原有Gpslnterface接口的set_position_mode 中,擴展了新的RTK定位模式、PPP定位模式和差分定位模式;
[0014] 新增1. 3 :在標準Andorid內核的GpsCallbacks中添加原始觀測數據回調的接口 函數,稱為gnss_obsdata_cb回調接口,實現將HAL層中獲得的GNSS原始觀測數據上報到 上層;
[0015]在JNI層中:
[0016]新增 2. 1:添加gnss_obsdata_callback函數作為gnss_obsdata_cb的實現,
[0017] 新增 2. 2:添加android_location_GpsLocationProvide;r_read_gnss_obsdata 以實現在java層通過JNI方式讀取原始觀測數據,同時添加對應於PGpsInterface接口 的函數供GpsLocationProvider調用,使用JNI提供的CallVoidMethod方法將method_ reportGNSSObsData函數指針與GpsLocationProvider中的reportGNSSObsData映射起 來,在JNI的函數映射表中添加新的接口映射關係;
[0018] 新增2. 3:添加native函數來調用JNI層的PGpsInterface接口函數,
[0019]新增 2. 4:添加native_read_gnss_obsdata函數來調用JNI層的android_ location_GpsLocationProvider_read_gnss_obsdata函數來獲取原始觀測數據,
[0020]新增 2. 5:添加reportGNSSObsData函數供JNI層的gnss_obsdata_callback作 為回調,
[0021] 新增2. 6:在GpsLocationProvider添加與HAL層相對應的定位模式GPS_ P0SITI0N_M0DE_RTK、GPS_P0SITI0N_M0DE_PPP和GPS_P0SITI0N_M0DE_DP,根據系統設置中 的設置將用戶選擇的定位模式傳遞到HAL層;
[0022] 在應用框架層中:
[0023] 新增3. 1:添加GpsStatus.GNSSObsDataListener監聽器,上層應用只需要實現 該監聽器實例並將監聽器添加到LocationManager中就可以接收原始觀測數據,為此, LocationManager中添加了addGNSSObsDataListener和removeGNSSObsDataListener接口 供上層應用添加和移除GpsStatus.GNSSObsDataListener監聽器。
[0024] 在上述的一種基於Android內核層實現高精度衛星導航定位方法,將Android系 統用於衛星定位的HAL層從上至下劃分為三個子層,分別是:
[0025] 子層一 :GNSS抽象子層,用於接口重構和歸併。在GNSS抽象子層中重新實現了全 部標準Android系統有關GNSS定位的接口,並根據高精度GNSS定位特點實現了相關擴展 接口。並在該層設置一個獨立的報告線程,與註冊到下層的回調函數所在的主線程形成計 算機任務調度領域典型的"生產者-消費者"關係,由一組在標準Android系統內核中新增 加的與高精度定位相關的同步/互斥信號量控制運行。該線程用於將下層定位結果封裝為 標準Android有關GNSS的數據結構,報告給作業系統上層。
[0026] 子層二:高精度定位實現子層,實現高精度定位解算;在高精度定位實現子層設 置若干獨立的工作線程,分別運行精密導航電文獲取、定位硬體原始觀測數據解析和高精 度定位解算模塊。工作線程形成計算機任務調度領域典型的"生產者-消費者"關係,由一 組在標準Android系統內核中新增加的與高精度定位相關的同步/互斥信號量控制運行。
[0027] 子層三:硬體訪問子層,將常見高精度定位命令寫入定位硬體並從定位硬體讀取 相關數據;HAL的三個子層通過上層向下層註冊回調函數的方式,實現下層輸出數據的上 報通道。通過接口逐層歸併的方式,將標準Android系統GNSS相關接口映射到定位硬體驅 動接口,實現控制命令的下傳通道。硬體訪問子層可根據所選用Android系統硬體架構的 不同,採用不同的硬體訪問手段:包括遠程過程調用(RemoteProcedureCall,RPC)方式或 直接調用方式,調用定位硬體的設備驅動函數。
[0028] 在上述的一種基於Android內核層實現高精度衛星導航定位方法,所述高精度定 位實現子層,實現高精度定位解算的具體方法是在高精度定位實現子層設置精密導航電文 獲取模塊、定位硬體原始觀測數據解析模塊、高精度解算模塊以及定位結果審核模塊,並在 高精度定位實現子層設置若干獨立的工作線程,分別運行這些模塊;具體是:
[0029] 精密導航電文獲取模塊:向所註冊的網絡伺服器請求精密導航電文,並將獲得的 電文進行解析,將解析結果放入共享緩衝區,當本方法冷啟動時,該模塊將額外向所註冊的 網絡伺服器請求一次GNSS廣播星曆數據。該模塊的運行機制與具體的精密導航電文格式 無關,能夠兼容包括RTCMSC-104、RTCASC-159、"羲和"室外廣域高精度定位等行業公開規 範;也可開放供用戶自定義,以支持符合PPP或DP的自定義精密導航電文;
[0030] 定位硬體原始觀測數據解析模塊:將定位硬體的輸出數據解析為定位結果報告數 據(符合NMEA0831標準)、定位結果可計算數據、原始觀測值可計算數據和原始觀測值報 告數據(符合RENIX標準)和廣播星曆可計算數據等,將解析結果放入共享緩衝區。
[0031] 高精度解算模塊:從共享緩衝區中提取最新的硬體原始觀測數據與精密導航電文 數據,執行高精度定位解算。該模塊的運行機制與具體的高精度定位解算算法無關,能夠支 持行業通用的PPP、RTK及差分定位等算法;
[0032]定位結果審核模塊:高精度解算模塊將高精度定位解算的輸入數據、中間結果和 解算結果等輸出到該模塊,由該模塊對定位結果進行質量控制與審核,然後由該模塊調用 GNSS抽象層註冊的回調函數,完成結果上報;
[0033] 因此,本發明具有如下優點:1、Android第三方應用開發者調用原有標準GNSS普 通定位API,即可獲得高精度定位結果;2、現有Android第三方應用程式無需進行修改,即 可直接獲得高精度定位結果;3、調用本方法在Java框架層新增加的API,在Java應用層獲 得定位硬體輸出的原始觀測數據,實現自定義的高精度定位。
【專利附圖】
【附圖說明】
[0034] 圖1為本發明的整體框架示意圖。
[0035] 圖2為本發明涉及的修改和擴展標準Android系統HAL層的接口關係示意圖。
[0036] 圖3為本發明涉及的GpsLocationProvider在應用框架層和JNI層新增的接口示 意圖。
[0037] 圖4為本發明涉及的應用框架層向應用層新增的接口示意圖。
[0038] 圖5為本發明涉及的HAL層的數據流及接口示意圖。
[0039] 圖6為本發明涉及的上層模塊到下層的歸併接口示意圖。
[0040] 圖7為本發明涉及的HAL層狀態轉換示意圖。
[0041] 圖8為本發明涉及的數據解析模塊、精密導航電文獲取模塊和解算模塊的流程示 意圖。
[0042] 圖9為本發明涉及的消息協議示意圖。
[0043] 圖10為本發明涉及的精密導航電文獲取流程示意圖。
[0044]圖11為本發明涉及的解算模塊自適應與定位審核模塊流程圖。
【具體實施方式】
[0045] 下面通過實施例,並結合附圖,對本發明的技術方案作進一步具體的說明。
[0046] 實施例:
[0047] 下面從幾個方面闡述本發明的具體方法。
[0048] 1、本發明從Android作業系統的硬體抽象層(HardwareAbstractionLayer,HAL) 開始,向上逐層實現衛星高精度定位相關功能的方法及模塊。具體是:(1)從標準Android 作業系統的HAL層開始,增加對下層晶片(或模塊)定位原始觀測數據的抽象和封裝,向 上逐層增加高精度定位擴展接口和相關回調函數接口等,並在應用框架層新設置一批高 精度定位應用編程接口(ApplicationProgrammingInterface,API) ; (2)在HAL層增加 精密單點定位(PrecisePointPositioning,PPP)、差分定位、實時動態差分(Real-time kinematic,RTK)定位等高精度定位解算、精密導航電文獲取、衛星定位導航硬體數據解 析的功能及相關同步控制機制等。當終端設備所採用的全球衛星定位導航系統(Global NavigationSatelliteSystem,GNSS)的定位硬體(特指北鬥或GPS定位單/雙模晶片或 模塊,下同)支持原始觀測數據(包括:偽距觀測量、載波相位觀測量、都卜勒觀測量,同時 包括廣播星曆數據)輸出時,通過本方法可以使得 :(l)Andr〇id第三方應用開發者調用原 有標準GNSS普通定位API,即可獲得高精度定位結果;(2)現有Android第三方應用程式無 需進行修改,即可直接獲得高精度定位結果;(3)調用本方法在Java框架層新增加的API, 在Java應用層獲得定位硬體輸出的原始觀測數據,實現自定義的高精度定位。
[0049] 如圖1所示,本方法基於Android作業系統公開架構,涉及Android應用層、應用 框架層、Java本地調用(JavaNativeInterface,JNI)層、HAL層、Linux內核層以及GNSS 硬體模塊。Android應用(即App)位於Android應用層,與應用框架層的API接口相關,這 是本領域技術人員所熟知的,因此不再贅述。本方法為了提高通適性和可靠性,將HAL層劃 分為(l)GNSS抽象子層、(2)高精度定位實現子層和(3)硬體訪問子層。其中GNSS抽象子 層遵循標準Android系統的公開規範,擴展定義了高精度GNSS定位硬體的抽象接口、數據 /命令的上/下行通道,封裝了基本高精度GNSS數據信息,實現了GNSS定位的抽象工作流 程;高精度定位實現子層通過獲取網絡差分信息和GNSS硬體原始觀測信息,實現精密單點 定位解算或差分定位解算;硬體訪問子層為不同GNSS硬體晶片(模塊)提供了統一接口。 本方法
【發明內容】
涉及圖1中黃色陰影區域。
[0050] 2、本方法在標準Android系統(以Android4. 2. 2版本為例,下同)GNSS器件相關 規範的基礎上,為實現高精度GNSS定位新創建和擴展了一批接口。用於Android系統或應 用程序的高精度定位命令下達以及高精度定位原始觀測數據和定位結果的反饋。
[0051] 如圖2所不,在hardware/libhardware/include/hardware/gps. h中,添加一組 PGpsInterface接口 函數,由標準Andorid內核中Gpslnterface接口的get_extension 函數引出,用以滿足高精度定位相關設置(如精密導航電文服務來源、類型等)需求;在標 準Andorid內核中Gpslnterface接口的set_position_mode中,擴展了GPS_P0SITI0N_ M0DE_RTK (RTK定位模式)、GPS_P0SITI0N_M0DE_PPP (PPP定位模式)和GPS_P0SITI0N_ M0DE_DP(差分定位模式);在標準Andorid內核的GpsCallbacks中添加gnss_obsdata_cb 回調接口,實現將HAL層中獲得的GNSS原始觀測數據上報到上層。新增接口如表1。
[0052] 表1HAL層新增接口
[0053]
【權利要求】
1. 一種基於Android內核層實現高精度衛星導航定位方法,其特徵在於,從標準 Android作業系統的HAL層開始,增加對下層晶片或模塊定位原始觀測數據的抽象和封裝, 向上逐層增加高精度定位擴展接口和相關回調函數接口;其中,向上逐層新增高精度定位 擴展接口和相關回調函數接口依次是: 在HAL層中: 新增1. 1 :由標準Andorid內核中Gpslnterface接口的get_extension 函數引出一 組高精度GNSS定位接口函數,稱為PGpsInterface接口函數,用以滿足高精度定位相關設 置需求; 新增 1. 2 :在標準 Andorid 內核中原有 Gpslnterface 接口的 set_position_mode 中, 擴展了新的RTK定位模式、PPP定位模式和差分定位模式; 新增1. 3 :在標準Andorid內核的GpsCallbacks中添加原始觀測數據回調的接口函 數,稱為gnss_obsdata_cb回調接口,實現將HAL層中獲得的GNSS原始觀測數據上報到上 層; 在JNI層中: 新增 2. 1 :添加 gnss_obsdata_callback 函數作為 gnss_obsdata_cb 的實現, 新增 2. 2 :添力口 android_location_GpsLocationProvider_read_gnss_obsdat a 以 實現在java層通過JNI方式讀取原始觀測數據,同時添加對應於PGpsI nterface接口 的函數供 GpsLocationProvider 調用,使用 JNI 提供的 CallVoid Method 方法將 method_ reportGNSSObsData 函數指針與 GpsLocationProvide r 中的 reportGNSSObsData 映射起 來,在JNI的函數映射表中添加新的接口映射關係; 新增2. 3 :添加 native函數來調用JNI層的PGpsInterface接口函數, 新增 2. 4 :添加 native_read_gnss_obsdata 函數來調用 JNI 層的 android_l ocation_ GpsLocationProvider_read_gnss_obsdata 函數來獲取原始觀測數據, 新增 2. 5 :添加 reportGNSSObsData 函數供 JNI 層的 gnss_obsdata_callb ack 作為回 調, 新增2. 6 :在GpsLocationProvider添加與HAL層相對應的定位模式GP S_P0SITI0N_ M0DE_RTK、GPS_P0SITI0N_M0DE_PPP 和 GPS_P0SITI 0N_M0DE_DP,根據系統設置中的設置將 用戶選擇的定位模式傳遞到HA L層; 在應用框架層中: 新增3. 1 :添加 GpsStatus. GNSSObsDataListener監聽器,上層應用只需要實現該 監聽器實例並將監聽器添加到LocationManager中就可以接收原始觀測數據,為此, LocationManager 中添加了 addGNSSObsDataListener 和 r emoveGNSSObsDataListener 接 口供上層應用添加和移除GpsStatus. GNSSOb sDataListener監聽器。
2. 根據權利要求1所述的一種基於Android內核層實現高精度衛星導航定位方法,其 特徵在於,將Android系統用於衛星定位的HAL層從上至下劃分為三個子層,分別是: 子層一 :GNSS抽象子層,用於接口重構和歸併;在GNSS抽象子層中重新實現了全部 標準Android系統有關GNSS定位的接口,並根據高精度GNSS定位特點實現了相關擴展接 口;並在該層設置一個獨立的報告線程,與註冊到下層的回調函數所在的主線程形成計算 機任務調度領域典型的生產者-消費者關係,由一組在標準Android系統內核中新增加的 與高精度定位相關的同步/互斥信號量控制運行;該線程用於將下層定位結果封裝為標準 Android有關GNSS的數據結構,報告給作業系統上層; 子層二:高精度定位實現子層,實現高精度定位解算;在高精度定位實現子層設置若 幹獨立的工作線程,分別運行精密導航電文獲取、定位硬體原始觀測數據解析和高精度定 位解算模塊;工作線程形成計算機任務調度領域典型的"生產者-消費者"關係,由一組在 標準Android系統內核中新增加的與高精度定位相關的同步/互斥信號量控制運行; 子層三:硬體訪問子層,將常見高精度定位命令寫入定位硬體並從定位硬體讀取相關 數據;HAL的三個子層通過上層向下層註冊回調函數的方式,實現下層輸出數據的上報通 道;通過接口逐層歸併的方式,將標準Android系統GNSS相關接口映射到定位硬體驅動接 口,實現控制命令的下傳通道;硬體訪問子層可根據所選用Android系統硬體架構的不同, 採用不同的硬體訪問手段:包括遠程過程調用方式或直接調用方式,調用定位硬體的設備 驅動函數。
3.根據權利要求1所述的一種基於Android內核層實現高精度衛星導航定位方法,其 特徵在於,所述高精度定位實現子層,實現高精度定位解算的具體方法是在高精度定位實 現子層設置精密導航電文獲取模塊、定位硬體原始觀測數據解析模塊、高精度解算模塊以 及定位結果審核模塊,並在高精度定位實現子層設置若干獨立的工作線程,分別運行這些 模塊;具體是 : 精密導航電文獲取模塊:向所註冊的網絡伺服器請求精密導航電文,並將獲得的電文 進行解析,將解析結果放入共享緩衝區,當本方法冷啟動時,該模塊將額外向所註冊的網絡 伺服器請求一次GNSS廣播星曆數據;該模塊的運行機制與具體的精密導航電文格式無關, 能夠兼容包括RTCM SC-104、RTCA SC-159、羲和室外廣域高精度定位行業公開規範;也可開 放供用戶自定義,以支持符合PPP或DP的自定義精密導航電文; 定位硬體原始觀測數據解析模塊:將定位硬體的輸出數據解析為定位結果報告數據、 定位結果可計算數據、原始觀測值可計算數據和原始觀測值報告數據和廣播星曆可計算數 據,將解析結果放入共享緩衝區; 高精度解算模塊:從共享緩衝區中提取最新的硬體原始觀測數據與精密導航電文數 據,執行高精度定位解算;該模塊的運行機制與具體的高精度定位解算算法無關,能夠支持 行業通用的PPP、RTK及差分定位算法; 定位結果審核模塊:高精度解算模塊將高精度定位解算的輸入數據、中間結果和解算 結果等輸出到該模塊,由該模塊對定位結果進行質量控制與審核,然後由該模塊調用GNSS 抽象層註冊的回調函數,完成結果上報。
【文檔編號】G01C21/34GK104236579SQ201410527819
【公開日】2014年12月24日 申請日期:2014年10月9日 優先權日:2014年10月9日
【發明者】郭遲, 崔競松, 郭文飛, 陳龍, 侯琨, 祝勇, 趙磊, 辜聲峰 申請人:武漢大學, 武漢知域科技有限責任公司