IPv6可视化测量系统的设计与实现

2022-07-20 05:53黄友俊李想徐绘凯刘保君张甲
中国教育网络 2022年4期
关键词:经纬度字节消息

文 / 黄友俊 李想 徐绘凯 刘保君 张甲

IPv6单栈模式是指仅使用IPv6不支持IPv4。向IPv6单栈过渡是必然趋势。而IPv6单栈演进的可视化测量研究目前较少。设计IPv6网络可视化测量系统,既要考虑IPv6协议本身的标识、封装属性,又要考虑可视化测量系统自身在IPv6单栈环境下的运行。随着IPv6规模部署的推进,各类应用系统及设备对IPv6网络和协议支持需求的剧增成为IPv6单栈演进需要考虑的关键问题之一。支持IPv6的高精度卫星定位网络测量系统,作为信息物理系统[1](Cyber-Physical Systems,CPS)的一部分,对各行各业开展更大范围、更深层次的IPv6协同创新,推动IPv6单栈大规模部署具有非常重要的意义。在此背景下,作为共性关键技术的IPv6单栈的演进和北斗系统[2]的融合应用变得尤其重要。因此,IPv6可视化测量系统需要兼顾支持IPv6单栈和高精度卫星定位这两方面的设计问题,系统自身也能在IPv6单栈环境下稳定运行。

北斗三号导航定位系统作为全球导航卫星系统[3](Global Navigation Satellite System,GNSS),发射卫星数量最多,覆盖120个国家和地区,轨道径向精度6.6厘米[4]。北斗三号在高精度算法和高精度板卡制造方面,运用RTK(Real-time Kinematic,实时动态差分)技术能将精度提升至厘米级。

消息队列遥测传输[5](Message Queuing Telemetry Transport,MQTT)是ISO标准下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况而设计的发布/订阅型消息协议。MQTT协议在受限的环境中,如卫星链路通信传感器、机器与机器通信和物联网中已广泛使用。通过MQTT协议,目前已经扩展出了数十个MQTT服务器端程序,可以通过PHP、Java、Python、C、C#等编程语言来向MQTT发送相关消息。

本文针对移动终端运行关键数据,与全球卫星定位系统的经纬度坐标绑定,基于MQTT协议进行IPv6网络发布和订阅,为指挥控制中心全面了解和监测现场移动终端和被测对象的运行状态,提供可视化测量系统并进行验证和展示。

系统设计

定位原理与技术平台

全球卫星定位系统的基本原理是:测量出已知位置的卫星到用户接收机之间的距离,然后综合多颗卫星的数据,就可知道接收机的具体位置。要达到这一目的,卫星的位置可以根据星载时钟所记录的时间在卫星星历中查出。而用户到卫星的距离则通过记录卫星信号传播到用户所经历的时间,再将其乘以光速得到。由于大气层电离层的干扰,这一距离并不是用户与卫星之间的真实距离,而是伪距(PR)。当GPS卫星正常工作时,会不断地用1和0二进制码元组成的伪随机码(简称“伪码”)发射导航电文。然而,由于用户接收机使用的时钟与卫星星载时钟不可能总是同步,所以除了用户的三维坐标x、y、z外,还要引进一个Δt,即卫星与接收机之间的时间差作为未知数,然后用4个方程将这4个未知数解出来。因此,如果想知道接收机所处的位置,至少要能接收到4颗卫星的信号[6]。

本文采用C/S结构的python开发环境和ARM嵌入式开发环境相结合的方式实现IPv6可视化测量系统。卫星接收机通过GNSS室外天线、基站和USB转RS485模块接收RTCM(Radio Technical Commission for Maritime Services,航海无线电技术委员会差分信号格式)数据,RTCM服务器将卫星RTCM信息编码RTCMessage消息提交给MQTT Server程序。移动终端作为MQTT订阅客户端,本地链路地址订阅RTCM信息解析卫星信息,结合GNSS基站作为固定站的位置,计算移动终端作为移动站本身的位置。DHCP服务器根据定位精度下发不同的IPv6地址前缀和后缀。移动终端把经纬度信息编码为DeviceMessage消息发给MQTT服务器。Web服务器订阅DeviceMessage消息解析出经纬度信息和技术参数。系统组成结构如图1所示。

