Hans Journal of Wireless Communications
Vol. 13  No. 04 ( 2023 ), Article ID: 70677 , 7 pages
10.12677/HJWC.2023.134005

基于便携式GNSS接收机的安卓移动应用 定位增强方法研究

杨 凯,熊先才,黄 凯

重庆市规划和自然资源调查监测院,重庆

收稿日期:2023年4月30日;录用日期:2023年8月10日;发布日期:2023年8月16日

摘要

本文探讨了采用便携式GNSS接收机,增强安卓移动应用程序定位能力的多种方法。基于安卓系统的GNSS定位服务架构和便携式GNSS接收机CORS差分定位流程,本文介绍了便携式GNSS接收机增强安卓移动应用程序包括SDK接入、广播消息、模拟位置、GNSS模组移植在内的四种常用方法的具体实现流程。通过对比分析评估,分析了各个方法的适用场景,评估了各方法的稳定性、兼容性,以及各方法定位信息的可靠性、完备性。研究表明,高精度GNSS定位平板等定制化一体机建议采用GNSS模组移植法,便携式GNSS接收机建议采用SDK接入法。针对这两个方法的缺陷,本文随后给出了优化建议。本研究成果已应用在重庆“国土调查云”测试版中,支撑调查监测业务多样化、个性化的泛在位置服务需求。

关键词

GNSS,移动终端,CORS

Research on Positioning Enhancement Method of Android Mobile Application Based on Portable GNSS Receiver

Kai Yang, Xiancai Xiong, Kai Huang

Chongqing Planning and Natural Resources Survey and Monitoring Institute, Chongqing

Received: Apr. 30th, 2023; accepted: Aug. 10th, 2023; published: Aug. 16th, 2023

ABSTRACT

This article explores various methods to enhance the positioning capabilities of Android mobile applications using portable GNSS receivers. Based on the Android system’s GNSS positioning service architecture and the portable GNSS receiver CORS differential positioning process, this article introduces four commonly used methods—SDK access, broadcast messages, simulated positioning, and GNSS module transplantation—to enhance Android mobile application using portable GNSS receivers. Through comparative analysis and evaluation, the article analyzes the applicable scenarios of each method, evaluates their stability and compatibility, as well as the reliability and completeness of the positioning information provided by each method. The research shows that the GNSS module transplantation method is recommended for customized devices such as high-pre- cision GNSS positioning tablets, while the SDK access method is recommended for portable GNSS receivers. The article also provides recommendations to optimize these methods. This research has been applied in the Chongqing “National Land Survey Cloud” test version to support the ubiquitous location service needs of surveying and monitoring businesses with diverse and personalized requirements.

Keywords:GNSS, Mobile Terminals, CORS

Copyright © 2023 by author(s) and Hans Publishers Inc.

This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).

http://creativecommons.org/licenses/by/4.0/

1. 引言

在移动互联网与3S技术的推动下,自然资源管理领域正飞速迈向数据云服务化、业务流程信息化、作业系统移动化的新服务模式。目前,众多调查监测业务平台采用移动App服务架构,实现了外业数据的数字化采集,极大提升了外业工作者的工作效率。然而,消费级移动终端较低的定位精度制约了移动业务平台外业数据采集质量,让高精度的调查监测业务场景、作业模式出现“落地难题”。

为解决上述问题,众多学者研究使用手机、平板电脑等移动终端自身GNSS导航芯片实现高精度定位的技术 [1] [2] ,但受限于消费级移动终端的GNSS天线性能,采用便携式GNSS接收机的定位结果要明显优于移动终端GNSS原始观测量的定位结果 [3] [4] 。目前,国内企业如芯星通、梦芯科技等相继研发出适合于低功耗、小型化接收机的GNSS定位模组,基于高精度GNSS定位模组开发的便携式GNSS接收机提升消费级移动终端定位能力,能够为移动业务平台型应用程序提供更精准的位置服务。该方案成本低廉、使用简便,已具备了有利的应用条件。本文基于安卓系统的GNSS定位服务架构和便携式GNSS接收机CORS差分定位流程,介绍四种移动应用定位增强方法,通过对各种方法开展分析评估,指出最佳的定位增强方法,并给出优化建议。本文的研究,将有助于促进移动应用程序高精度定位服务场景的推广。

