本文介绍一篇使用 IMU/GPS
数据融合的行人定位论文,这里重点是理解本文提出的 Stop Detection
和 GPS Correction
。
论文地址为:https://www.researchgate.net/publication/261452498_IMUGPS_based_pedestrian_localization
1. Introduction
低成本的 IMU
和 GPS
结合时可以提供行人准确的位置信息。本文提出了三种计算位置的策略:IMU数据二次积分
、零速更新(Zero-velocity Update:ZUPT)
、IMU和GPS融合的扩展卡尔曼滤波(EKF)
。
在使用GPS
进行定位时,容易受到高建筑物、山脉信号遮挡
的影响,同时 GPS
的定位误差也比较大(1~10m左右)。而 IMU
则不会受到环境的影响,通过对加速度
和角速度
进行积分便可以得到位置、速度和方向信息
。然而,IMU
积分导致的累计误差会随着时间不断增加,漂移现象往往非常严重。
本文研究目的是追踪室外行人,如上图1所示,脚上安装有Xsens
的IMU,可以测量行人的加速度和角速度, GPS
模块用来获取 GPS
位置信息。
下面介绍行人定位中使用到的两个坐标,如下图2所示:惯性传感器坐标
BBB (有时也称为载体坐标),世界坐标WWW(有时也称为导航坐标)。在世界坐标中,XXX 轴指向地球表面 East
方向,YYY 轴指向地球表面 North
方向,Z
轴根据右手法则向上(其实这里使用的是ENU
坐标)。RBWR^W_BRBW表示为从载体坐标到世界坐标的旋转变换(例如将载体坐标下的加速度和角速度转换为世界坐标下的加速度和角速度)。
2. Basic Position Calculation
下面介绍计算位置的最基础方法,由于使用的是Xsens
的IMU,传感器可以直接输出方向信息,这里用单位四元数Q=(qw,q1,q2,q3)\mathbf{Q}=(q_w,q_1,q_2,q_3)Q=(qw,q1,q2,q3)来表示RBWR^W_BRBW。
状态向量定义为:
Xk=(PkVkOk)T=(xkykzkx˙ky˙kz˙kϕkθkψk)T\begin{aligned} X_{k} &=\left(\mathbf{P}_{k} \mathbf{V}_{k} \mathbf{O}_{k}\right)^{T} \\ &=\left(\begin{array}{lllll}x_{k} & y_{k} & z_{k} & \dot{x}_{k} & \dot{y}_{k} & \dot{z}_{k} & \phi_{k} & \theta_{k} & \psi_{k}\end{array}\right)^{T} \end{aligned}Xk=(PkVkOk)T=(xkykzkx˙ky˙kz˙kϕkθkψk)T
其中Pk=(xk,yk,zk)T\mathbf{P}_{k} = (x_{k} ,y_{k} ,z_{k})^TPk=(xk,yk,zk)T是行人在世界坐标的位置,Vk=(x˙k,y˙k,z˙k)T\mathbf{V}_{k}=( \dot{x}_{k} ,\dot{y}_{k} , \dot{z}_{k})^TVk=(x˙k,y˙k,z˙k)T是行人脚步运动速度,Ok=(ϕk,θk,ψk)T\mathbf{O}_{k}=(\phi_{k}, \theta_{k}, \psi_{k})^TOk=(ϕk,θk,ψk)T是方向欧拉角。
载体加速度akBa^B_{k}akB到世界坐标加速度akWa^W_{k}akW的转换关系为:
akW=Qk∗akB∗Qk′−Ga_{k}^{W}=\mathbf{Q}_{k} * a_{k}^{B} * \mathbf{Q}_{k}^{\prime}-GakW=Qk∗akB∗Qk′−G
其中,∗*∗表示为四元数相乘
,G=(0,0,g)T\mathbf{G}=(0,0,g)^TG=(0,0,g)T为地球重力向量。由于载体加速度包含重力加速度和运动加速度,因此这里转换到世界坐标系后要减去重力加速度。
四元数和欧拉角的转换关系:
Ok=(ϕkθkψk)=(atan2(2(qwq1+q2q3),1−2(q12+q22))arcsin(2(qwq2−q3q1))atan2(2(qwq3+q1q2),1−2(q22+q32)))\begin{aligned} \mathbf{O}_{k}&=\left(\begin{array}{c}\phi_{k} \\ \theta_{k} \\ \psi_{k}\end{array}\right) =\left(\begin{array}{c}\operatorname{atan} 2\left(2\left(q_{w} q_{1}+q_{2} q_{3}\right), 1-2\left(q_{1}^{2}+q_{2}^{2}\right)\right) \\ \arcsin \left(2\left(q_{w} q_{2}-q_{3} q_{1}\right)\right) \\ \operatorname{atan} 2\left(2\left(q_{w} q_{3}+q_{1} q_{2}\right), 1-2\left(q_{2}^{2}+q_{3}^{2}\right)\right)\end{array}\right) \end{aligned}Ok=⎝⎛ϕkθkψk⎠⎞=⎝⎛atan2(2(qwq1+q2q3),1−2(q12+q22))arcsin(2(qwq2−q3q1))atan2(2(qwq3+q1q2),1−2(q22+q32))⎠⎞
根据二次积分,可以获得位置和速度信息,计算方程如下:
Xk(1:6)=(PkVk)=(II∗TS0I)Xk−1(1:6)+(TS2/2∗ITS∗I)ak−1W\begin{aligned} X_{k}(1: 6)=\left(\begin{array}{l}\mathbf{P}_{k} \\ \mathbf{V}_{k}\end{array}\right) &=\left(\begin{array}{cc}\mathbf{I} & \mathbf{I} * T_{S} \\ \mathbf{0} & \mathbf{I}\end{array}\right) X_{k-1}(1: 6) +\left(\begin{array}{c}T_{S}^{2} / 2 * \mathbf{I} \\ T_{S} * \mathbf{I}\end{array}\right) a_{k-1}^{W} \end{aligned}Xk(1:6)=(PkVk)=(I0I∗TSI)Xk−1(1:6)+(TS2/2∗ITS∗I)ak−1W
其中,TsT_sTs是IMU采样时间间隔,I\mathbf{I}I是 3×33\times33×3的单位阵,根据上述方程,就能得到行人在不同时刻的位置。然而,由于IMU本身固有的漂移现象,并不能得到可靠的位置信息。图3是数据采集时行人走过的真实运动轨迹,图4是计算轨迹,可以看到计算后的轨迹漂移现象非常严重。
3. Error Correction By Stop Detection
为了解决漂移现象,本文提出了 Stop Detection
方法。行走时,脚部其实是经历了一个静态阶段
和运动阶段
相互变换的过程,静态阶段速度应为0
,因此当检测到静态阶段时应将速度设为0,这样就可以部分修正漂移现象,这种修正方法也被称为 zero-velocity updates (ZUPTs)
。
作者使用了一个多条件的静态检测算法,具体如下:
其中,∥ak∥=[akb(1)2+akb(2)2+akb(3)2]0.5\left\|\mathbf{a}_{k}\right\|=\left[a_{k}^{b}(1)^{2}+a_{k}^{b}(2)^{2}+a_{k}^{b}(3)^{2}\right]^{0.5}∥ak∥=[akb(1)2+akb(2)2+akb(3)2]0.5是加速度模,σakb2=12s+1∑j=k−sk+s(akb−akb‾2)\sigma_{a_{k}^{b}}^{2}=\frac{1}{2 s+1} \sum_{j=k-s}^{k+s}\left(a_{k}^{b}-\overline{a_{k}^{b}}^{2}\right)σakb2=2s+11∑j=k−sk+s(akb−akb2)是加速度局部方差,∥wk∥=[wkb(1)2+wkb(2)2+wkb(3)2]0.5\left\|{w}_{k}\right\|=\left[w_{k}^{b}(1)^{2}+w_{k}^{b}(2)^{2}+w_{k}^{b}(3)^{2}\right]^{0.5}∥wk∥=[wkb(1)2+wkb(2)2+wkb(3)2]0.5是角速度模。
当同时满足以上条件时,就判定为静止,即 Cstop =C1&C2&C3C_{\text {stop }}=C 1 \& C 2 \& C 3Cstop =C1&C2&C3。此时,位置和速度更新方程如下 (这里需要提醒的时,当判定为静止时,CstopC_{\text{stop}}Cstop应为0才能保证速度初始化为0,这里与原文处理有一点不同)。
Xk(1:6)=(PkVk)=(II∗TS0I∗Cstop)Xk−1(1:6)+(TS2/2∗ITS∗I)ak−1W\begin{aligned} X_{k}(1: 6)=\left(\begin{array}{l}\mathbf{P}_{k} \\ \mathbf{V}_{k}\end{array}\right) &=\left(\begin{array}{cc}\mathbf{I} & \mathbf{I} * T_{S} \\ \mathbf{0} & \mathbf{I} *C_{\text{stop}}\end{array}\right) X_{k-1}(1: 6) +\left(\begin{array}{c}T_{S}^{2} / 2 * \mathbf{I} \\ T_{S} * \mathbf{I}\end{array}\right) a_{k-1}^{W} \end{aligned}Xk(1:6)=(PkVk)=(I0I∗TSI∗Cstop)Xk−1(1:6)+(TS2/2∗ITS∗I)ak−1W
下面是 stop detection
结果和计算后的轨迹,漂移现象得到了很大的改善。
4. Error Correction By GPS
IMU导航的主要缺陷是其误差会随着时间不断累加
。相反,GPS不会出现很大漂移现象。因此常见导航系统为GPS/IMU组合导航
,本文作者提出使用EKF
来修正IMU定位误差。
已知系统状态转移模型为:
X^k=(P^kV^kO^k)=(II∗Ts00I∗Cstop0000)⏟AXk−1+(Ts2/2∗ITs∗I0)⏟Bakw+(00Q2Euler(Qk))+wk\hat{\mathbf{X}}_{k}=\left(\begin{array}{c}\hat{\mathbf{P}}_{k} \\ \hat{\mathbf{V}}_{k} \\ \hat{\mathbf{O}}_{k}\end{array}\right)=\underbrace{\left(\begin{array}{ccc}\mathbf{I} & \mathbf{I} * T s & \mathbf{0} \\ \mathbf{0} & \mathbf{I} * C_{s t o p} & \mathbf{0} \\ \mathbf{0} & \mathbf{0} & \mathbf{0}\end{array}\right)}_{\mathbf{A}} \mathbf{X}_{k-1}+\underbrace{\left(\begin{array}{c}T_{s}^{2} / 2 * \mathbf{I} \\ T_{s} * \mathbf{I} \\ \mathbf{0}\end{array}\right)}_{B} \mathbf{a}_{k}^{w}+\left(\begin{array}{c}\mathbf{0} \\ \mathbf{0} \\ Q 2 \operatorname{Euler}\left(\mathbf{Q}_{k}\right)\end{array}\right)+\mathbf{w}_{k}X^k=⎝⎛P^kV^kO^k⎠⎞=A⎝⎛I00I∗TsI∗Cstop0000⎠⎞Xk−1+B⎝⎛Ts2/2∗ITs∗I0⎠⎞akw+⎝⎛00Q2Euler(Qk)⎠⎞+wk
其中A\mathbf{A}A是9×99\times99×9的状态转移矩阵,B\mathbf{B}B是控制矩阵,wk\mathbf{w}_{k}wk是过程噪声。
测量模型为:
zk=HX^k+nk\mathbf{z}_{k}=\mathbf{H}\hat{\mathbf{X}}_{k}+\mathbf{n}_{k}zk=HX^k+nk
其中zk\mathbf{z}_{k}zk是预测测量,Hk\mathbf{H}_{k}Hk是测量矩阵,nk\mathbf{n}_{k}nk是测量噪声。
已知GPS
输出为:经度、纬度、高度、航向和速度信息
。一般只使用经度、纬度和航向信息
,因为GPS的高度和速度信息噪声很大。这里需要对位置信息进行坐标转换处理,转换到世界坐标,坐标转换方程为:
xgps=cos(ϕ)1(sin(ϕ)a)2+(cos(ϕ)c)2[(lon1−lon0)∗π180]x_{g p s} = \cos (\phi) \sqrt{\frac{1}{\left(\frac{\sin (\phi)}{a}\right)^{2}+\left(\frac{\cos (\phi)}{c}\right)^{2}}}\left[(\operatorname{lon} 1-\operatorname{lon} 0) * \frac{\pi}{180}\right]xgps=cos(ϕ)(asin(ϕ))2+(ccos(ϕ))21[(lon1−lon0)∗180π]
ygps=1(sin(ϕ)a)2+(cos(ϕ)c)2[(lat1−lat0)∗π180]y_{g p s} = \sqrt{\frac{1}{\left(\frac{\sin (\phi)}{a}\right)^{2}+\left(\frac{\cos (\phi)}{c}\right)^{2}}}\left[(\operatorname{lat} 1-\operatorname{lat} 0) * \frac{\pi}{180}\right]ygps=(asin(ϕ))2+(ccos(ϕ))21[(lat1−lat0)∗180π]
其中ϕ=π2−lat0+lat12×π180\phi=\frac{\pi}{2}-\frac{\operatorname{lat} 0+\operatorname{lat} 1}{2}\times \frac{\pi}{180}ϕ=2π−2lat0+lat1×180π,(lon0,lat0)(\operatorname{lon} 0,\operatorname{lat} 0)(lon0,lat0)是参考点位置信息,(lon1,lat1)(\operatorname{lon} 1,\operatorname{lat} 1)(lon1,lat1)是测量点坐标,(a,c)(a,c)(a,c)是地球长半轴和短半轴半径。
这里实际测量值为:
mk=(xgps,ygps,ψgps)T\mathbf{m}_k=(x_{gps},y_{gps},\psi_{gps})^Tmk=(xgps,ygps,ψgps)T
根据测量值,可以得到测量矩阵为:
H=(100000000010000000000000001)\mathbf{H}=\left(\begin{array}{ccccccccc}1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1\end{array}\right)H=⎝⎛100010000000000000000000001⎠⎞
卡尔曼更新方程为:
Xk=X^k+Kk∗(mk−HX^k)\mathbf{X}_{k}=\hat{\mathbf{X}}_{k}+\mathbf{K}_{k} *\left(\mathbf{m}_{k}-\mathbf{H} \hat{\mathbf{X}}_{k}\right)Xk=X^k+Kk∗(mk−HX^k)
其中,卡尔曼增益Kk\mathbf{K}_{k}Kk计算方程为:
Kk=Σ^kHT(HΣ^kHT+Rk)−1\mathbf{K}_{k}=\hat{\mathbf{\Sigma}}_{k} \mathbf{H}^{T}\left(\mathbf{H} \hat{\mathbf{\Sigma}}_{k} \mathbf{H}^{T}+\mathbf{R}_{k}\right)^{-1}Kk=Σ^kHT(HΣ^kHT+Rk)−1
其中Σ^k\hat{\mathbf{\Sigma}}_kΣ^k是状态协方差矩阵,预测时协方差矩阵计算方程
为:
Σ^k=AΣ^kAT+Nk\hat{\mathbf{\Sigma}}_k=\mathbf{A}\hat{\mathbf{\Sigma}}_k \mathbf{A}^T + \mathbf{N}_kΣ^k=AΣ^kAT+Nk
GPS更新时协方差矩阵计算方程
为:
Σk=(I9×9−KkH)Σ^k(I9×9−KkH)T+Rk\boldsymbol{\Sigma}_{k} = (\mathbf{I}_{9 \times 9}- \mathbf{K}_k \mathbf{H}) \hat{\mathbf{\Sigma}}_k (\mathbf{I}_{9 \times 9}- \mathbf{K}_k \mathbf{H})^T + \mathbf{R}_kΣk=(I9×9−KkH)Σ^k(I9×9−KkH)T+Rk
这里介绍下方向修正,因为我们使用四元数表示方向,四元数修正方程为:
Qk=ΔQk−1Qk\mathbf{Q}_k = \Delta\mathbf{Q}_{k-1} \mathbf{Q}_kQk=ΔQk−1Qk
其中ΔQk−1=Euler2Q(0,0,Kk∗(mk−HX^k)(9))\Delta \mathbf{Q}_{k-1}=\operatorname{Euler} 2 Q\left(0,0, \mathbf{K}_{k} *\left(\mathbf{m}_{k}-\mathbf{H} \hat{\mathbf{X}}_{k}\right)(9)\right)ΔQk−1=Euler2Q(0,0,Kk∗(mk−HX^k)(9)),将欧拉角转换为四元数。
整个算法流程如下:
最后是本文提出的定位算法在两个测试场景下的效果: