一种基于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日
【发明者】郭迟, 崔竞松, 郭文飞, 陈龙, 侯琨, 祝勇, 赵磊, 辜声峰 申请人:武汉大学, 武汉知域科技有限责任公司
X技术网 原文链接:http://www.xjishu.com/zhuanli/52/201410527819.html
尚无评论!