基于Android的室内定位

来源:互联网 发布:云计算架构图 编辑:程序博客网 时间:2024/04/28 15:29

室内定位这项目已经接近尾声,算法采用的是用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,但是不完全像Java,有很多自带的类库并且经常有莫名其妙的BUG。有时候解决一个BUG得花上一周的时间。

        后来就是算法的选择,单纯基于wifi信号的精确度虽然不高,但是可以适用长距离定位,惯性传感器(虽然现在还没有用到这个)有着比较严重的漂移误差,但是适合短距离定位,原本想着要是两个融合着做肯定精度会上去,但是现在还只是做wifi的部分。

         kNN算法在室内定位上应用极其广泛,可能是分类的精度问题,kNN在室内定位上表现非常好。于是算法我从开始到现在还是选择了kNN。在但是一个问题是:在wifi数据库中,不同地方的wifi节点数量是不一样的,即便是同一个地方,每次测得的wifi节点数量也不一样。

          这样问题就是当前wifi信息和数据库信息比对的时候会有几个wifi节点缺失,精确度会大受影响。所以目前采用的解决方案是不是计算当前点的位置,而是计算当前所在位置的概率。意思就是在空间中随机均匀分布一些点,每个点带有各自的信息,然后用欧氏距离计算出来的误差作为权值加到每个点上再做重采样即得到了当前位置在每个位置上的概率。

          可能得改进方法可以是:用进化算法对粒子滤波器的重采样部分进行优化;对空间中的点先进行聚类,在做分类,减小运算量,并可能可以提高精度。

0 0
原创粉丝点击