面向安卓移动终端的室内惯性定位系统设计

2018-03-06 12:28王丰得杨一涵
导航定位学报 2018年1期
关键词:航向航迹步长

孙 伟,王丰得,王 野,杨一涵

(辽宁工程技术大学 测绘与地理科学学院,辽宁 阜新 123000)

0 引言

随着移动通信技术的快速发展,基于位置的服务在日常生活中应用越来越广泛[1]。在室外环境中全球定位系统(global positioning system,GPS)能够提供全天候、高精度、实时的定位服务,但是在室内环境中由于墙体、门窗遮挡GPS无法提供精准的定位服务。然而研究表明,人类超过70 %的时间是在室内活动,随着时代发展,室内服务设施大型化、复杂化,人们对于室内导航的需求不断增加。因此,室内导航定位技术已成为许多高新技术企业和重点实验室的研究重点。

文献[2]在1977年就提出了行人航迹推算(pedestrians dead reckoning,PDR)原理;但由于当时科学技术有限,使得惯性测量单元的成本昂贵,而且体积大、不便于携带,因此限制了这项技术的发展。近十年来,随着微机械电子技术的快速发展,惯性测量单元功能增强、体积减小、成本降低,并且可以集成在一个微小的芯片中。这使得基于惯性传感器的行人航迹推算技术普及成为可能[3]。目前智能手机大多都内置了惯性器件,如加速度传感器、方向传感器、地磁传感器、陀螺仪等[4]。

本文基于Android智能终端,利用智能终端里多种惯性传感器,以行人航迹推算技术为定位方法,设计室内定位方案,并用JAVA语言在智能终端实现。

1 行人航迹推算原理

航迹推算原理如图1所示:上一点坐标已知,根据行人行进的距离和方向可以推算出下一个点的坐标,这个过程为航迹推算。

图中:P0、P1、P2为行人连续行走的航迹点;Nk、Ek(k=0,1,2)为各点的东向坐标和北向坐标;P0-P1、P1-P2对应行走步长;α0(t0)、α1(t1) 分别为相邻2步行走与北向的夹角(航向角)。

基于PDR的行人位置公式为

(1)

式中:Ek和Nk分别为行人在第k步东北天坐标系下的东向和北向坐标;Sk为该步的步长;αk为航向。式(1)有个前提为:假设行人在一步(单步或复步)内的航向是不变的,即该步内走直线。

根据式(1)可知:定位结果的误差来源于初始位置误差、方向和距离误差;方向和距离则通过对移动智能终端的传感器输出信号分析和处理得到;另外在传感器输出数据中带有噪声。因此对传感器信号采集、减少噪声干扰,提高步数和步频检测准确度等方面成为精确定位的关键。

2 算法实现

2.1 步态检测算法

2.1.1 行人行走姿态分析

据研究表明,人在行走过程中具有周期性和规律性[5]。在行走过程中,行人的步频和步长基本保持不变,具有连续性和持续性的特点[6]。通过分析行人的行走姿态,在行走过程中,根据竖直方向重力加速度变化可将一个单步分解为2个阶段:第一个阶段脚离地开始摆动,人体重心上移,竖直方向重力加速度不断增大;第二个阶段,脚开始落地,人体重心从最高处下移,竖直方向重力加速度随之减小。对于同一个人,在一个复步中,左脚和右脚的规律基本一致,所以在分析中只对右脚进行详细分析。基于行人行走步态的周期性,对加速度计输出信号的变化进行研究分析,找出信号中与步态一致的周期即可探测出行人的步频。本文步态检测方式使用峰值检测法,即通过分析加速度计输出信号,找出其中符合行人行走周期规律的波峰、波谷,便可确定为行走一步[7-10]。

2.1.2 信号处理

人体坐标系和加速度传感器的坐标系不一致,为提高波形检测的可靠度,对行人行走总加速度进行分析。总的加速度为

(2)

式中:a为三轴总加速度;ax为X轴方向加速度;ay为Y轴方向加速度;az为Z轴方向加速度。

为了提高步态检测精度,需要对采集到的加速度数据进行处理,首先通过高通滤波器剔除重力加速度,然后对数据进行平滑处理。从处理后的波形(如图2所示)可以清晰地看出波峰和波谷。

2.1.3 步态检测

采用峰值过滤器加时间窗口过滤器实现步态检测(如图3所示)。

第一个过滤器是峰值过滤器。理想状态下,一个完整的步伐中有一个波峰和波谷。实际情况中,一个步伐中可能会出现多个假的波峰和波谷,会干扰步频检测。因此峰值过滤器设置2个阈值,分别是波峰峰值Δ1以及波谷峰值Δ2,来判断是否为一步。根据大量实验数据设置Δ1和Δ2分别为1.0和0.5。当在2个迈步起点之间检测到大于2个阈值的波峰和波谷时,即可初步认定2个连续迈步起点之间为一个正常步伐。

