基于WinInet的NTRIP终端设计*
2010-07-18屈新岳王鹏飞
史 峰,屈新岳,李 铁,王鹏飞,王 东
(中国人民解放军91550部队93分队,辽宁 大连116023)
0 引 言
随着虚拟参考站(VRS)技术的广泛应用和不断发展,为适应各种不同场合的需要,移动定位用户对于终端的个性化需求也在不断提高。在通用的智能终端,例如:PDA、智能手机等平台上结合GPS接收机与VRS网络,实现高精度的移动定位已经成为一种发展方向。而目前的大多数VRS移动终端都是由GPS硬件厂商直接提供,这些移动终端都是根据专业需要定制的。它具有功能强大、连接可靠的特点,但是价格一般比较昂贵,通用性不强,可开发性不高。
由于VRS系统中进行差分数据传输的NTRIP协议是基于 HTTP协议的,因此,可以采用HTTP协议的开发手段进行VRS终端的开发,这就为设计实现通用平台上的NTRIP终端提供了基础。
1 虚拟参考站技术与NTRIP协议
1.1 虚拟参考站技术的基本原理
虚拟参考站技术(VRS)的基本原理是:在三个或更多参考站(相距70~100 km)覆盖范围内,流动站首先进行单点定位,在其真实位置附近确定一个大致坐标(偏差可以从几米到上百米),然后把该坐标发送至VRS数据处理中心;同时各参考站也把各自的载波相位测量观测值发送到数据处理中心[1]。VRS数据处理中心根据这些数据计算出各参考站的各种偏差改正,如电离层、对流层偏差、轨道偏差、多路径效应等;结合流动站发送来的概略坐标利用网络改正数内插方法进行内插,得出流动站概略坐标处的相应误差改正数,进而在此概略坐标处虚拟一个参考站,并利用多个参考站上的实际观测数据计算出该虚拟参考站上的虚拟观测值。由于虚拟参考站的位置就是由流动站的单点定位而得,它们之间距离很短,因此流动站可以和虚拟参考站间形成超短基线,通过站际星际二次差分,可以对流动站上的各种偏差、多路径效应以及接收机噪音等进行很好的消除和减弱,从而大大提高流动站的定位精度和可靠性[2]。从VRS工作基本原理中可以看出,VRS系统一般由以下几个部分组成:持续运行的参考站网络、数据处理与控制中心、移动定位用户以及数据链路。
1.2 NTRIP协议以及NTRIP客户接入
作为VRS用户而言最为关心的是如何接入VRS网络,获取差分数据以便使用网络所提供的服务。目前VRS系统在所使用的差分数据传输协议主要是基于HTTP协议的NTRIP协议(Networked Transport of RTCM via Internet Protocol,NTRIP),该协议具有结构开放、开发便捷的特点,自2003年1月推出以来已获得广大GNSS硬件厂商和用户的广泛支持。NTRIP协议通过三个部分实现:NTRIP客户、NTRIP服务器以及NTRIP播发器,其中 NTRIP播发器是真正的HTTP服务器,负责管理和接收来自NTRIP服务器的数据并响应NTRIP客户的请求,发送GNSS信息,而NTRIP客户和NTRIP服务器均为HTTP客户,NTRIP客户是GNSS数据的最终使用者[3]。一个完整的NTRIP系统除了上述的三个HTTP部分外,还包括NTRIP数据源,用来持续产生GNSS数据,每一个NTRIP数据源都对应一个NTRIP服务器,并由后者将产生的数据发送到NTRIP播发器,利用NTRIP服务器将NTRIP数据源与其它NTRIP成员之间隔开,可以保护数据源,提高数据利用率。一个NTRIP系统各部分之间的连接都是建立在TCP/IP基础上,因此,可以通过TCP-Socket方便地监视通讯状态,利用事件触发的方式进行掉线后的自动重新连接。
终端接入NTRIP网络的过程与接入标准的HTTP网络的过程完全类似,NTRIP终端可以采用HTTP协议的GET命令按照NTRIP服务器的名称以及对应的密码发送请求,NTRIP播发器收到请求后,就会把用户需要的差分数据流不断的发送过来,用户根据差分数据可以实现高精度的实时差分定位。
2 NTRIP终端的设计与实现
2.1 开发平台以及设计思路
为了便于应用开发,选择运行Windows Mobile 5.0(WM 5.0)的PDA、一台具有RTK功能的GPS接收机以及可上网的蓝牙手机作为NTRIP终端硬件平台,其中PDA为终端的控制中心,主要工作过程为PDA通过蓝牙和上网手机登陆VRS网络获得用户当前位置可用的差分数据,再通过串口将差分数据写入到GPS接收机中,从而实现RTK定位的功能。整个系统的设计结构图如图1所示。
图1 NTRIP客户端系统结构图
从上面的工作过程可以看出,整个系统的关键在于开发一个嵌入式的NTRIP终端软件以实现上述通信过程。本系统选择Microsoft Visual Studio 2005结合Windows Mobile SDK作为软件开发平台,通过PDA H TTP编程实现NTRIP终端的主要功能。为了提高开发的效率和程序的可靠性,采用了 WinInet API作为工具进行开发。WinInet与“套接字+Internet协议”的终端开发方式比,不需要了解 Winsocket、TCP/IP和特定 Internet协议的细节,就可以编写出高水平的终端程序[4]。利用WinInet进行H TTP开发的主要步骤如下:
1)调用InternetOpen函数,对HINTERNET句柄进行初始化,获得位于根部的HINTERNET句柄,该句柄是建立HTTP会话的基础。
2)利用1)中得到的HINTERNET句柄作为参数调用InernetConnect函数创建H TTP会话。该函数根据Internet站点或IP地址对连接进行初始化,并在原有HINTERNET句柄的基础上产生一个新的HINTERNET类型的句柄。
3)调用Http OpenRequest函数HTTP请求句柄,该函数利用2)中返回HINTERNET句柄建立与特定站点的连接。这一步的作用就相当于标准H TTP协议中的GET命令。
4)调用HttpSendRequest函数以3)中返回的句柄为参数向HTTP服务器发送请求。
5)调用InternetRead File函数下载数据,或先使用 InternetQueryDataAvailable函数确定数据大小再下载。
6)调用函数关闭先前创建的所有句柄。
以上只是利用WinInet建立H TTP通信的一般过程,实际应用中往往要根据需要建立异步或者同步两种类型的HTTP连接。同步HTTP连接是一种阻塞式的连接方式,这意味在进行连接的函数在未返回前,该函数所在的线程将一直处于等待状态,这对于网络连接不稳定,运算资源有限的PDA而言,如果进行大量的同步H TTP通信,显然是不行的。异步连接就是一种非阻塞式的连接方式,在相应的通讯操作没有返回前,线程的其他过程仍然可以正常运行,而一旦该操作返回,又马上有相应的函数对其进行响应。在WM 5.0中,主要通过采用一定的回调机制来实现对各种异步事件的响应,达到身份验证、快速有效获取网络数据等目的。针对NTRIP终端通信的不同阶段,在具体的实现过程中灵活采用了不同的连接方式。
2.2 NTRIP终端的实现
终端的总体结构采用VC++基于对话框的程序框架,以标签形式在主对话框上添加不同类型的子对话框作为用户控制GPS接收机,连接NTRIP播发器交互界面,同时显示定位结果、VRS连接状况等信息的显示界面。程序主要存在两个通信过程:GPS接收机串口通信以及访问VRS网络的HTTP通信,前者通过嵌入式串口通信的方式可以方便实现接收机打开/设置、定位信息读取以及差分数据写入,后者利用WinInet API函数来实现,主要实现过程如下:
2.2.1 同步通信方式获取NTRIP资源列表
资源列表(Source Table)包含着可供用户选择的数据源信息,获取资源列表是获得VRS差分信息的第一步,由于资源列表大小只有几百个字符,而且后面的通讯工作都以资源列表为基础,因此,可以采用同步通信的方式获取。首先定义存放资源列表信息的结构体:SOURCETABLE,然后以用户输入的NTRIP播发器IP地址和端口号为参数,利用2.1节中介绍的1)~6)步通过同步HTTP通信的方式下载资源列表数据,然后按照NTRIP协议中定义的资源列表格式对其进行解析并在用户界面中显示,资源列表中的VRS数据源可供用户选择连接下载数据。
2.2.2 异步通信方式获取NTRIP差分数据
获得所连接播发器的VRS数据源信息后,就可以采用异步通信方式下载差分数据,实现过程为
1)定义如下形式的回调函数:
void_stdcall MyCallback(HINTERNET hInternet,DWORD dwContext,DWORD dw InternetStatus,LPVOID lpStatusInfo,DWORD dw-StatusInfoLen);
该函数第二个参数dwContext可以为每一个不同的环境变量值设置不同的操作,第三个参数dw InternetStatus表示当前实际的网络通信操作进展状态,可以用来捕获某个已经完成的异步通信操作事件并触发一定的处理过程。利用该回调函数就可对终端与VRS网络之间的H TTP通信状态进行监控,并触发相应事件,以便下载线程进行相应操作。
2)利用ReadGNSSThreadFunc下载差分数据线程函数和回调函数异步下载数据。
其简要过程为先创建四个用来标志异步通信状态的事件句柄,然后注册1)中定义的回调函数My Callback,并利用 InternetOpen函数创建异步类型的HINTERNET句柄,接下来可按2.1节中介绍的2)~5)步介绍的方式建立HTTP通信,但是需要注意的是每进行下一步之前一定要通过WaitForSingleObject函数等待回调函数监测到相应的通信步骤已完成,并将相应的事件设置成有信号。
3)完成数据下载后,关闭所有句柄。
从上述过程可以看出,在每一个通讯步骤没有完成前,主线程并没有被阻塞,只是回调函数在等待该步骤完成,并触发一定的事件,然后由主线程捕获该事件,继续进行异步通信过程。利用异步通信方式可以很好的解决NTRIP终端差分数据下载的问题,而且便于进行与串口通讯的线程同步。
2.3 定位测试结果
为验证本系统的定位精度与可靠性,在控制点上进行了VRS定位试验,图 2中的(a)、(b)、(c)分别是X、Y、Z三个方向的定位误差分布图。
从图2可以看出,该点所有历元各方向误差数值都在3 cm以内,说明该系统具有较好的定位精度和稳定性。
3 结 论
结合PDA平台以及VRS网络实现了RTK定位,通过对嵌入式平台的Internet异步通信以及接收机串口通信的研究,找到了利用VRS网络差分数据代替传统差分电台的具体实现途径,系统组成灵活、成本低,对于实现传统GPS RTK接收机向VRS RTK接收机升级改造具有一定的参考意义。
[1]刘经南,刘 晖.连续运行卫星定位服务系统-城市空间数据的基础设施[J].武汉大学学报(信息科学版),2003,28(3):259-264.
[2]高星伟.GPS/GLONASS网络RTK的算法研究与程序实现[D].武汉大学博士学位论文,2002.
[3]DENISE D,CHRISTIAN W,GEORG W.NTRIP Version 1.0 Example Implementation[M].Federal Agency for Cartography and Geodesy(BKG),Frankfurt,Germany,2006.
[4]汪晓平,钟军等,Visual C++网络通信协议分析与应用实现[M].北京:人民邮电出版社,2003.