一种基于双层网格的室内定位方法
技术领域
本发明属于室内定位技术领域,特别是一种基于双层网格的室内定位方法。
背景技术
GPS定位技术和蜂窝无线定位技术在军用和民用领域都得到了广泛的应用,随着室外定位技术的不断完善和革新,交通、餐饮、旅游等行业得到了蓬勃的发展。由于室内环境复杂,尤其是受到钢筋、混凝土等障碍物的遮挡,卫星信号以及蜂窝网络信号在室外到室内的传输过程中发生了极大的衰减和畸变,加之室外定位技术精度有限,无法利用这些信号实现高精度的室内定位效果,于是在室内定位领域就产生了基于计算机视觉、地磁、蓝牙、红外线和超宽带技术等许多种定位方法,近年来被称作定位领域“最后一公里”的室内定位技术得到了快速的发展。
当前绝大数基于蓝牙的室内定位系统都是利用接收的蓝牙信号强度值RSSI进行位置标记。基于RSSI的方法主要分为两类:三边定位法和位置指纹识别法。三边定位法是一种传统的定位方法,它利用信号距离-损耗模型计算待测目标到至少三个已知参考点之间的距离信息估计最终的目标位置,而位置指纹识别则通过比较待定位点的RSSI序列和参考点的信号特征指纹信息推导出目标位置。蓝牙信号具有在小范围内变化小,易受周围行人、障碍物影响,信道衰落现象严重等缺点,一般情况下位置指纹法在定位精度上要优于三边定位法。传统的位置指纹法利用基于欧氏距离的KNN和K-means等分类和匹配方法,由于受到室内环境的影响,这些方法的定位平均精度和稳定性较差,且存在定位点跳动的问题。
发明内容
本发明的目的在于提供一种定位精度高、定位点连续的基于双层网格的室内定位方法。
实现本发明目的的技术解决方案为:一种基于双层网格的室内定位方法,包括以下步骤:
步骤1、将待测区域划分为网格状,组成第一层网格,每个网格节点作为一个参考点,采集各个参考点的蓝牙信号强度RSSI指纹并发送至手机端;
步骤2、根据参考点的大小和形状,将相邻参考点组成待测子区域,组成第二层网格,子区域的质心坐标作为最终的位置坐标;
步骤3、离线阶段,在各参考点利用手机端程序采集RSSI值,并用Python脚本对数据进行清洗,获得以传感器ID为键,以RSSI序列为键值的多键值字典变量,在程序中执行降噪和平滑的自适应高斯滤波算法,构建离线指纹库;
步骤4、在线预测阶段,在手机端执行基于欧氏距离的位置匹配和区域整合的室内定位算法,进行定位;
步骤5、手机端解算位置数据,以图标的形式实时显示待测区域的位置坐标。
进一步地,步骤3所述的离线阶段,在各参考点利用手机端程序采集RSSI值,并用Python脚本对数据进行清洗,获得以传感器ID为键,以RSSI序列为键值的多键值字典变量,在程序中执行降噪和平滑的自适应高斯滤波算法,构建离线指纹库,具体如下:
步骤3.1、离线阶段在各参考点以设定频率采集位置指纹信息,在每个参考点采集大于100组的位置指纹信息,利用手机端程序将手机终端采集到的所有信息上传到PC端的log文件中;
步骤3.2、使用Python脚本对各个参考点对应的log文件进行数据清洗和有效值提取,将数据按(Mac1:rssi1,Mac2:rssi2,...,Macn:rssin)的形式组成多键值字典变量,其中n代表当前环境中检测到的所有蓝牙传感器iBeacon的数量,Maci表示第i个iBeacon的Minor值,rssii表示第i个iBeacon的信号强度值组成的序列,i=1,2,…,n;
步骤3.3、使用高斯函数,即正态分布的概率密度函数f(x)进行自适应高斯滤波:
其中,x为高斯函数的函数核,σ表示待测点的RSSI标准差,μ表示一维信号滤波模板的大小,在预处理阶段中检测不同μ对应的均值误差,其中均值误差error的定义如下:
其中代表第i个iBeacon的信号强度序列值中第k次的测量值经过高斯滤波后的值,k=1,2,…m,m表示测量值的总数,δ为序列的均值,选取均值误差最小值errormin对应的μ值作为自适应高斯滤波的最优模板。
进一步地,步骤4所述的在线预测阶段,在手机端执行基于欧氏距离的位置匹配和区域整合的室内定位算法,进行定位,具体如下:
步骤4.1、基于欧氏距离计算待测点和参考点的相似度dp,公式为:
其中l代表当前环境检测到的iBeacon数量,n代表指纹库中向量的个数,rssii表示第i个iBeacon的信号强度值组成的序列,表示指纹库中第p条指纹向量中地址Maci对应的rssi值;
步骤4.2、取1/dp作为各参考点在预测阶段的权重,将待测子区域内参考点的权重相加作为该子区域的权重,对待测子区域权重按降序排列,选取权重最大的子区域的质心坐标作为最终的定位坐标。
本发明与现有技术相比,其显著优点在于:(1)采用自适应的高斯滤波方法,有效地降低了多径效应和非视距对信号采集的影响;(2)采用双层网格的定位算法,提高了在线预测的精度和稳定性,有效降低了定位点跳动的情况。
附图说明
图1为本发明基于双层网格的室内定位方法的流程示意图。
图2为本发明基于双层网格的室内定位方法中离线阶段流程示意图。
图3为本发明基于双层网格的室内定位方法中在线阶段流程示意图。
图4为本发明基于双层网格的室内定位方法中双层网格的结构示意图。
具体实施方式
一种基于双层网格的室内定位方法,包括以下步骤:
步骤1、将待测区域划分为网格状,组成第一层网格,每个网格节点作为一个参考点,采集各个参考点的蓝牙信号强度RSSI指纹并发送至手机端;
步骤2、根据参考点的大小和形状,将相邻参考点组成待测子区域,组成第二层网格,子区域的质心坐标作为最终的位置坐标;
步骤3、离线阶段,在各参考点利用手机端程序采集RSSI值,并用Python脚本对数据进行清洗,获得以传感器ID为键,以RSSI序列为键值的多键值字典变量,在程序中执行降噪和平滑的自适应高斯滤波算法,构建离线指纹库;
步骤4、在线预测阶段,在手机端执行基于欧氏距离的位置匹配和区域整合的室内定位算法,进行定位;
步骤5、手机端解算位置数据,以图标的形式实时显示待测区域的位置坐标。
进一步地,步骤3所述的离线阶段,在各参考点利用手机端程序采集RSSI值,并用Python脚本对数据进行清洗,获得以传感器ID为键,以RSSI序列为键值的多键值字典变量,在程序中执行降噪和平滑的自适应高斯滤波算法,构建离线指纹库,具体如下:
步骤3.1、离线阶段在各参考点以设定频率采集位置指纹信息,在每个参考点采集大于100组的位置指纹信息,利用手机端程序将手机终端采集到的所有信息上传到PC端的log文件中;
步骤3.2、使用Python脚本对各个参考点对应的log文件进行数据清洗和有效值提取,将数据按(Mac1:rssi1,Mac2:rssi2,...,Macn:rssin)的形式组成多键值字典变量,其中n代表当前环境中检测到的所有蓝牙传感器iBeacon的数量,Maci表示第i个iBeacon的Minor值,rssii表示第i个iBeacon的信号强度值组成的序列,i=1,2,…,n;
步骤3.3、使用高斯函数,即正态分布的概率密度函数f(x)进行自适应高斯滤波:
其中,x为高斯函数的函数核,σ表示待测点的RSSI标准差,μ表示一维信号滤波模板的大小,在预处理阶段中检测不同μ对应的均值误差,其中均值误差error的定义如下:
其中代表第i个iBeacon的信号强度序列值中第k次的测量值经过高斯滤波后的值,k=1,2,…m,m表示测量值的总数,δ为序列的均值,选取均值误差最小值errormin对应的μ值作为自适应高斯滤波的最优模板。
进一步地,步骤4所述的在线预测阶段,在手机端执行基于欧氏距离的位置匹配和区域整合的室内定位算法,进行定位,具体如下:
步骤4.1、基于欧氏距离计算待测点和参考点的相似度dp,公式为:
其中l代表当前环境检测到的iBeacon数量,n代表指纹库中向量的个数,rssii表示第i个iBeacon的信号强度值组成的序列,表示指纹库中第p条指纹向量中地址Maci对应的rssi值;
步骤4.2、取1/dp作为各参考点在预测阶段的权重,将待测子区域内参考点的权重相加作为该子区域的权重,对待测子区域权重按降序排列,选取权重最大的子区域的质心坐标作为最终的定位坐标。
下面结合附图和具体实施例对本发明做进一步的详细说明。
结合图1,本发明基于双层网格的室内定位方法,包括以下步骤:
步骤1、将待测区域划分为网格状,组成第一层网格,每个网格节点作为一个参考点,终端采集各个参考点的蓝牙信号强度RSSI指纹并发送至手机端;
步骤2、根据参考点的大小和形状,将相邻参考点组成待测子区域,组成第二层网格,子区域的质心坐标作为最终的位置坐标;
步骤3、离线阶段,在各参考点利用手机端程序如微信小程序采集RSSI值,并用Python脚本对数据进行清洗,获得以传感器ID为键,以RSSI序列为键值的多键值字典变量,在程序中执行降噪和平滑的自适应高斯滤波算法,构建离线指纹库,具体如图2所示:
步骤3.1、离线阶段在各参考点以10Hz的频率采集位置指纹信息,在每个参考点采集140组左右,利用手机端程序采集到的所有信息上传到PC端的log文件中;
步骤3.2、使用Python脚本对各个参考点对应的log文件进行数据清洗和有效值提取,将数据按(Mac1:rssi1,Mac2:rssi2,...,Macn:rssin)的形式组成多键值字典变量,其中n代表当前环境中检测到的所有蓝牙传感器iBeacon的数量,Maci表示第i个iBeacon的Minor值,rssii表示第i个iBeacon的信号强度值组成的序列,i=1,2,…,n;
步骤3.3、使用高斯函数,即正态分布的概率密度函数f(x)进行自适应高斯滤波:
其中x为高斯函数的函数核,σ表示待测点的RSSI标准差,μ表示一维信号滤波模板的大小,在预处理阶段中检测不同μ对应的均值误差,其中均值误差error的定义如下:
其中代表第i个iBeacon的信号强度序列值中第k次的测量值经过高斯滤波后的值,k=1,2,…m,m表示测量值的总数,δ为序列的均值,选取均值误差最小值errormin对应的μ值作为自适应高斯滤波的最优模板。
步骤4、在线预测阶段,在手机端执行基于欧氏距离的位置匹配和区域整合的室内定位算法,进行精确定位,具体如图3所示:
步骤4.1、基于欧氏距离计算待测点和参考点的相似度dp,公式为:
其中l代表当前环境检测到的iBeacon数量,n代表指纹库中向量的个数,rssii表示第i个iBeacon的信号强度值组成的序列,表示指纹库中第p条指纹向量中地址Maci对应的rssi值;
步骤4.2、取1/dp作为各参考点在预测阶段的权重,将待测子区域内参考点的权重相加作为该子区域的权重,对待测子区域权重按降序排列,选取权重最大的子区域的质心坐标作为最终的定位坐标。
步骤5、手机终端解算位置数据,以图标的形式实时显示待测区域的位置坐标。
实施例1
本实施例的实验场地选取南京理工大学鼎新楼6056房间,第一层网格即参考点的大小为1.1m*1.1m,共64个采样点;相邻采样点组成第二层网格即待测子区域,共16个。双层网格示意图参考图4。
基于微信平台的小程序具有信息采集和在线预测的功能。信息采集阶段,小程序调用wx.openBluetoothAdapter()函数提醒用户打开蓝牙功能,调用wx.onBeaconUpdate()函数监听iBeacon设备的更新事件,识别具有相同UUID和Major值的iBeacon,打印并输出这些iBeacon的Mac地址和RSSI信息,以log文件存储在PC端。
离线阶段,使用Python脚本对各个参考点对应的.log文件进行数据清洗和关键值提取,将数据按(Mac1:rssi1,Mac2:rssi2,...,Macn:rssin)的形式存储到多键值字典变量中,利用Python语言编写自适应高斯滤波算法,对多键值字典变量中的rssii序列进行滤波并求均值作为参考点的位置指纹。
在线预测阶段,在手机端利用微信小程序接收RSSI信息,将wx.onBeaconUpdate()函数的监听频率设为10Hz,通过switch语句获取ID为Maci的rssii序列,剔除该序列中的最大值和最小值后求均值作为待测点的特征信息,分别执行基于欧氏距离的位置匹配和区域整合的室内定位算法进行稳定和精确的定位。
最后手机终端解算位置数据,以图标的形式实时显示待测区域的位置坐标。
综上所述,本发明采用自适应的高斯滤波方法,有效地降低了多径效应和非视距对信号采集的影响;同时,采用双层网格的定位算法,提高了在线预测的精度和稳定性,有效降低了定位点跳动的情况。