2018.10.23 Update:
最近好多同学问我怎么采集数据,怎么实现最基础的定位,我整理了一个基础的WiFi, iBeacon采集端和KNN实现的python定位方法,放在Github上给萌新们参考,地址请戳在这里
时间过得真快,三四年过去了。
也就是我做室内定位已经好几年,不成器,没做出什么成果。
不过踩了不少坑,在这里做个总结,如果有人翻到这篇博客,就当科普也好,如果恰好你也是这个方向,能避免你踩些坑,有些方向的作用那也就值了。
ps.可能持续更新。。。
1室内定位的主要种类
这里要讲的室内定位,主要针对我自己做过或者理解的内容,主要是基于手机平台的行人的室内定位。至于机器人的SLAM通过的激光雷达等部分暂时不敢妄议。
目前来看,从定位信号来源大致可以分为:
1.基于无线信号发射设备的WiFi,蓝牙(iBeacon),RFID,UWB
这一类定位方式,主要通过手机或者特定接收端,WiFi和蓝牙普通的手机具有接受模块,RFID部分手机具有,UWB需要专门的接收设备,当然也有号称把UWB设备集成到手机里面的硬件公司,这个目前就不再我讨论的范围里面了。通过接收以上设备发射的无线信号进行定位,就好像GPS定位一样。
2.基于惯性导航的(IMU,MEMS)的室内定位
大家都知道惯导随着时间误差会不断积累,所以这个方法往往不会单独使用,而是和其他技术一起进行融合。由其他的绝对定位技术提供校正信息,而惯导的信息提供连续的定位和起到对其他位置的平滑作用。针对行人而言,如果以手机作为定位平台,基本上就是所谓的微机械的MEMS,基本所有手机都具备。
3.基于图片(视频)的计算机视觉定位
这个方法,实话说到目前为止我还没有真正做过。但是Google2017 I/O上面,通过Tango实现了这个通过机器学习及计算机视觉的VPS(Visual positioning service)据说理论精度可达厘米级别,不可谓不可怕。关于我对这个技术的理解,我会放在后面定位方法里面来讲,因为我觉得那样更能看出其特点。
4.基于地磁
由于室内环境复杂多变,通常各个不同的位置点的地磁场强度也不一样。但是一个磁场信号源显然不足以定位,所以通常方式是在行走道路上对磁场变化轨迹进行匹配,如下图所示为我持手机在不同时间走过同一段路径时候的磁场数据,横轴为时间,可以看出来,在同一条路径上存在变化一致性。通过这种匹配,也可以进行定位,通常采用的方法为DTW.具体算法细节就不细讲了,感兴趣的童鞋请自行实现。
2. 室内定位的主要方法论
2.1.基于无线信号的三边(三角定位)
这个方法来自于传统的定位方法,类似GPS,假如我们能够获得我们待定位点相对于其它基站的距离或者角度,通过交会列多元方程组求解的方法可以求出我们所在的位置,当然了,实际情况中往往不是求解刚好够定位的方程组,而是用多余的观测值然后利用最小二乘估计方法来估计位置。以下图为例,对于三个基站,我们如果能够获得信号发射和接受的时间差,那么就可以通过时间差和光速传播来求取距离从而获得定位。
但是,对于普通的WiFi,蓝牙信号,要想求出从信号发射到信号接收之间的时间差,基本是不可能的。因为你要保持两边的时间同步,才能通过发射时间和接收时间来求取时间差,考虑到c光速的巨大,时间差一点点距离就能差非常远。所以基本不可能通过时间差的方法来进行定位。
那么室内定位里面的三边定位是怎么实现的呢?
我们知道,只要求取当前目标和各个基站的距离,就能求解目标位置。而这个距离既然不能通过时间和光速之积来获得,我们可以通过另一个方法来获得,那就是信号衰减模型,如下图所示,我们知道在离线状态下,无线信号强度在空间中传播随着距离衰减! 而这个无线信号强度对于手机上的接收器来说是可测的!那么根据测试到的信号强度,是不是可以根据下图的衰减模型(公式)来反推出距离呢,那么这样不就又可以用三边定位了。
当然,这个问题的实际在于:这种信号衰减是针对理想状况啊(真空,无反射)。那么在实际的室内复杂环境下,信号在不断的折射反射(多路径效应)下,这个模型可能就出现了波动了。也就是说你通过测量信号强度来反推距离很大可能带有很大误差,同时由于不同传感器的信号特征不同,模型参数也不一而足,导致这个方法的定位效果其实不太理想。
2.2 MEMS的定位方法
传统的捷联式惯导中,通过惯性器件测量各个方向上的加速度然后再时间上进行积分,就可以求取目标的移动。但是在行人中,mems比较差的精度和姿态随意性,会导致积分快速发散,精度完全不可用。
所以,在行人的室内定位中的mems使用,基本都基于航位推算(PDR),也就是现在基本很多手机都具有的,通过加速度计算你行走的步数,然后通过估计你每步的长度从而获得行人的移动距离。怎么计算行人的步数呢,如下图所示,行人携带手机在行走过程中,由于重心随着前进的节奏呈现周期性变化。通过这个变化的监测,自然可以知道行人的前进步伐。
当然有距离还不够,还需要知道移动方向才能定位,MEMS中自然是还有陀螺仪和地磁传感器,通过这两个传感器和加速度的结合,可以获得前进方向的推算,通常通过滤波组合。不过方向的推算不是很准,所以也有人在使用pdr时,只使用其距离来组合其他的定位方法。
2.3 指纹定位方法
这个方法还是针对无线信号定位的。2.1中有说道,无论是通过时间还是信号模型衰减求取距离来进行三边定位,都无法完全结果室内信号的波动和环境的影响。
所以另外一个经典的室内定位方法,指纹定位方法被提出来了。所谓指纹定位,我的理解,好比*部门采集了所有人的指纹数据,由于其独一无二的特性,在破案时候通过匹配数据库中的指纹和嫌疑人的指纹来进行查找。
室内定位中的指纹法也是这样,首先在室内中收集很多的指纹数据(无线信号数据,通常定义一个个格网点来采集无线强度:对应每个人的指纹),当需要定位的时候,通过手机采集到的无线信号和预先收集的指纹数据库对比,找出最相似的指纹的位置作为定位的位置。就好比通过嫌疑人的指纹来寻找他的身份一样。
前面提到Google在今年的tango里面提出了vrs,其实我的理解。也是一种指纹匹配,不过这里的指纹特点变成了视觉特征点,匹配过程的输入变成了图片(视频),通过与数据库中的视觉特征点+深度传感器来进行定位。其中用上了高大上的机器学习^_^。
当然,这个理解如果有误还请懂行的童鞋指出,毕竟这一块我不是很熟。
2.4 模式识别方法
这个方法其实不在很多归类中出现,不过我也简单讲一讲。最早我在duke大学的一篇paper中看见。
刚才说道,单一定位方式各有优缺点,所以通常采用融合的方法,通常采用kalman滤波 particle filter等融合几种传感器数据。所谓模式识别方法,就是某些行为过程中,手机mems数据会产生特定的特征,例如坐电梯时候的加速度显然和走路以及静止时候的加速度变化有非常明显的差别。那么通过这种模式的识别,识别出你正在坐电梯(称之为landmark),这个位置可以作为pdr的纠正或者起始位置。
2.5 融合定位
融合多种方式的定位,往往才是效果好的。但是融合方法很难普适,因为不同的地方的数据源,不同手机平台的差异性。但是还是作为重要的方法,主要通过kalman ,particle filter进行融合。这个方面后面如果有时间。我单独开一篇讲讲融合定位,也可以把代码放到github上。
融合定位中除了通过以上所述方法/信号源的融合,还会有加上地图匹配的。也就是通过地图限制行进路径的偏差。但是相对于车辆必须开在公路上,地图匹配在室内的情况则更为复杂。关于室内地图的简单定义和制作,可以参见我博客中的另外两篇文章《室内地图1》《室内地图2》
update:整理了一个卡尔曼滤波和粒子滤波的融合算法模拟器demo,感兴趣的童鞋可以看这里,然后下载代码自己试试看。
3.室内定位相关知识图谱
这一小节预计整理一下,室内定位中涉及到的方法论和名字。当然,也并非其中的全部楼主都有做了,比如说indoorGM的室内地图,其实光是定义和生产地图就已经是很大的一方面了。
只是为了全面,供有兴趣的童鞋研究,我也将我所知的写入了。
以上全凭记忆写成,简单科普。如有错漏,敬请指正。