图1 系统组成结构

接收机与RTCM服务器为同一台服务器,移动终端设备由UM482基站、USB转RS485模块、支持本地链路地址FE80::/10的通信模块组成,移动终端(传感器+嵌入式OS)和MQTT服务器之间采用MQTT协议通信,订阅RTCMessage信息并发布DeviceMessage信息。

IPv6协议单栈部署设计

IPv6协议单栈部署设计包括IPv6单栈网络设计和IPv6单栈站点设计。

IPv6单栈网络设计的重点为基于DHCPv6的地址生成系统,此系统支持基于用户信息和地理信息生成IPv6地址,系统组成原理如图2所示。

DHCPv6服务器接收IPv6地址请求,并对所述IPv6地址请求中的用户信息和地理信息进行压缩处理,确定IPv6地址的后64位(可变),从而确定IPv6地址。其中,地理信息包括经度信息、纬度信息以及高度信息;用户信息包括账号信息。

具体而言,DHCPv6服务器确定所述地理信息与DHCPv6服务器的地理信息的差值,并分别对该差值以及与所述用户信息相关的账号信息进行压缩处理。由此确定与所述差值相关的5个字节,以及与账号信息相关的3个字节。其中,5个字节包括与经度信息相关的2个字节,与纬度信息相关的2个字节以及与高度信息相关的1个字节。压缩处理后,确定与该DHCPv6服务器单元通信的用户端的IPv6地址的后64位,并判断该用户端的IPv6地址是否与数据库中存储的已有IPv6地址相同。若相同,则DHCPv6服务器单元随机生成一修正IPv6地址,并将其下发至该用户端;若不同,则保留该用户端的IPv6地址,并将其下发至该用户端。

如需要更高精度的地址编码,可调整后64位空间,最长为后96位,这时经度信息可相应调整为3个字节,纬度信息可调整为3个字节,高度信息可调整为2个字节,用户信息可调整为4个字节。

IPv6地址生成系统还包括中央管理服务器,用于存储多个DHCPv6服务器的地理信息和分配的对应IPv6地址,从而通过逆向解析逆向追溯,确定用户端的地理信息和账号信息。

IPv6单栈站点设计的重点在于禁止IPv4协议的运行或在网卡上禁用IPv4地址,本文基于ubuntu20.04和Apache2.4.48实现。

设备消息结构体和流程设计

根据可视化测量系统的设计流程,通过MQTT服务器传输的消息结构体主要包括RTCMessage和DeviceMessage两种,其中RTCM主要是增加长度字段转发。本文设计了移动终端设备到MQTT服务器的DeviceMessage数据结构,该结构体为56字节,如下所示,保留字段支持不同类型的时延地理敏感性指标参数填充。

__packed struct DeviceMassage{

rt_uint32_t Device_ID; //设备号

float Torque; //机械参数

char Mode_Ind; //定位模式

double longitude; //经度

double Latitude; //纬度

rt_int8_t Status; //设备状态

rt_int8_t Reserve2; //预留2

rt_int16_t Reserve3; //预留3

rt_int16_t Reserve4; //预留4

rt_int32_t Reserve5; //预留5

rt_int32_t Reserve6; //预留6

rt_int32_t Reserve[4]; //预留7

};//56bytes

4项科技成果获国家科技进步二等奖,49项科技成果获大禹水利科学技术奖。引进60余项先进技术和设备,推广转化百余项先进实用科技成果。建立水利科技推广地方工作站13个,认定水利科技推广示范基地24处。发布国家标准3项,行业标准63项,现行有效标准覆盖率提高4%。