2. 安卓系统的GNSS定位服务架构

安卓系统的架构分为四层,分别是应用层、框架层、系统运行库层和Linux内核层。安卓系统的GNSS定位服务同样采用分层架构,如图1所示。

在应用层和框架层,安卓框架的Android Location类库为位置服务应用获取当前设备的地理位置提供支持,它包括两个主要的类:Location和LocationManager。其中,Location用于表示设备的位置信息,LocationManager则是整个定位服务的入口类。LocationManager通过Binder机制开启LocationManagerService给应用程序提供位置信息,LocationProvider则是位置数据的提供者。LocationManagerService通过调用LocationProviderInterface实现定位服务,具体实现LocationProviderInterface接口的位置数据提供者包括GpsLocationProvider、MockProvider、LocationProviderProxy、PassiveProvider等。其中,GpsLocationProvider提供GNSS卫星定位信息,是精度最高的定位方式。

Figure 1. The architecture diagram of GNSS positioning service in the Android system

图1. 安卓系统的GNSS定位服务架构图

在运行库层,JNI衔接Java编写的框架层与C、C++编写的HAL层,起到承上启下的过渡作用 [5] 。HAL层提供了设备抽象化接口,当Android添加或更改GNSS硬件设备,需要移植和实现GNSS硬件设备驱动模块,对接HAL层接口,通过解析GNSS硬件设备的GNSS数据,将其转换成安卓系统支持的Location对象,供上层服务调用。

在Linux内核层和GNSS硬件层,GNSS硬件设备通过UART、USB、SPI等硬件总线与处理器通信,高精度GNSS模块输出的原始定位数据格式通常采用NMEA (National Marine Electronics Association)协议标准,Linux内核层使用UART等驱动模块实现GNSS数据的读写操作,确保数据的稳定传输。

采用上述分层管理机制,保证了安卓系统GNSS定位服务的模块化、抽象化和可扩展性,实现了整个GNSS定位流程的顺畅、稳定运行。

3. 便携式GNSS接收机CORS差分定位流程

目前,卫星导航实时高精度定位主要采取RTK (Real-Time Kinematic,实时动态差分)、网络RTK (Network RTK)等差分定位技术。RTK定位技术要设置参考站,便携式GNSS接收机与参考站的距离受限,随着我国北斗地基增强系统和连续运行参考站系统(CORS)的建设,便携式GNSS接收机高精度定位首选网络RTK定位技术。

网络RTK技术利用广泛均匀分布的连续运行参考站,对便携式GNSS接收机所在作业区域形成区域组网覆盖,将多个参考站的GNSS观测数据通过数据链路发送到数据处理中心。数据处理中心结合参考站的已知坐标、基线处理与观测值内插技术,根据便携式GNSS接收机上传的粗略位置,通过移动网络向便携式GNSS接收机播发差分改正数据。便携式GNSS接收机通过天线接收卫星信号,结合移动网络获取的差分改正数据,利用GNSS定位模组解算高精度位置 [6] 。整个流程如图2所示。

Figure 2. The CORS differential positioning workflow for portable GNSS receivers

图2. 便携式GNSS接收机CORS差分定位流程

便携式GNSS接收机与移动终端的结合类型分为内置型与外置型两种。内置型GNSS接收机通过UART或USB等接口与移动终端处理器通信,与移动终端组成一个较为完整的电子设备或系统,具有一定的封装度和集成度。外置型GNSS接收机通过蓝牙或USB等接口与移动终端通信,绝大多数低成本外置型GNSS接收机不配备蜂窝网络模块,采用移动终端网络连接CORS服务器,整个网络RTK定位流程、蓝牙或USB通信传输、NMEA解析和设备状态监测等代码由便携式GNSS接收机厂家或专业开发者封装成SDK,以便降低应用程序高精度位置服务的开发成本和难度。

