开发过蓝牙,或者比较了解蓝牙知识的朋友一定对RSSI不陌生,也都知道这个玩意可以对设备进行不准确的定位。可是需求这个东西啊。。。。。
好了言归正传,这里提供思路,需要详细过程或者没有看明白的朋友可以留言或者加我QQ494863389,最好留言
第一步,硬件不支持定位。。那只能物理层来解决。。就是让用户拿着手机转一圈,采集一圈的RSSI,这步不能实现的。。再见
第二步,根据RSSI算出距离,百度一堆,设计iOS和安卓在这里就不给出方案
第三步,采集一圈数据后,采集到n个数据,n / 360度就是每个数据占的度数,遍历查找某个值和附近值的平均数a,与对角线值的平均数b,取出两个平均值差值最大的一组数字保存,最后这个值和对角线的值的最小值就是方向
就这么简单。。操作可能复杂些。原理说一下
一个人拿着手机转了一圈,形成一个圆,那么离蓝牙设备最近的一个点就是方向。因为人转一圈RSSI的波动不会很大(实测),直接取最小值误差一定很大(不信你试试呀。。),所以要取数组索引内的平均数,可以左右多取一个或者两个三个求平均数,看实际采集数据的数量而定,这里我做了判断;然后要找对角线的值,最小值的对角线一定是最大值,为了排除波动,当然也要算出平均数,然后减去最小值,求出差值最大的这组数的最小点就是最后我们要找到的方位。没有什么难点,只是一个思路,最大的问题就是减少误差和干掉产品(我这个是boss答应人家要做的。。boss干不掉- -)。最后实测准确率在百分之80,剩下百分之二十的误差范围在正负30度
最后陀螺仪算法百度也一堆,这里不做描述,附张图