基于“北斗”卫星实现列车定位的方法与设计
2013-05-11蒋大明张晓峰
刘 祎,蒋大明,张晓峰
(1.北京交通大学 电子信息工程学院, 北京 100044;2.北京中铁通电务技术开发有限公司, 北京 100166)
列车位置的精确定位是实现最优列车信号调度的基本参数。目前,针对铁路列车定位,各国采用的方式有所不同,法国ASTREE系统采用多普勒雷达进行定位;北美ARES、PTC、PTS系统采用GPS进行定位;欧洲ETCS、日本CARAT系统采用查询/应答器和里程计进行定位;德国LZBX系统采用轨间电缆进行定位[1]。
全球卫星导航定位系统是一种可发送高精度、全天候、连续实时的导航、定位和授时信息系统。目前正在进行的基于卫星导航系统的铁路列车控制的试验表明:不断降低成本和改进性能的卫星导航系统具有提高运输能力和改善安全性的特点,并且能够节省大量的道旁信号设备,增加了运输能力,改进了性能,降低了道旁设备的安装和维护成本[2]。
本文通过“北斗”卫星信号,在已知部分轨迹的情况下,采用卡尔曼滤波处理数据,通过最小二乘法拟合手段,实现了列车位置判定。
1 实现列车定位的算法
根据“北斗”卫星在某线上的数据,通过卡尔曼滤波处理,采用最小二乘法的拟合手段不断迭代运算,最终实现列车位置的判定。经过卡尔曼滤波处理的列车运行轨迹如图1所示。
图1 卡尔曼滤波处理的列车运行轨迹
数据是轨道在A站到B站区间所在位置的部分经纬度信息,它是通过放置在列车上的接收机根据其接收到的卫星数据而确定的。因为接收机在接收数据时有时间间隔,所以不能掌握全部的轨迹信息。在已知部分轨迹之后,假设以A站之前一点为原点,则轨迹上的任一点距A站都有一定的距离,只要能根据接收到的经纬度信息确定当前列车到原点的距离,就可以通过比较两个值的大小来判断列车所在位置的情况。
接收机以一定的速度每隔1 s接收一次数据,从A站到B站共采集到52 137个数据,列车沿轨道行进,接收到轨道经纬度。设距原点的抽象距离为S,经度为ylon,纬度为ylat,将每个采样点调整系数,同乘以0.001作为其对应原点的抽象距离值,并存入到数组中。
这样做有2个原因:(1)列车沿轨道行进,其所走距离随着时间线性增长,方便一一对应。(2)经纬度的值是两位数,如果不乘以0.001,则后面在进行方程拟合时精度会有问题。
设A站距原点的抽象距离为 S=0.001,则终点B站距原点为S=52.137,通过最小二乘法的拟合方式,分别设立ylon与S、yla t与S的一元二次方程。利用方程,通过给定的列车实际经纬度值,求出拟合的S,值。因为S与ylat,ylon都是一一对应的,所以可以用拟合的S,找出其对应的ylon加,和ylat,。通过比较与真实值间的误差最小,获得最优的S值。
2 列车定位的设计与实现
2.1 体系结构
利用VS2008编程环境建立控制台程序,编程语言为面向对象的C++语言,结合mATLAB拟合函数最终达到功能实现。
MATLAB拟合程序[3]:
(1)将轨道数据的经纬度值载入到MATLAB中。(2)划分19个区,利用曲线的最小二乘法分别进行函数拟合,拟合的曲线选择一元二次方程。并将最终拟合出来的一元二次方程的各项系数输出到TXT文档中。(3)调用cftoo l工具箱,查看拟合的精度是否符合要求。选择任意区间进行验证,图2和图3是针对第13区间的检测结果。
相关系数R-square达到0.99以上,符合标准。
图2 针对第13区的拟合曲线
图3 针对第13区的拟合误差
VS2008控制台编程部分:数据读入read_file函数。其功能是将所有数据读入到动态二维数组f_data[idx][]中,其中idx表示位置S,f_data[idx][0],f_data[idx][1],f_data[idx][2]分别存储拟合方程的二次项、一次项和常数项系数。
判断列车所在区域的Suretrain函数。因为每个数据的经纬度不同,根据这一特点,利用不同的整数和小数进行判定,只有在两者都符合判定条件时,才能确定其所在区域。
给出所在区域的范围read_fileZone函数。这部分主要是为了一旦实际给出的经纬度值和数据库里的值重合的话,就可以直接得到位置信息进而省去拟合。此函数会根据所判定的区域给出开始和结束值,从而可以使程序在判断位置时缩短范围,由原来的50 000多条缩至最多4 213条数据,最少103条数据(根据所在区域大小而定),大大节约了时间。
方程系数FitEqu函数。其功能是将mATLAB拟合好的方程各项系数调入到程序中供主程序实现其具体算法。
判定列车方向的VECTOR函数。将列车实时读取的数据存入到VECTOR中,通过前后数据的比对,判断列车的行进方向。如果S值增大,则代表方向是由A站到B站,反之亦然。
2.2 设计流程图
(1)将采集到的50 000多条数据读入。(2)给定经纬度值,先判定是否为采集的数据里面的点,如果是则给出位置值并退出,如果不是则进行拟合,直到求出最为精确的位置值为止。列车定位流程如图4所示。
图4 列车定位流程图
3 关键技术
3.1 实现位置与经纬度的对应方法
定义二维动态数组f_datalon、f_datalat,令f_datalon[x][0],f_datalon[x][1],f_datalon[x][2]分别存一元二次方程的二次项、一次项和常数项系数,而x则对应这一经纬度所在的S值。这样通过一个数组就可以实现S,ylat, ylon的对应了。具体的对应方法如图5所示。
图5 列车位置与经纬度的对应方法
3.2 数据处理与分区
(1)根据卡尔曼滤波对数据进行处理,把其中的盲点删除。根据轨迹的经纬度信息,按照其整数部分与小数部分的区别,将数据划分为19个数据区。(2)给定一个数据,判断其所属区域,在小区域中进行拟合判定。
3.3 列车前后车的确定方法
定义在A站前方的一点为坐标原点,其它的点都是路径距离。则可判定,如果都是从A站到B站,则S值大者为前车,否则为后车。如果从B站到A站,则S值小者为前车,否则为后车。
3.4 列车方向的确定方法
对于列车的行进方向,是通过容器接收到的列车值的变化趋势来判定的。如果趋势是增大的趋势,则证明是从A站到B站,反之亦然。
3.5 列车位置的确定方法
列车位置的确定是通过在每个区间上根据其所持有的数据按照纬度与S,经度与S分别采用最小二乘法拟合曲线方程,经过根的不断筛选逼近来实现的。其中拟合函数是通过MATLAB实现的。
曲线拟合[4]的基本思想是根据已知的数据点yi=f(xi)(i=0, 1, …, n)选择可以进行拟合的函数类,再通过最小二乘法最终确定所要使用的拟合函数。其构造原理如下。
设所需要的函数为 :
为确定上式系数a0, a1, …, am的值,需要考虑f(x)与x)在节点x0, x1, …, xn处差的平方加权和:
式(3)中,wk(k=0, 1, …, n)为给定的数。通过极值的必要条件可知:化简后得到a0, a1,…, am的线性方程组的值:
其对应方程为公式(8)。
多项式回归的判断准则是保证实际数据域计算数据之间差的平方和最小。
方程拟合完成以后,根据对应关系,找到s对应的ylat, ylon,然后根据拟合方程ylat =f(s),求出解s1,, s2,,并通过对应关系分别找到对应的ylat,, ylon, ,比较(ylon,-ylon,)2+ (ylat,-ylat,)2,最小的值即为所求S值,经度与纬度采用的方法是相同的。
目前,测试的数据只通过纬度拟合就能精确地求出列车位置,采用同样的办法,将经度与纬度的拟合结果进行比对,可以求出精确的位置值。
4 结束语
该设计是根据在已知部分不完整轨迹的情况下,通过最小二乘法拟合,采用自身算法实现的列车定位,只利用了列车的经纬度信息。
对于列车方向的判定是通过 值的变化趋势实现的。本方法所求得的S值只是抽象意义上的,但是因为其对应了实际的经纬度值,所以真实的位置是可以确定的。
在保证列车能够精确地获得经纬度的情况下,此种方法可以延伸应用到其它轨迹已知的铁路上。
[1]李 凯.青藏线列车卫星定位系统技术方案研究[J]. 铁道通信信号应用,2003,39(4):18-20.
[2] 苏晓声.基于卫星导航系统的列车控制[J].铁道知识,2005(4):30-31.
[3] 高会生,刘童娜,李聪聪. MATLAB实用教程[M]. 2版.北京:电子工业出版社,2011:356-364.
[4] 王兵团,张作泉,赵平福.数值分析简明教程[M].北京:北京交通大学出版社,2011:97-99.