iBeacon蓝牙定位技术原理及实现

导语 蓝牙定位是iBeacon技术最常被应用的方向之一,基于蓝牙定位可以实现诸如寻路、寻车、向导等很多商业需求,觅迹导航的定位系统也是基于iBeacon技术实现的。蓝牙定位又可以分为一维定位和二维定位,本文将介绍两种蓝牙定位技术的实现原理及实现方法。

  蓝牙定位是iBeacon技术最常被应用的方向之一,基于蓝牙定位可以实现诸如寻路、寻车、向导等很多商业需求,觅迹导航的定位系统也是基于iBeacon技术实现的。蓝牙定位又可以分为一维定位和二维定位,本文将介绍两种蓝牙定位技术的实现原理及实现方法。

  一维定位

  原理

  蓝牙定位的底层技术是蓝牙测距,关于蓝牙测距在《微信小程序iBeacon测距及稳定程序的实现》一文中已经做了详细介绍,这里不再赘述。

  所谓一维定位其实就是对蓝牙测距技术的最简单应用,只要将蓝牙信标设备部署在指定点,当接收设备(手机)足够靠近信标时,就认为用户到达了指定点。之所以称之为一维定位,是因为定位结果完全依附于信标设备的位置,没有任何其他维度上的扩展。

蓝牙定位

应用

  这种方式通常用在固定路线的沿途部署,为路线上的用户提供定位信息。

  优点是部署成本和开发成本很低,缺点是只能应用在路线固定,并且定位点间隔不太密集的场景。典型的例子就是景区或者园区,景区内的路径都是经过设计的,固定而且几乎唯一;景点之间的距离也不会很近,至少在50m以上的间距。只要沿途以大致固定的间距部署信标设备,就可以为用户提供相对实时而且准确的定位信息。

  实现

  一维定位的部署非常简单,如上文所述,只要确定好信标设备的有效覆盖范围,然后沿途部署就可以。部署同时收集每个或部分信标设备的位置信息,作为程序的定位检索依据。

  开发方面,移动设备只要将收到的信号做距离排序,找到距离最近的一个信标设备,如果距离在指定范围内,就检索该设备的位置信息,认为用户到达了该地区。

  太简单了,就不多说了。

  二维定位

  原理

  二维定位顾名思义,就是可以实现二维空间中的任意定位。定位的主要理论依据三角形三边关系公式。

iBeacon蓝牙定位

  如上图,已知三角形三边长度,CD是底边AB的垂线,AD和BD的长度计算公式分别为

  1. BD = (AB2+CB2-AC2)÷2AB 
  2. AD = (AB2-CB2+AC2)÷2AB 

  整体思路是,将信标设备在场地内按指定间距做网状部署,使用户在场地内任意点都可以接收到3个距离最近而且连线构成直角的定位点信息,如下图

iBeacon蓝牙定位

  通过三角形三边关系公式,可以计算出上图中px和py的长度,也就是当前点在当前正方形网格中的坐标。

  再根据当前所在正方形在整个矩阵中的位置,结合部署间距,算出当前点在整个矩阵中的坐标。

  应用

  二维定位理论上适用于任何场景,通常用在用户活动路径不固定的自由空间中,比如展会、商场。

  优点是场地适应性更强,缺点是部署成本和开发成本相对较高。以商场为例,严格按照固定间距部署蓝牙信标,往往需要结合实地情况选择合适的距离,程序也要根据实际间距做相应的计算调整。另外还要考虑不规则区域的处理,往往会将一维定位和二维定位结合使用。

  实现

  上面原理部分说起来有点啰嗦,看图其实很简单。

  假设现在有一个30m * 30m的场地,将信标设备以10m为间距网状部署,共需要16个信标,每个信标都按下图所示标注上坐标信息

蓝牙定位技术原理

  此时用户无论在场地内的任何位置,都将身处9个正方形网格中的一个(暂不考虑临界情况),那么移动设备收到的距离最近的4个信标点,应该就是当前所在正方形的4个顶点。

  假设当前用户此时在左上角第一个正方形中,根据蓝牙测距结果,得到距离最近的3个信标点,对应的距离分别为distance1, distance2, distance3,如图

iBeacon蓝牙定位技术原理

  三个顶点距离已知,部署间距已知,根据三边关系公式可以得px, py的值,也就是当前点在当前网格中的坐标。

  在这之前先要解决一个问题,那就是三个点之间的关系。我们知道三个点肯定两两连线互为直角,但到底哪两个点在横轴上,哪两个点在纵轴上。这需要结合点的坐标信息做进一步处理。

  1. //判断三点(points)的关系 
  2. let xAxisPoints = []; 
  3. let yAxisPoints = []; 
  4. for (let i = 0; i < points.length; i++) { 
  5.   let point = points[i]; 
  6.   //找到Y轴点 
  7.   let xNO = point.x; 
  8.   let yPoints = points.filter(e => e.x === xNO) 
  9.   if (yPoints.length >= 2) { 
  10.     yAxisPoints = yPoints.sort((a, b) => a.y - b.y) 
  11.     if (xAxisPoints.length) { 
  12.       break
  13.     } 
  14.   } 
  15.   //找到X轴点 
  16.   let yNO = point.y; 
  17.   let xPoints = points.filter(e => e.y === yNO) 
  18.   if (xPoints.length >= 2) { 
  19.     xAxisPoints = xPoints.sort((a, b) => a.x - b.x) 
  20.     if (yAxisPoints.length) { 
  21.       break
  22.     } 
  23.   } 

  至此,就很容易算出定位点的横轴坐标和纵轴坐标了,再分别加上当前网格在整个矩阵中的横坐标和纵坐标,就得到了最终的定位坐标。

  上例中的xAxisPoints和yAxisPoints已经对坐标信息做了排序,横轴数组第一个点的x值,以及纵轴数组第一个点的y值,就是网格在整个矩阵中的横坐标和纵坐标。

  总结

  一维定位和二维定位分别有各自的应用场景,其中二维定位对实施能力提出了较高的要求。现实环境中往往还需要将一维定位和二维定位结合使用,这里需要程序设计上处理好两种情况的兼容。

  得到定位信息,往往只是项目的第一步。比如在导航系统中,定位信息需要匹配最近的目标点,整个导航功能才可以开始使用。有机会后面会对导航系统的实现,做进一步的分享。

http://www.aseoe.com/ true iBeacon蓝牙定位技术原理及实现 http://www.aseoe.com/show-47-1125-1.html report 3742.5 蓝牙定位是iBeacon技术最常被应用的方向之一,基于蓝牙定位可以实现诸如寻路、寻车、向导等很多商业需求,觅迹导航的定位系统也是基于iBeacon技术实现的。蓝牙定位又可以分为一维定位和二维定位,本文将介绍两种蓝牙定位技术的实现原理及实现方法。
本站欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明: 文章转载自:爱思资源网 http://www.aseoe.com/show-47-1125-1.html

[前端插件推荐] Plugin

1 2 3 4
  • jQuery实现逐字逐句显示插件l-by-l.min.js
  • jQuery带方向感知的鼠标滑过图片边框特效插件
  • jQuery HotKeys监听键盘按下事件keydown插件
  • 响应式无限轮播jQuery旋转木马插件
响应式无限轮播jQuery旋转木马插件
web前端开发
爱思资源网 Copyright 2012-2014 Www.Aseoe.Com All rights reserved.(晋ICP备13001436号-1)