详解基于IMU/GPS的行人定位: IMU/GPS Based Pedestrian Localization

在这里插入图片描述
本文介绍一篇使用 IMU/GPS 数据融合的行人定位论文,这里重点是理解本文提出的 Stop DetectionGPS Correction

论文地址为:https://www.researchgate.net/publication/261452498_IMUGPS_based_pedestrian_localization


1. Introduction

低成本的 IMUGPS 结合时可以提供行人准确的位置信息。本文提出了三种计算位置的策略: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=QkakBQkG

其中,∗*表示为四元数相乘G=(0,0,g)T\mathbf{G}=(0,0,g)^TG=(0,0,g)T为地球重力向量。由于载体加速度包含重力加速度和运动加速度,因此这里转换到世界坐标系后要减去重力加速度。

四元数和欧拉角的转换关系:
Ok=(ϕkθkψk)=(atan⁡2(2(qwq1+q2q3),1−2(q12+q22))arcsin⁡(2(qwq2−q3q1))atan⁡2(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),12(q12+q22))arcsin(2(qwq2q3q1))atan2(2(qwq3+q1q2),12(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)=(I0ITSI)Xk1(1:6)+(TS2/2ITSI)ak1W

其中,TsT_sTs是IMU采样时间间隔,I\mathbf{I}I3×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+11j=ksk+s(akbakb2)是加速度局部方差,∥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)=(I0ITSICstop)Xk1(1:6)+(TS2/2ITSI)ak1W

下面是 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=AI00ITsICstop0000Xk1+BTs2/2ITsI0akw+00Q2Euler(Qk)+wk

