写在前面
我们小组从策划ibeacon定位开始到现在进行到了最为关键的阶段,我们了解了现在流行的三点定位法和指纹法并进行了大量的讨论,我们得出了很多有用的结论也考虑到了很多可能存在的会影响到探测精度的问题,在此列出希望能有所帮助。
指纹法VS三点定位法
三点定位法是目前最为主流的探测方法,即是将三个ibeacon的RSSI的值与距离进行拟合得到一个合适的函数,并在测量时根据测得的RSSI的值得到大致的距离,最后从三个已经定位好的ibeacon作为圆心出发做三个圆求他们相交的公共点,最后得到的点即为被定位的目标。这种方法思路清晰简单但是也有明显的缺点,因为必然存在的误差可能会导致三个圆各个相交但却并不交于一点,这还是好解决的,如果只是两个圆有交点而另一个圆与这两个圆并无焦点那如何解决?如果三个圆都没有相交呢?三点定位就要考虑到好几种情况,而我们计划的是使用四个点进行定位,相比于三点,这将会有更多的可能等待着我们去考虑,那么对于我们这些不善于数学的人来说,使用指纹法就会方便得多。
指纹法是先将ibeacon进行固定并提前设置坐标,在各个设置好的坐标点上测量该点的RSSI的值并进行保存,最后做成一个庞大的数据库,当我们需要定位时,将测好的RSSI的值与数据库进行比较,最接近的即是我们想要的点。但这种方法的缺点也很明显,就是这种方法更赖于硬件(比起三点定位法来说),他更需要一个示数稳定的蓝牙设备并且需要ibeacon对于地理位置的变化足够敏感,但是很可惜我们的ibeacon设备不是很符合这种要求。综上考虑我们貌似只能使用指纹法,毕竟数学不好是硬伤。
在测量时应该考虑的误差
因为硬件原因,我们测量已经不是很精确了,所以为了尽可能的减小误差我们要考虑到所有产生误差的可能并进行一一排除,我们现在已经发现的会对测量产生影响的误差有如下几点:
-
在拿着手机进行定位时蓝牙信号穿过人体所产生的误差(重要)
我们可以进行一个简单的测试看看在人体遮挡蓝牙信号后会对所测得数据有多么大的影响
正对着ibeacon所测得的数据
背对着ibeacon所测得的数据
为了控制变量我们只旋转了人并没有改变手机的位置,但是我们看到了RSSI的值变化了16点,这对于一个ibeacon来说是致命的,所以我们在测量数据时不能背对任何一个ibeacon。
那么该怎么办呢?我们如果设置了一个7mX7m的正方形,将ibeacon摆放在四个角,我们会意识到无论在正方形的哪里测量因为人在里面都会影响到个别ibeacon的数值显示。所以我们小组进行了大量讨论与实践,发现根本没有完美的解决问题的方法,我们只能用如下方法减小一部分误差:
测量7mX7m的正方形任务目标不变,我们将四个ibeacon放置在正方形中心位置并相互之间有些距离(为了能够明显比较出差异至少需要ibeacon摆成2mX2m的正方形,然后构成的两个正方形中心相同)我们就能够在ibeacon构成的正方形外部正对着正方形的中心进行测量,这样就不会出现人体遮挡的情况了。大概形式如此图所示
此图中的红色为放置的4个ibeacon,棕色为我们在外侧的探测者,他始终面对着正方形的中心,可以看到信号来源的角度中是不会穿过他的身体的。
但是问题仍然存在,我们在测量ibeacon正方形内部的数据是仍然不可避免的遮挡蓝牙信号,而如果ibeacon的距离太近又无法进行精准定位(原因马上说),所以这个问题仍无法得到真正解决,希望有想法的人能够私戳我并一起讨论解决。
接下来我将列出使用此方法进行测量的优点与缺点,先说缺点,我们从上图可以看到在临近正方形外沿的时候,两个绿色的点虽然位置不同但是只对4号ibeacon敏感,其他三个ibeacon与他的距离变化是不明显的,所以我们为了改善这个问题,准备新加入一个权重比的变量,在测得数据与数据库的数据进行比对之前先将测得的四个数据进行比对,如果有一个值明显低于其他的值或是测得的距离值明显低于其他数据测得的距离值,那么把他在对比时所影响结果的比例调高,把距离最远的那个点在对比时所影响结果的比例调低,这样则使测量外沿点的位置更为精确。再说这种方法的优点,这种方法显然将能够定位的有效范围加大了,如果在进行ibeacon定位时的距离极限是10米,那么这种方法可以将原来定位的7X7正方形(10除根号2)扩展为10X10的正方形,但也使得大多数测得的数据都在2M的范围之外,RSSI的值的变化并不明显,误差加大,所以适当控制中间正方形的边长显得十分重要。我们在讨论后觉得如果要用此法进行测量,最好使用极坐标系而不是直角坐标系,在取点时也可以放心向远处取点最后把过远而难以区别的距离切掉,这是我们简单做的圆坐标图。应该做到距离越远取点越密,距离越近取点越疏,角度可以以30度为标准。
-
拿着手机时高度不同所产生的误差
这是需要考虑到的,虽然在正常使用手机过程中我们的身高不同所以这是不能避免的。我们组是使用一根扫帚把来控制高度的(笑)。 -
ibeacon放置在地上所产生的误差(重要)
这个问题长时间的困扰着我们,我们在测试时发现信号在3M之外几乎就探测不到了,并且在有效距离内信号衰减得十分厉害,信号跳动极为鬼畜,严重打击了我们的心态消磨我们的心性。后来在讨论时我们为了排除是我们ibeacon本身的问题决定将ibeacon抬高(之前一直是放在地上的),发现竟然信号能够传到10M之远,所以意识到在进行定位时绝对不能把他放在地上的我们赶快写出了这篇博客,可以放在砖头上进行测量但也要将其放在两个砖头之间保证底部悬空这样信号更好,最好做几个同样高度的支架用来摆放ibeacon。 -
因环境变化等原因导致的拟合函数发生变化
这点不要忘记了,很多时候我们都会忽略这条问题,我们最好进行拟合曲线(即使我们使用的是指纹法)并在测量时更新环境变量 -
ibeacon在放置时放置方向混乱所导致的误差
真实的故事:本来测量的值是-56转过去之后(180度)变成了-61并都保持稳定,所以在放置ibeacon时要当心。 -
ibeacon相互影响所导致的误差
这是对拟合曲线时取点的建议,在对单个ibeacon进行取点拟合时仍应将其余的ibeacon以测量时的形式摆放,误差当然是能少一点少一点。
在数据处理和统计时应该注意的事项
- 在读取RSSI的值时可以多取几组数据去掉过高的几个值(或者直接取较低的几个值)进行计算(可以取平均数也可以按方差动态取值)
- 在处理时动态分配数据权重使得数值更为精确。
- 可以加个按钮进行人为控制误差,比如说当他的数值稳定的时候进行取值测试,当他数值不稳定时就等他稳定下来。(我们组就是这样做的)
- 你以何种方式创建的数据库就应该以何种方式进行定位,比如在创建数据库时是取4个值求平均值,那么在测量时也要取4个值求平均值,这是在控制减小误差。
写在最后
只有在了解之后才会发现实现一个简单的定位要考虑的事情是多么的多,这篇博客可以说是我们小组共同讨论出的“干货”,希望能够帮助到遇到这方面问题的大家。如果这个博客切实的帮助到了你请给个顶让我知道。我们会陆陆续续将我们小组所做的东西以同样的形式上传出来,希望能对大家有帮助。如果有问题请指出让我知道,我会及时更改或者干脆不改了直接删除(笑)。