值得注意的是,便携式GNSS接收机连接CORS服务器可采用SDK机器码登录或Ntrip登录两种方式。SDK机器码登录方式与设备绑定,一机一码,直接获取CORS差分服务。Ntrip登录方式遵循Ntrip协议,登录CORS服务器要配置IP、端口、账户等信息,多个设备能够使用一个账号。因此,采用Ntrip登录方式,移动应用程序应提供交互界面让用户输入CORS登录配置信息。

4. 移动应用定位增强方法

便携式GNSS接收机获取高精度位置信息后,如何将该位置信息传递给移动应用成为关键。根据安卓系统GNSS定位服务架构,常用的定位增强方法有四种。接下来,本文将详细介绍各种方法的具体实现过程。

4.1. SDK接入法

本方法将便携式GNSS接收机的SDK直接接入移动应用程序。移动应用程序开发者应根据SDK提供的开发文档,将SDK文件添加到工程中,并在build.gradle中添加依赖,同时在Manifest文件中添加必要的权限,随后程序调用SDK的实时定位接口实现SDK代码集成。随着便携式GNSS接收机新设备和新版本的更新,要求应用程序及时更新SDK。

4.2. 广播消息法

本方法利用安卓广播消息机制接收便携式GNSS接收机的高精度位置信息。首先,设计一个定位辅助软件,该软件集成了便携式GNSS接收机的SDK,并提供交互界面,让用户输入CORS配置信息,以便支持Ntrip登录。定位辅助软件启用foreground service常驻后台,在服务中利用Broadcast发送高精度位置信息,移动应用程序根据对应的Intent和提前定义的消息结构,接收实时定位信息。

4.3. 模拟位置法

本方法采用MockProvider替代GpsLocationProvider提供高精度位置信息。为实现该方法,要求系统开启“开发者选项”,并设计一个定位辅助软件作为模拟位置应用程序。该定位辅助软件集成了便携式GNSS接收机的SDK,并提供交互界面配置CORS信息。定位辅助软件使用LocationManager类获取一个Location实例,并将便携式GNSS接收机输出的位置、精度等信息注入该Location对象,通过调用setTestProviderEnabled()和setTestProviderStatus()方法来设置模拟位置来源的状态和可用性,使用setTestProviderLocation()方法向系统发送模拟位置信息。在系统运行时,系统中所有应用都能够获取便携式GNSS接收机的高精度位置信息。

4.4. GNSS模组移植法

本方法要求修改系统底层源码,整个开发步骤主要包括两部分:GNSS模组接口的驱动开发和HAL层的GNSS模组驱动开发。首先,确认GNSS模组的接口类型、通信协议和硬件平台信息。以采用UART接口的GNSS模组为例,由于安卓底层的Linux系统一般包含UART接口驱动,GNSS模组接口的驱动开发主要工作是测试和验证UART接口是否正常工作。随后,在HAL层将厂家提供的GNSS模组驱动代码放入安卓源码的hardware目录下,修改对应的配置信息,重新编译后将生成的gps.default.so拷贝到system/lib/hw/gps.default.so,重新编译安卓系统完成GNSS模组移植 [7] 。系统运行时,直接调用JNI层的native方法,为上层GpsLocationProvider提供高精度GNSS模组的位置信息。

5. 定位增强方法分析评估

5.1. 应用场景分析

上述四种定位增强方法与系统软、硬件平台紧密相关,有各自合适的应用场景。

GNSS模组移植法要求硬件和系统均为定制版本,将GNSS模组集成到终端设备的硬件或系统中。因此,高精度GNSS定位平板电脑、高精度手持移动终端等定制化一体机一般采用该方法,为系统内所有应用提供稳定的高精度位置服务。

