【2018年整理】基于Wi-Fi的室内定位在美团总部的实践和应用.docx
文本预览下载声明
基于Wi-Fi的室内定位在美团总部的实践和应用(含详细设计及参考代码)室内定位技术的商业化必将带来一波创新高潮,尤其是在O2O领域,各种基于此技术的应用将出现在我们的面前。我们可以想象一些比较常见的应用场景,比如在大型商场里面借助室内导航快速找到目标商铺,商店根据用户的具体位置向用户推送更多关于商品的介绍等等,这些应用会极好的服务于O2O,提高用户体验。目前室内定位技术有很多,如A-GPS、蓝牙、超声,红外、信标、射频、Wi-Fi、计算机视觉等,这些技术综合比较,其中以基于Wi-Fi的室内定位技术最为突出,无论从硬件投入、软件投入、实施难度、可控性,还是定位效果方面考察,都是有优势的。本文描述了作者在美团总部从零开始构建基于Wi-Fi的室内定位系统的过程,具有广泛的借鉴意义。基于Wi-Fi的室内定位原理为提供Wi-Fi服务,室内会部署有热点(AP),每一个无线AP都有一个全球唯一的MAC地址,并且一般来说无线AP在一段时间内是不会改变的。设备可以程序控制扫描并收集周围的AP信号,无论是否加密,是否已连接,甚至信号强度不足以显示在无线信号列表中,都可以获取到AP广播出来的MAC地址。对应每个AP,这里有两个重要数据,AP的MAC地址和信号强度,MAC地址可以决定是哪个AP;信号强度理论上是和AP之间的距离有函数关系的,就是根据信号强度可以算出和AP的距离。设备将这些数据发送到位置服务器,服务器就可以用一个算法计算出设备的地理位置并返回到用户设备。定位的精度取决于AP的个数,信号的稳定程度,以及算法的选择。美团总部Wi-Fi部署情况美团总部于2014年1月搬入了望京科技园3期,新的办公室地上共4层,建筑面积一万多平米,共部署有86台无线AP,覆盖很充分,没有死角,这为良好的定位效果打下了基础。无线AP使用的是,ArubA AP-135,这是一款优秀的商用无线路由器,2.4-GHz/5-GHz双频。基础数据测绘第一步,建立AP的基础数据库是关键,至少需要如下信息:AP的MAC地址,这里是双频的AP,就是有2个无线MAC地址AP的物理位置关于AP的物理位置,这里因为范围太小,加之无法找到足够精度的参考点,所以AP的物理位置无法使用GPS坐标,只能使用自定义坐标系。这里有2种选择:以建筑的东南角为参考点(坐标原点),这样就可以测绘AP相对原点的坐标,包含Z轴,单位是米以测绘图的图片为参考,以AP在图中的像素位置为坐标,单位是1像素点这里选用了后一种方法,因为后一种方法容易测绘,大部分工作在电脑上操作即可;前一种方法需要更多的实地测绘工作。关于AP的MAC地址,从IT那里要到了一个列表,如图所示:但是很不幸,这里的MAC地址是路由器的WAN口的MAC地址,而我们需要的是两个无线模块的MAC地址。这里只能自己测绘了,我写了一小段Android程序,可以排序出最近的AP的MAC地址,然后挨个跑到各个AP下,运行程序,记下两个MAC地址;同时记录下AP的真实物理位置。WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);wm.startScan(); ?//开始扫描AP//等待一段时间,时间可长可短ListScanResult results = wm.getScanResults(); ?//拿到扫描的结果Collections.sort(results,this); ?//this是个Comparator,按照level排序//去掉非sankuai的SSID//在UI线程中,显示到界面上int max=Math.min(30,results.size());for(int i=0;imax;i++) { ? ?ScanResult one = results.get(i); ? ?text1.append(\n+one.BSSID+\t\t+one.level);}图中信号最强的就是当前AP的MAC地址,然后地址与它相近的是这个AP另一个频段的MAC地址,两个MAC地址都是0结尾,尾数相差1,容易辨认。MAC地址后面的数字是信号强度,单位是dBm,是个负数。然后在底图中标注好AP的准确的物理位置,图中红色圆点即是AP位置,其圆心的像素坐标当作AP的坐标。测绘的数据应该存入数据库,这里设计了一个POJO,服务器端程序可以使用:public class MtApLoc { ? ?private int id; ? ? ? ?//数字ID ? ?人工定,有一定含义 ? ?private String id1; ? ?//字符串ID ?从IT给表中来 ? ?private String mac1; ? //WAN MAC地址,有线口的 ? ?private Str
显示全部