第二个过滤器为时间窗口过滤器,正常行人行走频率为0.5~5 Hz,即行走一步的时间为0.2~2 s,因此如果2个连续的迈步起点大于2 s或者小于0.2 s可认定为不是真正的一步。峰值过滤器是初步检测条件,可能会发生误判,在它的基础上使用时间窗口过滤器可以进一步提高步频检测准确率。如果检测到2个连续迈步起点时间间隔小于给定最低阈值,就把这段波形认定为干扰波形,并把它组合到下一个波形中。当检测到波形时间间隔大于给定最大阈值,即可视为这段时间行人处于原地,判定该波形不是真正的一步。

2.2 步长检测算法

航迹推算算法中行进距离是由步数乘以步长计算得到,因此步长检测的精度将直接影响最终的定位精度。非线性步长估算模型计算量小,且能够适应行人不同运动状态,常用Weinberg approach模型[11],即

(3)

式中:stepsize为步长;amax和amin分别为一个完整步伐中的最大加速度和最小加速度计值;k为步长估算参数。

2.3 航向检测

采用基于惯性传感器的相对定位技术,除了需要得到距离,还需要知道行人行走的方向[12-14]。行人行走方向的检测精度将直接影响行人航迹推算的定位精度,因为角度误差会随着行走距离的增加导致定位结果与实际位置偏差越来越大。

在Android系统中,可以调用具体的API函数获取方向传感器数据,获得的数据包括航向角(Azimuth)、倾斜角(Pitch)、旋转角(Roll)。这3个角度是基于手机坐标系实现的。行人航迹推算主要利用手机正前方的朝向,即仅利用了航向角数值。

在行走时尽量保持移动终端Z轴正方向竖直朝上,使用方向传感器能够采集到Y轴方向与磁北方向的夹角。理论上,方向传感器获取的方向角度范围为0°~360°,与地理坐标系的关系如图4所示。

在航迹推算中,是以一步作为位置更新周期。在一个周期之内方向传感器采集的数据有多个。理论上一个步伐中采集的航向角应该一致,但是行人在行走过程中会不可避免地左右摆动,因此一个周期采集的航向角也会在一定范围内波动。如图5为一个步伐周期内采集的方向角数据,最大值为111.7°,最小值为108.3°,最大最小值差值为3.4°。

针对这种波动的影响,计算一个周期内的航行角均值作为行人行走的航向。图6中,横坐标表示17个步伐周期获取的513个航向角数据,纵坐标表示的是航向角值。实线是未处理的原始数据,从图中可以看出波形抖动明显,虚线表示处理后的数据,处理过后波形抖动明显减小。

3 系统设计与实现

3.1 系统工程架构

整个系统构建分为3层(如图7所示):最底端是数据库层,用来存储程序需要处理的各种数据[15-16];业务处理层负责具体的逻辑处理,峰值检测、动态阈值处理、步频检测、步长检测、方向检测等算法在这一层实现;视图层即界面层,直接面向用户,主要向用户直观展现步长、步数、行走距离以及行走轨迹信息。这3层结构符合常规设计中的模型-视图-控制器(model-view-controller,MVC)开发模式,将功能分离能够有效提升程序的可读性和可维护性。

3.2 控制层实现

控制层是MVC 3层中的C层,也叫业务逻辑层。该层主要负责各种算法实现以及处理视图层请求的业务逻辑。行人航迹推算系统中业务逻辑层需要完成惯性数据采集与预处理、步态检测、步长检测、航向检测等算法实现。

设计StepDetector.java类完成波峰波谷检测、动态调整阈值,并通过时间窗口检测法和阈值检测法检测步数。

StepService.java类因为继承了Service类,因此成为Android 4大组件之一的服务。在Android中,服务可以在后台运行,不需要前台界面;因此当屏幕锁定或者退出该应用程序时,该类仍然会通过调用SetpDetector.java完成计步。

设计Steplength.java类计算步长。

设计StepDate.java类将步数、步长封装为一个对象,便于管理和应用。

设计DbUtils.java类完成对数据库的增删查改操作。

3.3 模型层实现

数据库模块为MVC模型中的模型层,主要负责数据的存储与读取。系统中需要对采集到的惯性传感器数据计算得到的位置信息进行存储。使用数据库可以实现快速存储和读取数据。Android平台提供了一种轻量级的数据库SQLite,它支持SQL语句查询,而且占用内存小。使用SQLite需要首先创建数据库,然后再进一步创建表、索引等,最后写入。

为了存储加速度传感器、方向传感器数据、位置信息,系统中需要建立3张表,分别是TB_acc、TB_dir、TB_point。Tb_acc表存放的是加速度传感器采集的数据,包括三轴方向的加速度以及总加速度。TB_dir表存放方向传感器数据。TB_point存放位置信息,如表1~表3所示。

表1 TB_acc表

表2 TB_dir表

