引言
在野外一些林木茂密、岩石多布的地带,或者城市里高楼林立的地区,全球卫星定位导航系统(Global Navigation Satellite System, GNSS)会因为信号遮挡出现定位精度下降甚至无法进行方位解算的情况,因此近年来针对步行者自身运动特点提出的自包含定位方案成为研究热点。所采用的方案多为利用可穿戴传感器完成步行者航位推算(Pedestrian Dead Reckoning,PDR),通过在步行者腰间穿戴的传感器提取步行者的运动信息[1],传至计算机上进行步行者航位推算; 通过在步行者脚上设置陀螺仪与三轴加速度计等提取步行者的步行信息传至计算机上,利用Matlab软件进行3D图像处理[2];采用粒子滤波和概率神经网络对步行者的运动信息进行识别和筛选,提高了步行者航位推算的精度[3]。但由于这些设计的步行者航位信息是在计算机上经过专门软件处理后得到的,其实用性不是很高,同时在室外使用时,计算机的便携程度不高,因此开发一套便携式、实用性高的步行者航位推算装置是十分必要的。
针对以上设计存在的缺点,同时结合步行者航位推算的特点,设计出一套便携实用性高的步行者航位推算装置。它使用三轴加速度计与电子罗盘集成芯片LSM303DLHC以及陀螺仪集成芯片MPU3050,多传感器保证了步行者运动信息采集的准确性,同时采用具有ARM CortexM3内核的单片机STM32F103RBT6作为数据处理单元,将实时处理的步行者航位推算信息显示于TFTLCD上,具有较高数据处理精度的同时亦能满足便携性与实用性的需求。
1 系统组成与工作原理
该步行者航向推算装置主要由三维传感器模块、数据转换模块与处理模块组成,具体的组成框图如图1所示。
图1 系统组成框图
三维传感器模块上分为三轴加速度计与电子罗盘集成芯片LSM303DLHC、陀螺仪集成芯片MPU3050,以及用于数据处理的单片机STM32F103RBT6。实际工作时,三轴传感器模块置于步行者腰间,三维加速度计用于采集前左上三个方向上的加速度,用于计算模块的俯仰角与倾斜角,以及步行者的步数统计与步幅估计;电子罗盘采集步行者实时航向角数据;陀螺仪测出单位时间内三轴角速度以校正计算出的俯仰角与倾斜角;单片机负责对传感器的原始数据进行转换处理,采用串口与数据处理模块进行通信。数据处理模块核心也采用了单片机STM32F103RBT6,在与三维传感器模块串口通信的同时,将航位推算所需的数据通过FAT32文件系统存于SD卡中。显示模块采用的是TFTLCD ILI9320,当步行者需要查看当前的航位信息时,单片机可通过FAT32文件系统从SD卡中调出原始数据,进行航位推算处理,最终将步行者的航迹显示于TFTLCD上。
2 硬件设计
2.1 主控芯片及外围电路设计
主从单片机都采用ST公司生产的具有ARM CortexM3内核的工业级控制芯片STM32F103RBT6,它具有72 MHz时钟主频,内部ROM存储容量为128 KB,RAM存储容量为20 KB。它具有8个定时计数器,3个SPI、2个I2C总线、3个UART、1个USB、1个CAN总线等通信端口,这些通信端口完全能满足本系统在设计过程中的需要。
STM32F103RBT6芯片由3.3 V电压供电,而外部电源为5 V电池,因此采用降压芯片AMS11173.3,它能将输出电压降低并且稳定在3.3 V,精度为1%。
2.2 三维传感器模块设计
LSM303DLHC芯片可在2.16~3.6 V低电压下正常工作,其内置三轴加速度计,量程为±2g~±16g。电子罗盘量程可为±1.3~±8.1 gauss,单片机通过SCL、SDA引脚与其进行I2C总线通信,编程寄存器CTRL_REG4内容可设置三轴加速度计量程,编程寄存器CRB_REG_M内容可设置电子罗盘量程,其外围电路如图2所示。
图2 LSM303DLHC外围接口原理图
MPU3050能在2.1~3.6 V低电压下正常工作,其内置的陀螺仪可测出三轴方向上±250~±2000°/s的角位移,通过编程其寄存器DLPF_FS可以选择陀螺仪工作的量程,同时单片机通过I2C总线,可从X_OFFS_USRH/L、Y_OFFS_USRH/L、Z_OFFS_USRH/L这6个数据寄存器读出三轴原始数据,其外围电路如图3所示。
图3 MPU3050外围接口原理图
2.3 数据存储及显示模块设计
负责航位推算的主单片机与三维传感器模块上的从单片机通过串口进行通信,它们被设置为相同的波特率。由于STM32F103RBT6的内置RAM容量只有20 KB,而航位推算过程中使用的数据容量远大于其内存容量,所以采用FAT32文件系统,把主单片机接收的数据存入SD卡中,单片机通过SPI接口存入或读出数据,数据存储模块的原理图如图4所示。
图4 数据存储模块原理图
显示模块采用了Ilitek公司生产的TFTLCD ILI9320,分辨率为320×240,正常工作电压为3.3 V,采用16位双向数据线,单片机通过WR引脚向TFTLCD里写入数据,通过RD引脚读出数据,显示模块的原理图如图5所示。
图5 显示模块原理图
3 软件设计
3.1 航迹推算原理
步行者的运动通常可以认为是二维运动[4],步行者一个步伐周期内的两个落脚点间的连线可以认为是直线,数据采样时间为一个步伐周期时,已知步行者上一采样周期末的方位信息与本次采样周期内步伐长度与航向角信息,可以推算出本次采样周期末步行者的方位信息。以二维xy坐标平面表示,设步行者初始时刻的方位为(x0,y0),任意时刻t的方位为(xt,yt),步行者每个采样周期内的步长为S,航向角为A,则按照一个步伐周期T内采样,根据递推原则,任意时刻t步行者的方位如下:
3.2 航向角计算
由三轴加速度计测出的前左上三个方向上的加速度数Ax、Ay、Az可以计算出三维传感器模块的俯仰角(以θ1表示)和倾斜角(以θ2表示)为[5]:
式中的Ax、Ay、Az为经过最小二乘法[6]校正后的三轴加速度值,由于传感器模块置于步行者腰间,步行者在走动的时候不可避免地引入振动干扰,造成俯仰角与倾斜角解算误差,因此采用互补滤波,融合陀螺仪数据,降低因振动干扰带来的解算误差。设陀螺仪经过互补滤波算法处理后,三轴的数据分别为Gx、Gy、Gz,融合后三个方向上的加速度为A′x、A′y、A′z,给三个方向上加速度赋予的权重为PxA、PyA、PzA,给陀螺仪三轴数据的权重为PxG、PyG、PzG,则可以用下式表示:
通过降低加速度值的权重,提高陀螺仪三轴数据的权重可以取得较好的滤波效果,将处理完的加速度值代入式(3),可以得到去噪后的俯仰角与倾斜角。结合电子罗盘测出的三轴磁场分量Mx、My、Mz,设在经过倾角补偿[7]后投影到xy水平面上的磁场分量为Hx、Hy,则步行者的航向角A可以由下式得到:
式(4)中的Mx、My、Mz为经过椭球校正[8]后的三轴磁场分量。
3.3 步数统计与步幅估计
由于三维传感器模块是置于步行者腰间的,加速度计探测到竖直方向加速度随着步行者的走动周期性变化,因此采用竖直方向加速度阈值判断的方法来统计步行者的行进步数。同时,步行者的步频与步幅间存在近似的线性关系,步行者的步频(单位为Hz)与步幅(单位为m)可以用以下模型[9]来估计:
式中,S为步行者实时步幅,F为步行者实时步频。通过在数据处理终端统计步行者的实时步频,可以根据式(5)来判断步行者的实时步幅,从而减小步行者行进距离统计误差。
4 测试结果及分析
实地测试结果如图6所示,测试场地为学校内部的标准田径场,田径场包含的两条直道一条为东西走向,另一条为西东走向,测试的时候选取标准田径场的第5跑道,步行实际长度为430 m,实际步数为560步,经航位推算测得的步数为587步,测得的步行距离为428.5 m,步数统计相对误差为4.8%,距离统计相对误差小于1%。与实际路线相比,最大偏移为5 m,出现在东西走向的直线跑道上,偏移区间长度为85 m,航向角测得的误差在±2°~±4°以内,说明以上方法设计的步行者航位推算装置有较高的精确性、实时性与可靠性,能够满足实际应用需求。
图6 测试结果示意图
结语
本文介绍了基于STM32F103RBT6单片机的步行者航位推算装置的硬件设计与采用的软件算法,完成了对多传感器数据的采集和航迹推算。采用单片机与微惯性器件搭建的系统,能满足小型化、实用性、便携性及易于搭建的应用要求,经过实地实验,其测算精度亦能满足实际需求。