Ntrip通讯协议1.0
Ntrip通讯协议1.0
1 什么是Ntrip?
CORS(Continuously Operating Reference Stations)就是网络基准站,通过网络收发GPS差分数据。用户访问CORS后,不用单独架设GPS基准站,即可实现GPS流动站的差分定位。
访问CORS系统,就需要网络通讯协议。NTRIP( Networked Transport of RTCM via Internet Protocol)是CORS系统的通讯协议之一。
2 系统组成
使用NTRIP通讯协议的CORS系统,其组成请参考下图

图1 Ntrip系统组成
NtripSource 用来产生GPS差分数据,并把差分数据提交给NtripServer
NtripServer 负责把GPS差分数据提交给NtripCaster
NtripCaster 差分数据中心,负责接收、发送GPS差分数据
NtripClient 登录NtripCaster后,NtripCaster把GPS差分数据发送给它
NtripSource 和 NtripServer 一般已经集成到一台GPS基准站内,GPS基准站产生差分数据(扮演着NtripSource的角色),然后再通过网络发送给NtripCaster(扮演着NtripServer的角色)
NtripSource 和 NtripServer也可以分开:GPS基准站产生差分数据,然后通过串口发送给一个程序,这个程序再把差分数据发送给NtripCaster。这里GPS基准站扮演着NtripSource的角色,程序扮演着NtripServer的角色。
NtripCaster一般就是一台固定IP地址的服务器,它负责接收、发送差分数据。给NtripClient发送差分数据时有两种方案:一是直接转发NtripSource产生的差分数据;二是通过解算多个NtripSource的差分数据,为NtripClient产生一个虚拟的基准站(即VRS)。
NtripClient一般就是GPS流动站。登录NtripCaster后,发送自身的坐标给NtripCaster。NtripCaster选择或产生差分数据,然后发送给NtripClient。这样GPS流动站即可实现高精度的差分定位。
3 NtripServer
NtripServer访问NtripCaster的步骤
1、与NtripCaster建立TCP连接;
2、给NtripCaster发送如下数据(↙表示\r\n即0DH和0AH):
|
SOURCE letmein /Mountpoint↙ Source-Agent: NTRIP NtripServerCMD/1.0↙ ↙ |
上面的Mountpoint是挂载点名称,注意它前面的/不能省略。NtripServer可能有多个,挂载点用来区分它们。
上面的letmein是此挂载点对应的密码。没有密码,随便一个程序都能连上挂载点,整个系统就很容易受到恶意攻击。
"Source-Agent: NTRIP NtripServerCMD/1.0"这一行不是必需的。它说明了NtripServer的软件名称和版本号。这里的软件名称为NtripServerCMD,版本号为1.0。
3、NtripCaster给NtripServer的回复
挂载点、密码均有效,返回:
|
ICY 200 OK↙ |
挂载点或密码无效,返回:
|
ERROR - Bad Password↙ |
4、NtripServer给NtripCaster发送差分数据
NtripCaster回复ICY 200 OK后,NtripServer就可以给NtripCaster发送差分数据了。
4 NtripClient
NtripClient访问NtripCaster,一般有两个目的:获取源列表、获取差分数据。下面分别进行介绍。
4.1 获取源列表
多个NtripServer给NtripCaster发送差分数据,这样NtripCaster获得的差分数据就有多个。NtripClient在获取差分数据之前,需要知道差分数据有几个?分别是什么格式的?……这就需要获取源列表,获取步骤如下:
1、与NtripCaster建立TCP连接;
2、给NtripCaster发送如下数据:
|
GET / HTTP/1.0↙ User-Agent: NTRIP GNSSInternetRadio/1.4.10↙ Accept: */*↙ Connection: close↙ ↙ |
"User-Agent: NTRIP GNSSInternetRadio/1.4.10"说明了NtripClient的软件名称和版本号。这里的软件名称为GNSSInternetRadio,版本号为1.4.10。
3、NtripCaster将返回如下数据,然后自动断开TCP连接
|
SOURCETABLE 200 OK↙ Server: NTRIP Trimble NTRIP Caster↙ Content-Type: text/plain↙ Content-Length: 441↙ Date: 02/Jun/2010:14:13:32 UTC↙ ↙ STR;RTCM23;RTCM23;RTCM 2.3;1(1),3(10),18(1),19(1);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMR;CMR;CMR;CMR;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMRP;CMRP;CMR+;CMR;2;GPS;SGNET;CHN;31;121;1;1;Trimble GPSNet;None;B;N;0;;↙ STR;DGPS;DGPS;RTCM 2.1;RTCM 2.1;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;RTCM3X;RTCM3X;RTCM 3.X;1004(1),1005/1007(5),PBS(10);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ ENDSOURCETABLE↙ |
源列表数据以SOURCETABLE开头,以ENDSOURCETABLE结尾。
200 OK 表示一切正常。
"Server: NTRIP Trimble NTRIP Caster"是对NtripCaster软件的说明。
"Date: 02/Jun/2010:14:13:32 UTC"表示当前时刻。其格式并不固定,如:
|
Date: Sun, 01 May 2016 08:40:39 中国标准时间↙ |
以下内容就是源列表数据。"Content-Length: 441"表示源列表数据的字节数为441,含每行结尾的\r\n。
|
STR;RTCM23;RTCM23;RTCM 2.3;1(1),3(10),18(1),19(1);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMR;CMR;CMR;CMR;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;CMRP;CMRP;CMR+;CMR;2;GPS;SGNET;CHN;31;121;1;1;Trimble GPSNet;None;B;N;0;;↙ STR;DGPS;DGPS;RTCM 2.1;RTCM 2.1;2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ STR;RTCM3X;RTCM3X;RTCM 3.X;1004(1),1005/1007(5),PBS(10);2;GPS;SGNET;CHN;31;121;1;1;SGCAN;None;B;N;0;;↙ |
源列表数据中,一行表示一个挂载点。每行以分号分隔,其含义请见下表
|
序号 |
示例 |
说明 |
|
1 |
STR |
类型STR/CAS/NET,这里只对STR进行说明 |
|
2 |
RTCM23 |
挂载点(Mountpoint) |
|
3 |
RTCM23 |
identifier |
|
4 |
RTCM 2.3 |
差分数据格式 |
|
5 |
1(1),3(10) |
数据1(1秒输出一次);数据3(10秒输出一次) |
|
6 |
2 |
载波相位数据 0—无 1—单频 2—双频 |
|
7 |
GPS |
导航系统,如:GPS、GPS+GLO、EGNOS |
|
8 |
SGNET |
网络 |
|
9 |
CHN |
国家 |
|
10 |
31 |
纬度 |
|
11 |
121 |
经度 |
|
12 |
1 |
是否需要发送NMEA。0—不需要 1—需要 |
|
13 |
1 |
基站类型:0—单基站 1—网络 |
|
14 |
SGCAN |
产生此数据流的软件名称 |
|
15 |
None |
压缩算法 |
|
16 |
B |
访问保护 N—None B—Basic D—Digest |
|
17 |
N |
Y/N |
|
18 |
0 |
比特率 |
|
19 |
上文提到,NtripCaster给NtripClient发送差分数据时分两种情况:
1、直接转发NtripSource产生的差分数据。在这种情况下,NtripClient只要指定挂载点即可;
2、通过解算多个NtripSource的差分数据,为NtripClient产生一个虚拟的基准站。在这种情况下,NtripClient不仅要指定挂载点,还要发送自身的坐标给NtripCaster,NtripCaster根据这个坐标才能产生虚拟基准站。
NtripClient给NtripCaster发送自身坐标,用到的就是NMEA里的GGA数据。上表的第12个数据说明了是否需要给NtripCaster发送GGA数据,0表示不需要,1表示需要。
4.2 获取差分数据
NtripClient获取差分数据的过程如下:
1、与NtripCaster建立TCP连接;
2、给NtripCaster发送如下命令
|
GET /RTCM23 HTTP/1.0↙ User-Agent: NTRIP GNSSInternetRadio/1.4.10↙ Accept: */*↙ Connection: close↙ Authorization: Basic VXNlcjpQd2Q=↙ ↙ |
上面的RTCM23是挂载点名称。
VXNlcjpQd2Q=是用户名、密码的Base64编码,解码后就是User:Pwd。也就是说用户名为User、密码为Pwd,它们之间以冒号分隔。
3、NtripCaster的回复
如果用户名、密码、挂载点均有效,将返回如下数据:
|
ICY 200 OK↙ Server: Trimble-iGate/1.0↙ Date: Wed, 18 May 2016 07:20:55 中国标准时间↙ ↙ |
200 OK 表示一切正常。注意:有的服务器只返回200 OK,其余数据行不返回;有的服务器返回的200 OK后面没有回车、换行。
如果用户名、密码、挂载点无效,将返回如下数据:
|
HTTP/1.0 401 Unauthorized↙ |
4、给NtripCaster发送GGA数据
GGA数据的示例如下
|
$GPGGA,230331,3115.27393,N,12133.89226,E,1,09,1.0,19.31,M,1,M,,*7F↙ |
注意:
1)如上文所述,有的挂载点需要发送GGA数据,有的挂载点不需要发送GGA数据;
2)UTC时刻格式必须为hhmmss,如:80331是不行的,必须改为080331;
3)校验码必须正确。
5、NtripCaster收到GGA数据后,将给NtripClient发送差分数据。
Ntrip通讯协议1.0的更多相关文章
- CPU卡中T=0通讯协议的分析与实现
IC卡的应用越来越广泛,从存储卡到逻辑加密卡,目前CPU卡已经逐渐在应用中占据主导地位.CPU卡根据通讯协议可分为两种:接触式和非接触式.接触式CPU卡主要采用两种通讯协议:T=0和T=1通讯协议.T ...
- 基于dubbo框架下的RPC通讯协议性能测试
一.前言 Dubbo RPC服务框架支持丰富的传输协议.序列化方式等通讯相关的配置和扩展.dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC ...
- MODBUS-RTU通讯协议简介
MODBUS-RTU通讯协议简介 什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...
- Netty 对通讯协议结构设计的启发和总结
Netty 通讯协议结构设计的总结 key words: 通信,协议,结构设计,netty,解码器,LengthFieldBasedFrameDecoder 原创 包含与机器/设备的通讯协议结构的设计 ...
- 几种通讯协议的比较RMI > Httpinvoker >= Hessian >> Burlap >> web service
一.综述本文比较了RMI,Hessian,Burlap,Httpinvoker,web service等5种通讯协议的在不同的数据结构和不同数据量时的传输性能.RMI是java语言本身提供的远程通讯协 ...
- USB通讯协议 && 数据传输
USB2.0通讯协议(spalish) 1.包(packet) 包是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的.USB包由五部分组成,同步字段(sync).包标识符(PI ...
- ISO7816通讯协议在工控主板EM9160中的实现方案
在新的国家电网智能终端相关标准中,规定了通过专门的加密芯片来保证设备数据安全性的方法,而设备主控单元与加密芯片采用了广泛应用的ISO7816通讯协议.工控主板EM9160为了适应这一新的技术需求,对其 ...
- TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议
原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...
- Tcp通讯协议
了解了Udp通讯协议之后,我们再认识一个常用的通讯协议:Tcp Tcp传输特点: --依赖于Socket和ServerSocket对象 --建立客户端和服务端 --建立连接后,通过Socket中的 I ...
随机推荐
- Laravel 数据库操作之Eloquent ORM模型
//模型中的相关代码 namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model{ //默认对 ...
- fmt 包中的函数和方法
/ Fprintf 将参数列表 a 填写到格式字符串 format 的占位符中// 并将填写后的结果写入 w 中,返回写入的字节数func Fprintf(w io.Writer, format st ...
- hanzi 全拼音 qu de
Function pinyin(ByVal mystr As String, Optional types As Byte = 0) As StringDim temp As String, i ...
- python两个类之间变量和函数的调用
1.class_a() class_b() 2.class_b使用class_a中的变量和函数 3.变量class_a中:class_a.num=... 函数class_b中:先实例化class_a( ...
- Maven生成项目文档
Maven项目可以通过maven-site-plugin插件生成项目文档,无论什么项目都可以生成. 执行命令: mvn site 生成完成的输出目录在${basedir}/target/site文件夹 ...
- pinpoint 应用性能管理工具安装部署
原文:http://www.cnblogs.com/yyhh/p/6106472.html pinpoint 安装部署 阅读目录 1. 环境配置 1.1 获取需要的依赖包 1.2 配置jdk1.7 ...
- python内存诊断
1.计算内存地址: str1 = 'shn' print id(str1) 2.计算内存大小,返回字节数 str1 = 'td' print sys.getsizeof(str1) 3.
- iOS开发 下滑隐藏Tabbar
项目中用到下滑隐藏tabbar,上滑显示. 虽然实现起来非常简单,还是记录一下. -(void)scrollViewDidScroll:(UIScrollView*)scrollView { ...
- vim列块操作
一.可视模式 进入可视模式有三种方法:v,V,CTRL+V (1)按v启用可视模式,能够按单个字符选择内容,移动光标能够选择. 如: (2)按V启用可视模式,立马选中光标所在行.按单行符选择内容.移动 ...
- EasyBCD在windows7基础上安装Ubuntu 14.04双系统详
把下载好的ubuntu安装包放在C盘根文件夹下,利用Daemon Tools 将安装包下casper文件夹的vmlinuz.efi和initrd.lz复制到C盘根文件夹下,紧接着打开easybcd,在 ...