室内定位这项目已经接近尾声,算法采用的是用kNN计算当前wifi信号和数据库的相似度。将这个相似度作为权值, 用粒子滤波器计算当前所在位置的概率。
目前的方案是:
首先计算当前位置的的RSSI向量和数据库中所有的RSSI向量做对比,这个距离的计算是要将测试集某一个AP的RSSI值减去数据库中对应的AP的RSSI值。
因为之前每个position,每个direction记录了30条数据,就是相当于一个position有120条数据(每个position有4个direction),对于这些数据,我们都有一个关于当前wifi信息和这些数据的距离。对于每个position和每个direction,我们求得到所有的距离的平均数,保存下来。
在空间中随机生成均匀分布一些粒子,粒子包含的信息是(position, direction). 假设有10个position, 每个position 有4个direction, 这样就是可以总共至少有40个粒子,每个粒子带着他们各自的方向和位置。然后先对这些粒子加上一个概率,每个粒子携带的概率都是1/N, N表示总共生成的粒子的数量。
之前求得的每个position和每个direction的距离,将这个距离放到一个高斯函数中,就是距离越小权重越高,距离越到权重越低。
将得到的权重乘以之前每个粒子的概率,得到一个新的概率分布。对于新的概率分布,由于总和不再是1,对此我们要再次对每个粒子的概率除以他们的总和。
对于新的概率分布,我们再随机抽取N个粒子,意思是概率高的粒子容易被选到,概率低的粒子容易被忽略。并且将得到的粒子的分布显示在图像上。
这个项目做到现在困难重重,最后是否能有满意的结果还是未知数。在这就先分享下这段经历吧。
这个项目是从去年8月开始的,当时教授让我用一个RN131EK的模块试着扫描一个地方的wifi信号和强度这些。但是因为模块有很多地方不方便,我跟教授提议用Android手机来做,就这样这个项目就在边上课,边做着其他项目的情况下开始了。
最开始的困难就是Android手机编程,虽然基于Java,但是不

本文介绍了使用kNN算法和粒子滤波进行Android室内定位的方法。通过计算WiFi信号的相似度来确定位置概率,解决节点数量不一致导致的精度问题。项目实施中遇到Android编程挑战和算法选择,目前仍在寻求优化方案。
最低0.47元/天 解锁文章
935

被折叠的 条评论
为什么被折叠?