其中A\mathbf{A}A9×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[(lon⁡1−lon⁡0)∗π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[(lon1lon0)180π]

ygps=1(sin⁡(ϕ)a)2+(cos⁡(ϕ)c)2[(lat⁡1−lat⁡0)∗π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[(lat1lat0)180π]

其中ϕ=π2−lat⁡0+lat⁡12×π180\phi=\frac{\pi}{2}-\frac{\operatorname{lat} 0+\operatorname{lat} 1}{2}\times \frac{\pi}{180}ϕ=2π2lat0+lat1×180π(lon⁡0,lat⁡0)(\operatorname{lon} 0,\operatorname{lat} 0)(lon0,lat0)是参考点位置信息,(lon⁡1,lat⁡1)(\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(mkHX^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×9KkH)Σ^k(I9×9KkH)T+Rk

这里介绍下方向修正,因为我们使用四元数表示方向,四元数修正方程为:
Qk=ΔQk−1Qk\mathbf{Q}_k = \Delta\mathbf{Q}_{k-1} \mathbf{Q}_kQk=ΔQk1Qk

其中ΔQk−1=Euler⁡2Q(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)ΔQk1=Euler2Q(0,0,Kk(mkHX^k)(9)),将欧拉角转换为四元数。

整个算法流程如下:
在这里插入图片描述
最后是本文提出的定位算法在两个测试场景下的效果:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每次maven刷新jdk都要重新设置

pom.xml <java.version>17</java.version> 改为<java.version>1.8</java.version>

【CodeForces - 706D】Vasiliy's Multiset(01字典树)

题干&#xff1a; Author has gone out of the stories about Vasiliy, so here is just a formal task description. You are given q queries and a multiset A, initially containing only integer 0. There are three types of queries: " x" — add integer …

LaTeX常用数学符号总结

本文汇总了在使用LaTeX中常用的数学符号&#xff0c;相关下载资源为&#xff1a;139分钟学会Latex&#xff08;免积分下载&#xff09;。 文章目录1. 希腊字母2. 集合运算符3. 数学运算符4. 三角符号、指数符号、对数符号5. 积分、微分、偏微分6. 矩阵和行列式7. 基本函数、分段…

基本类型优先于装箱基本类型

基本类型与包装类型的主要区别在于以下三个方面&#xff1a; 1、基本类型只有值&#xff0c;而包装类型则具有与它们的值不同的同一性&#xff08;identity&#xff09;。这个同一性是指&#xff0c;两个引用是否指向同一个对象&#xff0c;如果指向同一个对象&#xff0c;则说…

【CodeForces - 827A】String Reconstruction(并查集合并区间,思维)

题干&#xff1a; Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun of him and hid the string s. Ivan preferred making a new string to finding the old one. Ivan knows some information about the string s. …

详解自动驾驶仿真框架OpenCDA: An Open Cooperative Driving Automation Framework Integrated with Co-Simulation

本文介绍一款同时支持协同驾驶开发与测试、自动驾驶全栈开发 和 CARLA-SUMO联合仿真的开源框架 OpenCDA&#xff0c;论文已收录于 ITSC 2021。主要feature有&#xff1a; 支持CARLA-SUMO联合仿真&#xff0c;CARLA端主管环境渲染、传感器模拟、车辆动力&#xff0c;Sumo端主管…

JavaMonitor 监视器

为什么wait(), notify()和notifyAll()必须在同步方法或者同步块中被调用&#xff1f; 当一个线程需要调用对象的wait()方法的时候&#xff0c;这个线程必须拥有该对象的锁&#xff0c;接着它就会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的notify()方法。同样的…

KITTI自动驾驶数据集可视化教程

本文介绍关于自动驾驶数据集KITTI的基本操作&#xff0c;包括Camera和LiDAR可视化教程&#xff0c;源码已上传&#xff1a;https://download.csdn.net/download/cg129054036/20907604 1. 数据准备 将 KITTI 数据 (calib, image_2, label_2, velodyne) 添加到 dataset/KITTI/ob…

【CodeForces - 746E】Numbers Exchange(贪心构造)

题干&#xff1a; Eugeny has n cards, each of them has exactly one integer written on it. Eugeny wants to exchange some cards with Nikolay so that the number of even integers on his cards would equal the number of odd integers, and that all these numbers w…

java synchronized 关键字(1)对象监视器为Object

在java多线程中 synchronized 是非常重要的&#xff0c;也是经常用到的 对于synchronized关键字要注意两点 synchronized对象监视器为Object的时候 synchronized对象监视器为Class的时候 对象监视器为Object 也就是synchronized锁定的是对象 例如下面代码 public class A …

重读经典《Quaternion kinematics for the error-state Kalman filter》

本文将介绍一篇关于 四元数运动学的误差卡尔曼滤波 经典论文。本文结构如下&#xff1a; 第1章四元数定义和性质介绍&#xff0c;包括&#xff1a;加法、减法、乘法&#xff08;矩阵表示&#xff09;、模、幂数、指数运算等。第2章旋转群定义和性质介绍&#xff0c;包括&#…

【CodeForces - 789C】Functions again(最大子段和变形,dp,思维)

题干&#xff1a; Something happened in Uzhlyandia again... There are riots on the streets... Famous Uzhlyandian superheroes Shean the Sheep and Stas the Giraffe were called in order to save the situation. Upon the arriving, they found that citizens are wo…

一步步编写操作系统 55 CPL和DPL入门2

接上节。 图中第132行的jmp指令&#xff0c;段选择子为SELECTOR_CODE&#xff0c;其RPL的值为RPL0&#xff0c;RPL0定义在include/boot.inc中&#xff0c;其值为0。选择子的索引部分值为1&#xff0c;表示对应GDT中第1个段描述符&#xff0c;该描述符的DPL为0&#xff0c;&…

详解停车位检测算法 Vision-Based Parking-Slot Detection: A DCNN-Based Approach and a Large-Scale Benchmark

本文介绍一篇基于深度学习的停车位检测论文&#xff1a;DeepPS&#xff0c;作者同时公开了数据集ps2.0&#xff0c;工作很扎实&#xff0c;对于入门停车位检测很有帮助&#xff0c;论文发表在 IEEE T-IP 2018。 项目链接为&#xff1a;https://cslinzhang.github.io/deepps/ 0…

【CodeForces - 789D】Weird journey(思维,图的性质,tricks,有坑)

题干&#xff1a; Little boy Igor wants to become a traveller. At first, he decided to visit all the cities of his motherland — Uzhlyandia. It is widely known that Uzhlyandia has n cities connected with m bidirectional roads. Also, there are no two roads…

Monitor(管程)是什么意思?Java中Monitor(管程)的介绍

本篇文章给大家带来的内容是关于Monitor&#xff08;管程&#xff09;是什么意思&#xff1f;Java中Monitor&#xff08;管程&#xff09;的介绍&#xff0c;有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。 monitor的概念 管程&#x…

详解经典GPS辅助惯性导航论文 A GPS-aided Inertial Navigation System in Direct Configuration

本文介绍一篇 IMU 和 GPS 融合的惯性导航论文&#xff0c;重点是理解本文提出的&#xff1a;Dynamical constraints update、Roll and pitch updates 和 Position and heading updates。 论文链接为&#xff1a;https://www.sciencedirect.com/science/article/pii/S166564231…

【POJ - 2151】Check the difficulty of problems(概率dp)

​​​​题干&#xff1a; Organizing a programming contest is not an easy job. To avoid making the problems too difficult, the organizer usually expect the contest result satisfy the following two terms: 1. All of the teams solve at least one problem. 2.…

jsp之九大内置对象与四大域对象

一,什么是内置对象? 在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创建就会特别的繁琐.SUN公司因此在设计jsp时,在jsp页面加载完毕之后自动帮开发者创建好了这些对象,开发者只需要使…

详解停车位检测论文:Attentional Graph Neural Network for Parking-slot Detection

本文介绍一篇注意力图神经网络用于停车位检测论文&#xff0c;论文已收录于 RA-L2021。在之前的基于卷积神经网络的停车位检测方法中&#xff0c;很少考虑停车位标记点之间的关联信息&#xff0c;从而导致需要复杂的后处理。在本文中&#xff0c;作者将环视图中的标记点看作图结…