RTCMessage消息发布订阅程序流程设计如下:1.启动MQTT服务器,服务器监听IPv6/IPv4地址和1883端口的输入;2.卫星接收客户机读取串口数据,发布RTCMessage消息到MQTT服务器;3. MQTT服务器接收到此消息;4.MQTT服务器处理该消息,把RTCMessage消息发布给订阅消息的客户机;5.重复上述过程,保证RTCMessage消息每秒更新一次。发布和订阅的流程如图3所示。

图3 RTCM发布流程和MQTT订阅流程

DeviceMessage消息发布订阅程序流程设计如下:1.启动MQTT服务器,服务器监听IPv6/IPv4地址和1883端口的输入;2.移动终端客户机读取串口数据,获得卫星数据,与固定站(卫星接收机)发布的RTCM消息一起计算精确定位数据,组成DeviceMessage消息,发送给MQTT服务器;3. MQTT服务器接收到此消息;4.MQTT服务器处理这个消息,把DeviceMessage消息发布给订阅该消息的客户机;5.重复上述过程,保证DeviceMessage消息每秒更新一次。

应用效果

通过对单点定位和多点定位精度测量的对比可以发现,多点定位时经纬度位置偏移范围更小。接收的卫星定位经纬度信息可通过对保存的历史数据进行偏移分析来获取。在多点定位固定基站和移动站环境搭建完成后,可以部署MQTT程序传输技术参数数据并进行应用展示。MQTT程序需安装开发库以支持RTCMessage消息和DeviceMessage的发布和订阅。

MQTT程序包括RTCM消息与Device消息的发布和订阅四个程序,本文主要以RTCM消息发布和Device消息订阅为例说明程序的实现。发布RTCM消息的客户端在Python开发库支持下,通过serial.tools.list_ports.comports( )函数枚举设备串口列表,查看可用的端口,获得当前有效的串口文件句柄,调用serial.Se rial(serialName1,115200,timeout = 60)打开端口,启用定时器,在定时器中获得串口数据状态。当有数据触发时,读取RTCM消息,增加卫星数据的长度字段放在消息头部,编码为二进制流,调用client.publish("RTCMessage",data)函数发布RTCM消息。RTCM消息发布程序MQTT模块部分连接IPv6服务器的代码如下所示。

client = mqtt.Client("mycleint-xxx-id",protocol=mqtt.MQTTv31)

client.username_pw_set("username","password")

client.connect("2001:da8:200:xxxx:xxxx:xxxx:fef1:6793", 1883)

client.loop_start()

运行RTCMessage订阅程序,通过Tcpdump抓包可以看到协议运行在IPv6地址上。

DeviceMessage消息订阅程序根据移动终端发布的内容进行订阅,消息内容包括设备号、参数大小、定位模式、经纬度、设备状态等信息,其中经纬度信息是卫星多系统联合定位的结果,联合定位输出信息包含GNSS接收机的时间和定位相关数据。语句以GNGGA[7]开头,表示GNSS定位信息,只有北斗参与时以BDGGA开头,有两个卫星系统及以上的卫星参与定位解算都以GNGGA形式输出。表1为GNGGA数据结构表。

表1 GNGGA数据结构

其中,GPS质量指示符qual字段表示定位解算的状态,主要有:1.RTK固定解(fix,对应4-RTK固定解),状态4拥有固定解意味着解算出了正确的解,拥有1~3cm的测量精度;2.RTK浮点解(float,对应5-RTK浮点解),又称差分解,此时算法尚未得到固定解(fix)。由于没有固定解(fix),因此提供了一种Float解决方案,它的位置始终比固定(fix)解决方案的精度低,介于厘米级和米级之间;3.单点解(single,对应1单点定位),接收机未使用任何差分改正信息计算的3D坐标,此时定位较不稳定且误差较大,定位精度为米级。

GNGGA数据结构经度(DDDmm.mm)和纬度(DDmm.mm),其中,D是度,m是分,小数点前有4~5位,与传统的表示法不同。移动终端设备在发布之前转换成传统表示法,按小数点前两位截取,把m部分都除以60,放小数点后面。纬度范围是-90~+90,可能出现D在赤道上纬度接近于0的情况,仍然按小数点前两位,没有的位数补零,经纬度方向有正负,北纬为正,东经为正。