模拟位置法不修改安卓系统底层代码,能为系统内所有应用提供高精度位置服务,且应用程序不需要修改代码,适合外置便携式GNSS接收机硬件主导的服务模式。

广播消息法可适配多款外置便携式GNSS接收机的SDK,支持采用统一的Ntrip账户登录。而移动应用只要定义统一的消息结构就能支持多款外置便携式GNSS接收机,适合移动应用主导的服务模式。

SDK接入法每次只能为移动应用接入一款便携式GNSS接收机设备。当SDK接入过多,会给移动应用性能和代码管理带来很多麻烦,比如SDK升级和冲突问题、代码可读性和可维护性下降、应用性能下降等。因此,SDK接入法只适合精选少数几款设备接入应用程序。

总体来看,GNSS模组移植法适合高精度GNSS定位平板电脑等一体机,而模拟位置法、广播消息法、SDK接入法适合外置便携式GNSS接收机,应用场景各有侧重。

5.2. 稳定性、兼容性评估

GNSS模组移植法应用场景比较稳定,而模拟位置法、广播消息法、SDK接入法由于要适配不同系统版本和硬件厂家的移动终端,结合外置便携式GNSS接收机“随插随用”的工作特性,给各方法的稳定性和兼容性带来了极大的挑战。

使用模拟位置法,当外置便携式GNSS接收机接触不良或非正常退出,系统位置服务将无法正常工作。与此同时,模拟位置法还会带来业务安全性和位置欺诈风险,甚至部分应用程序会检测和禁用系统模拟位置权限或不采纳模拟位置坐标。

此外,模拟位置法和广播消息法要求定位辅助软件能够常驻后台,但系统出于资源分配紧张、电量优化策略、用户使用模式、安全限制等原因,会限制后台程序的运行,两种方法长时间使用稳定性不足。

SDK接入法所有定位流程在一个移动应用中实现,稳定性高。但由于外置便携式GNSS接收机易接触不良或非正常退出,定位服务具体实现时仍然要注意外置便携式GNSS接收机SDK和本地定位接口间的无缝切换。

由此可见,GNSS模组移植法和SDK接入法在各自的应用场景中比较稳定,而模拟位置法和广播消息法均不能保障长时间的稳定运行。

在兼容性方面,模拟位置法要求系统为安卓6.0以上版本,且开启“开发者选项”。模拟位置法和广播消息法由于各品牌设备、不同安卓系统版本后台管理策略不同,定位服务能力不一。

5.3. 定位信息的可靠性、完备性评估

GNSS模组移植法和模拟位置法虽然为系统内所有应用提供高精度定位服务,第三方应用不用修改代码,但移动应用调用定位服务时一般不会读取模糊度固定状态等信息。即使利用系统下拉菜单显示模糊度固定状态使用,由于RTK定位的时延等因素,厘米级高精度定位服务场景数据采集并不可靠。

SDK接入法和广播消息法通过解析NMEA数据,利用自定义的接口输出,移动应用需要针对高精度定位服务场景修改代码,保障了高精度定位信息完备可靠的获取。

根据上述分析评估,对于高精度GNSS定位平板等定制化一体机,建议采用GNSS模组移植法,对于外置便携式GNSS接收机,则建议采用SDK接入法。不过,这两种方法均存在缺陷,采用GNSS模组移植法能够为系统中所有应用提供高精度位置服务,但普通移动应用程序未考虑高精度定位应用场景,读取的位置信息缺失模糊度固定状态,无法保障厘米级高精度定位数据的可靠获取。采用SDK接入法,移动应用同时接入的外置GNSS设备数量不宜过多,SDK依赖的第三方库容易造成项目库冲突,SDK升级更新麻烦造成代码维护困难。

6. 定位增强方法优化建议

针对GNSS模组移植法和SDK接入法存在的问题,本文给出如下优化建议:

