基于DSP的GPS数据采集与定位系统设计
2018-08-10张万威张东方徐德东
张万威,张东方,徐德东
(1.武汉大学湖北武汉430079;2.北京遥感设备研究所北京100854)
近年来,卫星导航与位置服务产业的快速发展,使以卫星导航、移动通信和手持终端技术相结合的卫星导航产品向微型智能的消费电子产品方向发展[1]。以这些技术的集成和融合而成的产品,大多建立在嵌入式系统之上,因此在嵌入系统上实现数据的实时采集、解码、定位处理、传输存储已成为卫星导航产品开发应用的热点研究方向[2]。
目前的相关研究大多只是从如NMEA-0183数据流中提取定位结果数据并显示和存储,缺少关键的定位处理核心环节[3-5],而高精度定位解算处理算法是研制自主知识产权卫星导航系统产业化应用产品的关键技术之一。
针对目前实验室高精度卫星定位相关算法在嵌入式系统下测试的实际需求,设计了一种基于DSP的GPS数据实时采集与定位处理系统,详细阐述了该系统硬件框架方案和系统软件设计的方法与实现步骤。
1 系统硬件框架
基于DSP的GPS实时数据采集与定位处理系统的硬件框图如图1所示,主要由GPS天线、GPS导航模块、DSP微处理器模块、PC上位机等组成。该系统中各硬件选型及功能作用如表1所示,重点对GPS导航模块和DSP微处理器模块这两个模块做介绍。
图1 系统硬件框图
表1 系统硬件选型与功能
1.1 GPS导航模块
GPS导航模块选用OEMStar板卡,该板卡是Novatel公司推出的一款高性能低成本的导航接收模块,具有尺寸小、功耗低等优点,可以用于各种具有高精度定位要求的系统集成[6]。其主要性能指标如表2所示。
表2 OEMStar主要性能指标
通过串口通信向OEMStar板卡发送指令,可以输出GPS数据(观测值、星历、电离层参数),相关指令及其意义如表3所示。
表3 OEMStar相关指令及其意义
OEMStar输出的二进制数据都是以一完整子帧发送的,每一个子帧由帧头信息、有效数据、32位CRC校验码等组成[6],二进制子帧数据结构如表4所示。
表4 OEMStar二进制子帧数据结构
其中,帧头信息由帧同步字、帧头长度、有效数据类型、有效数据长度等信息组成。
1.2 DSP微处理器模块
DSP模块选用TMS320C6713DSP,该DSP是Ti公司的32位高速浮点型微处理器,主频最高可达300 MHz,片上共有264K×8位存储器,并具有丰富的片上外设资源,可实现高速运算和大容量存储[7]。
TMS320C6713DSP没有异步串口通信接口,可采用UART芯片TL16C52B来实现异步串口通信[8-10]。TL16C52B包含两路相互独立的异步接收器,其可通过一个CPLD模块与TMS320C6713的连接,如图2所示。
图2 TL16C52B与TMS320C6713的连接
TL16C52B提供两个中断请求信号INTA、INTB分别用于UART通道A和B申请C6713中断,INTA、INTB和USB中断一起复用C6713的EXT_INT6,下降沿有效[7,10]。
后续将EXT_INT6的中断服务函数名称命为c_int6,当UART上有数据输入时,系统自动进入c_int6来响应UART的中断请求。
2 系统软件设计与实现
本系统软件主要包括串口中断子帧数据接收程序、DSP后台主程序和导航定位上位机程序。其中,DSP后台主程序包括GPS模块子帧数据的解码、单点定位解算、定位结果编码及串口输出等3个模块。
2.1 串口中断子帧数据的接收设计
当DSP模块串口上收到GPS导航模块输出的二进制数据后,系统自动进入串口中断GPS模块子帧数据接收程序(c_int6函数),其程序流程图如图3所示。
根据OEMstar输出的数据规律,在c_int6函数中设计数据接收程序,先进行子帧帧头同步,再判断已接收长度是否等于子帧总长度,若该帧已接收完成,置子帧数据收齐标记为已完成,另外为避免读写数据冲突,一定要进行子帧数据的备份[7]。在c_int6函数中只接收不解码子帧数据,以免因解码运算耗时,影响子帧数据的连续稳定中断接收,对子帧数据的解码放在DSP后台主程序中。
图3 串口中断数据接收程序流程图
2.2 DSP后台运行主程序设计
嵌入式系统软件后台主程序设计如图4所示:
图4 DSP后台运行主程序流程图
在DSP后台主程序里,初始化完成后,先通过发送表3中指令来配置OEMstar板卡,再判断c_int6函数中子帧数据收齐标记是否为已收齐,若收齐则进行子帧解码,当子帧为观测数据时,调用自研的单点定位程序进行定位解算,最后将解算结果按自定义二进制格式编码并通过串口输出[7]。
2.2.1 GPS模块子帧数据的解码实现
GPS导航模块子帧数据解码程序的流程图5所示。与GPS导航模块子帧数据接收程序相比,还需解码有效数据类型,并做32位CRC校验,成功后再判断有效数据类型来对应解码观测数据、星历数据和电离层数据。
2.2.2 伪距单点定位程序及移植测试
本系统自主研制的单点定位程序使用GPS L1伪距观测值,并用Klobutchar模型和Hopfield模型分别对电离层和对流层延迟进行模型改正,并考虑地球自转改正和相对论效应[2,11]。采用标准C语言编写伪距单点定位程序,移植后按照图6所示的方式来验证程序移植的一致性。
图5 GPS子帧数据的解码流程图
图6 程序移植的一致性验证流程图
经过实测表明这两者在WGS84坐标系三轴方向差异都小于1e-8量级,因此认为程序移植前后是一致的,可以满足米级精度的伪距单点定位测试。
2.2.3 导航定位结果编码串口输出
DSP后台主程序解算结果以表5所示的二进制子帧格式进行编码并通过串口输出。
表5 输出子帧二进制数据结构
有效数据内容由帧类型决定,帧类型可分为定位、观测值、星历、电离层等,这里只列出定位有效数据的具体结构,见表6。
2.3 导航定位解算上位机软件设计
导航定位解算上位机软件的流程图如图7所示。使用Qt的QSerialPort串口类[12]开发的导航定位解算上位机软件界面如图8所示,该软件实现了本系统串口输出数据的接收解码与实时显示,并将结果按http协议通过socket[13]上报到服务器(如nginx)。
表6 定位数据结构
图7 上位机软件的流程图
图8 上位机定位软件界面
3 实验测试及结果分析
为了验证本系统的可靠性和稳定性,于2017-10-24日,使用该系统在武汉大学测绘学院楼顶连续进行了14个小时静态实验的数据采集。将本系统的计算结果与由Waypoint IE软件处理得到的事后精密定位[14]结果在WGS84坐标系下进行详细对比分析,以评估本系统的精度和性能。另外还实现了将定位结果在百度地图上的实时显示。
3.1 可见卫星数和PDOP值分析
图9给出了本次实验中可见卫星数及位置精度因子(PDOP值)随时间变化情况。GPS可见卫星数在6~10颗之间变化,均值为7.4颗,PDOP值大约在1~5间变化,均值为2.09,没有发生过数据中断情况。
图9 可见星数和PDOP值
3.2 伪距单点定位精度分析
本系统在WGS84坐标系下的定位误差曲线如图10所示。可看出在2~12小时内定位精度较为平稳,但在2小时附近,误差变化比较剧烈,特别在Y轴方向误差达到近15 m,经分析此时星数只有6颗,且PDOP值较大接近5,同时还发现卫星有较频繁的升降,因此给定位结果带来了一定的波动,最后一小时内定位精度波动也是同样原因。
图10 伪距单点定位误差结果
表7在均值、标准差和RMS等指标对误差特性进行了统计,从均值上看Z方向的误差最小,X方向大于Y方向,从标准差上看Y方向稍大,X和Z方向基本相近,在XYZ3个方向的RMS分别为1.158 m、1.702 m、1.127 m,其三维误差RMS为2.347 m。
3.3 定位结果实时显示
用后台语言如PHP编写用于服务器数据获取及存储的接口程序[13],将定位结果实时存储到服务器上。编写html程序调用基于JavaScript的百度地图API和服务器数据获取接口,通过浏览器访问该html文件,即可实时显示如图11的定位结果。另外向该html文件中添加绘制星空图代码,利用canvas标签[15-16]以及坐标映射,还可实时动态显示如图12所示的导航星空分布效果图。
表7 定位误差统计
图11 定位结果显示
图12 星空分布图
4 结束语
综上所述,通过实测验证了该采集与定位处理系统的可靠性和稳定性,可满足实验室测试需求。后续还需提高硬件集成度并优化算法做进一步动态试验测试,本次研究为后续探索伪距差分、相对定位、GNSS定姿等算法的工程化实践提供了一定的研究基础。