表3 TB_point表

3.4 视图层实现

视图层为MVC层中的V层,该层通过用户界面直观地向用户展示步长、轨迹等信息。在界面设计时,首先设计布局文件,通过添加TextView、Buttton等组件然后调整布局达到设计的效果。图8为系统设计界面,分别为惯性数据获取界面、行人信息界面及行人轨迹显示界面。

4 实验与结果分析

为了验证系统的定位性能,本文进行了室内定位实验。实验地点选在辽宁工程技术大学餐厅一楼。本文中实验测试采用小米厂商生产的红米Note3,内置的传感器为InvenSense生产的MPU-6050,表4为精度指标。图9为行走路线示意图,测试路径为长74 m、宽51 m的矩形。实验过程中,测试者按照图9中的路线,沿着A—B—C—D—A的顺序,按逆时针方向完成闭合路线测试。图10展示了预定行走路线及实际运动轨迹对比曲线,其中黑色虚线为预定路线,实线为实际轨迹。从图中可以看出系统计算位置与预定行走路线具有较高的重合度。测试结果,实际路线长250 m,系统测试长度为246.1 m,误差占实际长度的1.5 %,闭合差为3.78 m。

表4 传感器精度指标

图11为航向角曲线图,从图中可以看出,系统记录的航向角与实际行走方向相符。在直线行走时检测的航向角数据在±5°范围内波动。

图12为偏移量曲线图,从图中可以看出,偏移量随行走距离总体呈递增趋势。根据统计行走250 m,最大的偏移量为6.2 m,平均偏移量为3.3 m。

5 结束语

基于行人航迹推算原理,通过对智能终端输出的加速计、陀螺仪、电子罗盘数据分析,得到行人的步频、步长航向、位置信息,并采用JAVA语言在Android终端实现室内定位系统。该系统在室内环境内能够提供较准确的定位,平均定位误差约占行走总距离的1.3 %;但是由于惯性传感器的误差累计,定位精度会随着距离而降低。下一步在此基础上结合其他定位方法,在定位过程中对行人航迹定位结果进行修正,以减少误差累计。

[1] 刘祺,朱秋月,冯莎.室内定位技术的研究综述[J].计算机时代,2016,11(8):13-15.

[2] 蔡敏敏.基于行人航位推算的室内定位技术综述[J].微型机与应用,2015,27(13):9-11.

[3] 陈春阳,郭英,毕京学.手机陀螺仪与加速度计联合定位初步分析[J].导航定位学报,2014,2(4):74-77.

[4] 张世哲.基于惯性传感器和WiFi的室内定位系统的设计与实现[D].北京:北京邮电大学,2012.

[5] 杨鹏,周立红,陈玲玲,等.基于峰-谷分段积分算法的行走步态周期识别[J].计算机工程,2011,37(23):168-170.

[6] 周圆.基于惯性传感器和Wi-Fi信号的室内定位算法研究[D].大连:大连理工大学,2015.

[7] 王克己.室内定位系统中的行人航迹推算研究[D].北京:北京邮电大学,2012.

[8] NIU X,WANG Q,LI Y,et al.Using inertial sensors in Smartphones for curriculum experiments of inertial navigation technology[J].Education Sciences,2015,5(1):26-46.

[9] 徐伟.基于Android手机的室内定位系统研究与实现[D].武汉:华中师范大学,2014.

[10] 罗利.基于Android的WIFI室内定位技术研究[D].成都:西南交通大学,2014.

[11] 陈伟.基于GPS和自包含传感器的行人室内外无缝定位算法研究[D].合肥:中国科学技术大学,2010.

[12] 顾聪.基于Android平台的室内LBS系统的研究与实现[D].湘潭:湘潭大学,2011.

[13] 陈国良,张言哲,汪云甲,等.WiFi-PDR室内组合定位的无迹卡尔曼滤波算法[J].测绘学报,2015,44(12),:1314-1321.

[14] 孙伟,李婉秋.基于误差修正技术的井下人员MEMS定位方法[J].传感器技术学报,2014,27(7),:898-904.

[15] 张立斌,余彦培.手机室内定位的应用与服务[J].导航定位学报,2014,11(4):27-30.

[16] 王立剑.基于Android平台的手机室内定位及导航的设计与实现[D].青岛:中国海洋大学,2013.

猜你喜欢
航向航迹步长
一种多机协同打击的快速航迹规划方法
基于事件触发的船舶航向逻辑切换自适应控制
大数据分析的船舶航迹拟合研究
风浪干扰条件下舰船航向保持非线性控制系统
基于数据挖掘的船舶航迹自动识别系统
无人救捞艇的航向控制器设计*
基于Armijo搜索步长的BFGS与DFP拟牛顿法的比较研究
一种改进的变步长LMS自适应滤波算法
一种复杂环境下的多假设分支跟踪方法
基于变步长梯形求积法的Volterra积分方程数值解