1) 对采用GNSS模组移植法的高精度GNSS定位平板电脑等一体机,第三方移动应用为了可靠地获取高精度位置信息,仍然要针对“高精度定位模式”修改代码。建议采用mLocationManager.addNmeaListener添加Nmea数据监听,在对应的回调函数中解析NMEA的GPGGA语句,获得完整的实时高精度定位信息。同时,建议应用程序界面提供数据面板实时显示当前可观测卫星数量、定位精度、模糊度固定状态等信息,辅助高精度定位服务场景的数据采集工作。

2) 对采用SDK接入法的外置便携式GNSS接收机,建议移动应用优选少数几款外置便携式GNSS接收机覆盖多个典型高精度定位服务场景,构建外置增强设备产品族。多款设备建议采用统一的SDK接入移动应用,每次版本更新后,SDK的API接口尽可能保持不变。由于外置便携式GNSS接收机频繁连接断开,为了优先保证移动应用业务的可用性,建议制定底层定位服务轮询机制,做到便携式GNSS接收机接触不良或意外退出时,外置便携式GNSS接收机SDK和本地定位接口间的无缝切换。

7. 结束语

为探索新型GNSS定位增强技术路径和服务体系,本文探讨了利用便携式GNSS接收机增强安卓移动应用定位能力的诸多方法。研究表明,高精度GNSS定位平板电脑等一体机建议选用GNSS模组移植法,移动应用使用addNmeaListener()方法获取NMEA数据,保证高精度定位场景中数据采集的可靠性;外置便携式GNSS接收机建议采用SDK接入法,优选少数几款外置便携式GNSS接收机,采用统一的SDK接入移动应用,并做好底层位置服务的轮询,保障移动应用业务的稳定运行。目前,相关研究成果已应用在重庆“国土调查云”测试版中,支撑调查监测业务多样化、个性化的泛在位置服务需求。

基金项目

重庆市自然科学基金面上项目:BDS和GPS三频信号联合精密定位方法研究(cstc2020jcyj-msxmX1034)。

文章引用

杨 凯,熊先才,黄 凯. 基于便携式GNSS接收机的安卓移动应用定位增强方法研究
Research on Positioning Enhancement Method of Android Mobile Application Based on Portable GNSS Receiver[J]. 无线通信, 2023, 13(04): 49-55. https://doi.org/10.12677/HJWC.2023.134005

参考文献

  1. 1. 张楷时. 安卓智能终端精密定位关键技术研究[D]: [硕士学位论文]. 郑州: 战略支援部队信息工程大学, 2019.

  2. 2. 刘永胜, 高成发, 陈波, 孙璞玉, 王斌. 安卓智能手机的精密单点定位模型研究[J]. 测绘科学, 2021, 46(2): 15-19+33.

  3. 3. 陈波, 高成发, 刘永胜, 陆轶材. 安卓手机终端原始GNSS观测数据质量分析[J]. 导航定位学报, 2019, 7(3): 87-95.

  4. 4. 冷宏宇, 秘金钟, 徐彦田, 赵硕. 智能手机终端RTK定位性能分析[J]. 测绘科学, 2020, 45(12): 15-21.

  5. 5. 李鑫泽. 基于Android的GPS模块设计与实现[D]: [硕士学位论文]. 郑州: 郑州大学, 2013.

  6. 6. 张云, 马天翊, 阙扬州, 苏天祥, 夏炜, 黄勤豪. 移动终端中的GNSS高精度定位技术评估[C]//中科北斗汇(北京)科技有限公司. 第九届中国卫星导航学术年会论文集——S09用户终端技术: 2018年卷. 2018: 118-123.

  7. 7. 李欣伟, 邬泳. 基于Android的UART&USB接口GNSS模块的驱动开发[C]//中国卫星导航学术年会. 第七届中国卫星导航学术年会论文集——S01北斗/GNSS应用技术: 2016年卷. 2016: 68-72.

期刊菜单