Python编程语言通过格式化字符串(format strings)规定转化的方法和格式。根据Python类型与格式和大小的对应关系,上述Device消息56字节的结构体打包和解包的代码为:struct.pack('>IfcddBBBHHLLQQ',message.payload)struct.unpack('’为字节流大端序,用于把数据发送到网络,‘<’为字节流小端序,用于从网络解包字节流。

其中连接回调函数on_connect在客户端连接后被调用,依据返回值rc判断客户端是否连接成功。同时创建一个MQTT客户端,该客户端将连接到消息回调函数on_message,该函数将在客户端收到消息后被调用,在该函数中打印出订阅的topic名称以及接收到的消息内容。Device消息订阅程序文件命名为:Mqtt-subdevice-message.py。运行程序,整个系统正常工作,经纬度数据小数点后长度不同表示精度不同,精度不同分配的IPv6地址前缀不同。

从显示的信息顺序可以看出,定位状态首先是0(不可用或无效),过渡到RTCM消息还没参与解算是1(单点定位),参数设备自身收到伪距差分信息后状态为2(伪距差分),然后根据RTCM消息和伪距差分消息结算为5(RTK浮动解),一分钟后得到4(RTK固定解),并保持稳定。固定解小数点后5位保持不变,表示定位精度已达到厘米级。

参数的变化过程为:首先是未确定固定解时8NM上下浮动的误差值,然后是7.82NM的设定目标值,中间校准过程分别为6.07NM、5.94NM和6.05NM,最后达到了7.82NM的设置目标值,参数校准过程完成。可预先设置阈值进行报警。

定位状态收敛过程为:首先是状态1(单点定位)下的低精度范围,然后是状态5(RTK浮动解)定位下的重精度范围,最后为状态4(RTK固定解)定位下的高精度范围。

Web服务器基于IPv6单栈技术建设,支持IPv6单栈访问。系统通过MQTT协议读取不同精度的数据存入Web服务器,调用百度地图接口显示经纬度坐标,经过坐标转换生成html页面。通过IPv6地址访问http://[2402:e740::666]/site_ipv6/line.html站点,显示图4所示的效果,发现在100米长度的线路上,移动设备技术参数大小与位置变化的过程。

图4 IPv6移动终端订阅技术参数信息位置显示

访问http://[2402:e740::666]/site_ipv6/bpos.html站点,显示图5所示的效果,因百度地图的精度为米或亚米级别,基本看不出精度是厘米级的点的区别。

图5 Web服务展示低精度参数信息位置显示

通过高精度交互软件转换为离散轨迹图,显示出图6的效果,可以看出精度范围在6厘米内,满足测量场景中技术参数厘米级的要求。

图6 高精度交互软件订阅高精度卫星数据显示

本文从IPv6创新应用向IPv6单栈演进的角度出发,设计并实现了一种支持IPv6的可视化测量系统。在系统中对经纬度信息、高度信息和用户身份信息如何映射到IPv6后64位(可变)进行了详细设计,提供了IPv6站点内的位置查询相关服务。尝试解决可视化测量系统在推进IPv6规模部署时面临的扩展性、实时性、移动性、管理性四个方面的重大挑战,提供一套综合解决方案。同时,在面向工业互联网环境下,尝试从信息物理系统的角度出发,为基于IPv6网络测量物理世界技术参数的安全性方面提供了参考,在IPv6创新应用领域中起到一定的应用示范作用。

猜你喜欢
经纬度字节消息
No.8 字节跳动将推出独立出口电商APP
一张图看5G消息
No.10 “字节跳动手机”要来了?
基于经纬度范围的多点任务打包算法
轻量级分组密码Midori64的积分攻击
晚步见道旁花开
自制中学实验操作型经纬测量仪
澳洲位移大,需调经纬度
人类进入“泽它时代”