具体实施方式
现有的基于最小跳数和平均每跳距离的定位方法中,每个非信标节点获取到信标节点的最小跳数具体为:
每个信标节点向其邻居节点广播带有自身位置坐标的信标消息,所述信标消息中包括跳数值,其中,跳数值初始化为0;接收到该信标消息的非信标节点记录到该信标节点的最小跳数,忽略来自同一个信标节点的较大跳数,然后更新信标消息中的跳数值,即将跳数值加1,并将更新跳数值后的信标消息转发给该非信标节点的下一跳邻居节点,通过这个方法,传感器网络中的所有非信标节点能够保存到每个信标节点的最小跳数hjk。
平均每跳距离的获取方法具体为:
每个信标节点根据最小跳数获取方法获取到其他信标节点的最小跳数和其他信标节点的位置坐标,根据自身位置坐标和其他信标节点的位置坐标以及到其他信标节点的最小跳数,根据公式:
计算所述信标节点的平均每跳距离,其中,(xi,yi)是所述信标节点的位置坐标,(xj,yj)是其他信标节点的位置坐标,hj是所述信标节点与其他信标节点之间的最小跳数,其中i≠j。
然后,所述信标节点将计算的每跳平均距离用带有生存期字段的信标消息广播到整个传感器网络中,待定位节点仅记录第一个接收到的信标节点广播的信标消息,并将该信标消息转发给邻居节点,以确保绝大多数待定位节点从最近的信标节点接收平均每跳距离,从而根据接收到的平均每跳距离和保存的最小跳数,计算到每个信标节点之间的距离。
由于传感器节点随机分布和广播消息过程中可能存在冲突等因素,待定位节点得到的到信标节点的最小跳数存在有一定偏差,而且平均每跳距离也只是对实际距离的一种估算,不可避免会存在着误差。图1为传感器网络节点随机分布的示意图,如图1所示,Rk是信标节点,va、vb、vp和vq是4个普通节点,从节点跳数的角度来看,普通节点va和vb到信标节点Rk都是2跳,但它们距离信标节点Rk的欧几里得距离却相差很大。因此,现有的基于最小跳数和平均每跳距离的定位方法可能降低了定位结果的精确度。
为了降低现有的最小跳数存在的偏差,举例来说,可以在信标节点向邻居节点广播自身位置信息的数据包中添加生存期字段n,其它节点在转发该数据包时,首先检测生存期字段,如果n大于1,则n=n-1,转发数据包;如果n不大于1,则不再转发该数据包,以保证该数据包仅在n跳范围内广播。这样每个节点仅收到n跳范围内的信标节点信息,降低了全网洪泛造成的高通信开销、高冲突的概率。
进一步举例来说,为了降低现有技术中的最小跳数和平均每跳距离存在的偏差,本发明实施例采用虚拟跳数和虚拟每跳距离估算方法确定待定位节点的位置坐标,例如,待定位节点通过计算到信标节点的虚拟跳数,利用信标节点提供的虚拟每跳距离,计算出待定位节点到信标节点的距离,当待定位节点获取到三个或三个以上的信标节点距离,利用三边测距方法计算出待定位节点的位置坐标。
图2为本发明实施例一提供的传感器网络节点的定位方法的流程示意图,如图2所示,具体包括:
步骤201、待定位节点接收三个信标节点分别广播的第一信标消息,各第一信标消息中包含对应信标节点的虚拟每跳距离和位置坐标,分别获取所述待定位节点到所述三个信标节点中每个信标节点的虚拟跳数。
本实施例的信标节点为具有确定的位置坐标,且作为待定位节点用于定位的参考节点。
其中,待定位节点到信标节点的虚拟跳数的获取方法具体为:
1、每一个节点接收信标节点Rk广播的第一信标信息,所述第一信标信息包括所述信标节点Rk的位置坐标(Xk、Yk)和虚拟每跳距离;
2、若确定所述节点到信标节点当前的最小跳数hk小于或等于保存的最小跳数hjk则将储存的最小跳数更新为当前的最小跳数,即令存储的hik=hk,并将当前的最小跳数加1,即hk++,将所述信标节点Rk广播的第一信标信息转发给的下一跳节点,其中,hjk表示每一个节点保存的到信标节点Rk的最小跳数,hk表示每一个节点到信标节点Pk的当前的最小跳数;
若确定所述节点到信标节点当前的最小跳数hk大于保存的最小跳数hjk,则停止转发信标节点Rk广播的第一信标信息给下一跳节点;
3、每一个节点与上一跳邻居节点和下一跳邻居节点交换节点信息,即所述节点的上一跳邻居节点个数和下一跳邻居节点个数。
通过上述方法,所述待定位节点接收到各上一跳邻居节点发送的同一信标节点的第一信标消息,所述第一信标消息中还包括所述上一跳邻居节点到所述信标节点的虚拟跳数;
根据所述待定位节点的上一跳邻居节点到所述信标节点的虚拟跳数,以及所述待定位节点的上一跳邻居节点个数和下一跳邻居节点的个数,根据公式:
分别获取所述待定位节点到所述第三个信标节点中每个信标节点的虚拟跳数;
其中,VHik表示所述待定位节点的上一跳邻居节点Vi到所述信标节点的虚拟跳数;
表示所述待定位节点到其上一跳邻居节点的虚拟跳数。
上述公式中,Pj为每一个节点的上一跳邻居节点集合,Nj为每一个节点的下一跳邻居节点集合,ζi为Min{|Pi|va∈Nj},为Min{|Ni||vi ∈Pj},|Pi|表示所述待定位节点的上一跳邻居节点的个数,|Ni|表示所述待定位节点的下一跳邻居节点的个数,va∈Nj表示所述待定位节点的下一跳邻居节点中任一个节点,vi∈Pj表示所述待定位节点的上一跳邻居节点中任一个节点。
举例来说,本实施例中,每一个信标节点的虚拟每跳距离的计算方法具体为:
所述三个信标节点中的每个信标节点接收其他信标节点广播的第二信标消息,所述第二信标消息中包括所述其他信标节点的位置坐标;
每个信标节点获取自身到所述其他信标节点的虚拟跳数;
每个信标节点根据自身的位置坐标、所述其他信标节点的位置坐标和自身到所述其他信标节点的虚拟跳数,根据公式:
计算所述信标节点的虚拟每跳距离,其中,xi,yi)、(xj,yj)是所述信标节点和其他信标节点的位置坐标,hj是所述信标节点与其他信标节点之间的虚拟跳数(i≠j)。计算自身的虚拟每跳距离;
然后,每个信标节点广播所述第一信标消息,所述第一信标消息中包含所述信标节点的位置坐标、所述信标节点的虚拟每跳距离;
举例来说,所述第一信标消息中还包含生存期字段n,以保证所述第一信标消息仅在n跳范围内广播,这样每个待定位节点仅收到n跳范围内的信标节点信息。
其中,待定位节点仅记录第一个接收到的信标节点广播的所述第一信标消息,以确保绝大多数待定位节点从最近的信标节点接收第一信标消息,降低了全网洪泛造成的高通信开销、高冲突的概率,同时也降低了现有技术中的最小跳数和平均每跳距离存在的偏差。
步骤202、根据所述三个信标节点的位置坐标和虚拟每跳距离、所述待定位节点到所述三个信标节点的虚拟跳数,确定所述待定位节点的估算位置坐标。
具体为:分别将所述待定位节点到所述三个信标节点的虚拟跳数与对应信标节点的虚拟每跳距离相乘,分别获取所述待定位节点到所述三个信标节点的距离;
采用三边测量法,根据公式:
确定所述待定位节点的估算位置坐标(x,y);其中,(xa,ya)、(xb,yb)、(xc,yc)表示所述三个信标节点对应的位置坐标,da、db、dc表示所述待定位节点到所述三个信标节点的距离。
需要指出的是,本实施例也可以采用三维坐标来表示位置坐标,在这种情况下,待定位节点至少要获取到4个信标节点的虚拟跳数,以及4个信标节点的虚拟每跳距离,从未获取到4个信标节点的距离。
本发明实施例通过待定位节点接收至少三个信标节点广播的第一信标消息,获取每一个信标节点的虚拟每跳距离和及其位置坐标,以及待定位节点到每一个信标节点的虚拟跳数,从而确定待定位节点的位置坐标,能够降低现有的基于最小跳数和平均每跳距离的定位方法在网络节点随机分布时存在的偏差,同时,为后续的筛选和修正过程奠定了良好的基础,有利于迭代过程的顺利进行。
通过图2所示实施例所述的定位方法,传感器网络中的每一个待定位节点都可以确定自身的估算位置坐标,为了进一步确定每一个待定位节点的估算位置是否与其实际的位置坐标匹配,举例来说可,可以采用图3所示的跳数匹配方法进行匹配,图3为本发明实施例一确定的所述待定位节点的估算位置坐标的一种匹配流程示意图,如图3所示,具体包括:
步骤301、所述待定位节点接收两跳邻居节点分别广播的第一节点消息,各所述第一节点消息中包括对应两跳邻居节点的估算位置坐标。
通过实施例一所述的定位方法,每一个待定位节点都获得所述待定位节点的估算位置坐标。
步骤302、根据所述待定位节点自身的估算位置坐标、各两跳邻居节点的估算位置坐标,分别获取所述待定位节点到各两跳邻居节点的估算距离dij’。
步骤303、分别计算所述待定位节点到各两跳之内的邻居节点的估算跳数hij’。
具体为:根据公式分别计算所述待定位节点到各两跳之内的邻居节点的估算跳数hij’,其中,r为预设的节点传输半径。
步骤304、确定所述待定位节点到各两跳邻居节点的估算跳数hij’等于两跳的所述两跳邻居节点的个数是否超过预设个数,若是,则执行步骤305,否则执行步骤306。
步骤305、确定所述待定位节点自身为好节点,并添加好节点标识。
步骤306、确定所述待定位节点自身为坏节点,并添加坏节点标识。
本实施例中,若确定超过半数以上的两跳邻居节点到所述待定位节点的估算跳数等于两跳,则确定所述待定位节点自身为好节点,并添加好节点标识,否则确定所述待定位节点自身为坏节点,并给添加坏节点标识。
图4为图3所示方法确定的好节点的估算位置坐标和真实位置坐标的匹配示意图,图5为图3所示方法确定的坏节点的估算位置坐标和真实位置坐标的匹配示意图,图中实心的圈表示节点的真实位置,空心的圈表示节点的估算位置。在图4中,va是一个好节点,它的真实位置和估算位置是完全重合的,它有5个邻居,其中vg是坏节点,va和其邻居之间的估算距离和真实距离有4个都是匹配的,只有到节点vg的距离不匹配。在图5中,va是一个坏节点,它有5个好邻居,它到邻居之间的距离匹配程度都不高。
为了进一步确定每一个待定位节点的估算位置是否与其实际的位置坐标匹配,举例来说可,还可以采用图6所示的距离序列匹配方法进行匹配,图6为本发明实施例一确定的所述待定位节点的估算位置坐标的又一种匹配流程示意图,如图6所示,具体包括:
步骤601、所述待定位节点接收一跳邻居节点分别广播的第二节点消息,各所述第二节点消息中包括对应一跳邻居节点的估算位置坐标。
通过实施例一所述的定位方法,每一个待定位节点都获得所述待定位节点的估算位置坐标。
步骤602、根据所述第二节点消息,分别获取所述待定位节点到各一跳邻居节点的估算距离序列号ai’和测量距离序列号ai.
具体为:
根据所述待定位节点自身的估算位置坐标、各一跳邻居节点的估算位置坐标,分别获取所述待定位节点到各一跳邻居节点的估算距离;根据所述待定位节点到各一跳邻居节点的估算距离,将各一跳邻居节点按序排列并分配估算距离序列号a′i,i=1,…n,n为一跳邻居节点的个数;
通过接收第二节点消息,测量所述待定位节点到各一跳邻居节点的信号强度值RSS,分别获取所述待定位节点到各一跳邻居节点的测量距离dij;根据所述待定位节点到各一跳邻居节点的测量距离,将各一跳邻居节点按序排列并分配测量距离序列号ai,i=1…n,n为一跳邻居节点的个数。
步骤603、计算所述待定位节点的距离序列匹配度,将计算得到的所述待定位节点的距离序列匹配度与预设的距离序列匹配度进行比对,确定所述待定位节点是否为好节点。
具体为:
根据公式:
确定所述待定位节点的距离序列匹配度Mi,其中,δi是最长公共子序列长度占整个序列长度的比例,CosDisti是所述估算距离序列和所述测量距离序列的余弦距离;
若所述距离序列匹配度Mi不小于预设的距离序列匹配度,则确定所述待定位节点自身为好节点,并添加好节点标识,否则确定所述待定位节点自身为坏节点,并添加坏节点标识。其中,预设的距离序列匹配度可以根据邻居节点的距离序列匹配度的平均值进行设定。
图7为图6所示方法确定的好节点的距离序列匹配的示意图,图8为图6所示方法确定的坏节点的距离序列匹配的示意图,其中,sa和sa′分别表示节点信号强度指示距离序列和估算距离序列。
通过图3或图6所示方法,每一个待定位节点都可以确定自己是否为好节点或坏节点,举例来说,本发明实施例还可以采用图9所示方法确定加权节点,以便后续利用加权节点修正坏节点的估算位置坐标,图9为基于图3或图6所示方法确定的好节点确定加权节点的流程示意图,如图9所示,包括:
步骤901、所述待定位节点接收各一跳邻居节点分别广播的第三节点消息,确定所述待定位节点一跳好邻居节点。
假设,所述待定位节点根据自身的节点标识确定为好节点,各所述第三节点消息中包括各一跳邻居节点对应的估算位置坐标和各一跳邻居节点对应的节点标识,所述节点标识包括好节点标识或坏节点标识。
步骤902、根据所述待定位节点自身的估算位置坐标和各一跳好邻居节点的估算位置坐标,分别计算所述待定位节点到各一跳好邻居节点之间的估算距离lij。
步骤903、计算所述待定位节点到各一跳好邻居节点的距离匹配度g(i,j)。
根据公式:
获取所述待定位节点到各一跳好邻居节点的距离匹配度g(i,j),其中ε为平均测距误差,根据实际情况需要的测距精度和定位精度来确定;dij为所述待定位节点分别到各一跳好邻居节点的测量距离dij;例如,可以通过测量所述待定位节点到各一跳好邻居节点的信号强度值来确定测量距离dij。
步骤904、若所述待定位节点的距离匹配度大于预设的距离匹配度,则确定所述待定位节点自身为加权节点,并添加加权标识。
其中,预设的距离匹配度可以根据邻居节点的距离匹配度的平均值进行设定。
举例来说,确定所述待定位节点自身为加权节点之后,可以广播第一节点消息,所述第四节点消息包括所述加权节点的位置坐标和加权标识。
假设所述待定位节点根据自身的节点标识确定为坏节点,可以采用图10所示方法重新确定位置坐标,图10为基于图9所示方法确定的加权节点修正坏节点的流程示意图,如图10所示,包括:
步骤1001、所述待定位节点接收各一跳加权节点分别广播的第四节点消息。
步骤1002、分别计算所述待定位节点到各一跳加权节点之间的估算距离lij和所述待定位节点到各一跳加权节点的测量距离dij。
其中,根据所述待定位节点自身的估算位置坐标和各一跳加权节点的位置坐标,分别计算所述待定位节点到各一跳加权节点之间的估算距离lij;
通过测量所述待定位节点到各一跳加权节点的信号强度值,分别获取所述待定位节点到各一跳加权节点的测量距离dij。
步骤1003、分别将所述待定位节点到各一跳加权节点之间的估算距离lij和对应的测量距离dij进行匹配,确定三个参考距离和参考节点。
具体为:分别将所述待定位节点到各一跳加权节点之间的估算距离lij和对应的测量距离dij进行匹配,若不匹配,则将测量距离dij作为参考距离,将测量距离dij对应的加权节点作为参考节点,采用同样的方法,至少确定三个以上所述参考距离和对应的参考节点。
步骤1004、根据三个所述参考距离和三个所述参考节点的位置坐标,采用三边测量法重新确定所述待定位节点的位置坐标。
图11为本发明实施例二提供的传感器网络节点的定位装置的结构示意图,如图11所示,包括:
接收模块111,用于接收三个信标节点分别广播的第一信标消息,各第一信标消息中包含对应信标节点的虚拟每跳距离和位置坐标;
第一获取模块112,用于分别获取所述待定位节点到所述三个信标节点中每一个信标节点的虚拟跳数;
第一确定模块113,用于根据所述三个信标节点的位置坐标和虚拟每跳距离、所述待定位节点到所述三个信标节点的虚拟跳数,确定所述待定位节点的估算位置坐标。
举例来说,第一获取模块112包括:
第一接收单元,用于接收各上一跳邻居节点发送的同一信标节点的第一信标消息,所述第一信标消息中还包括所述上一跳邻居节点到所述信标节点的虚拟跳数;
第一获取单元,用于根据公式 分别获取所述待定位节点到所述三个信标节点中每一个信标节点的虚拟跳数;
其中,VHik表示所述待定位节点的上一跳邻居节点vi分别到所述信标节点的虚拟跳数;表示所述待定位节点到其上一跳邻居节点的虚拟跳数,Pj表示所述待定位节点的上一跳邻居节点集合,Nj表示所述待定位节点的下一跳邻居节点集合,ζj为Min{|Pi||va∈Nj},为Min{|Ni||vi ∈Pj},|Pi|表示所述待定位节点的上一跳邻居节点的个数,|Ni|表示所述待定位节点的下一跳邻居节点的个数,va∈Nj表示所述待定位节点的下一跳邻居节点中任一个节点,vi ∈Pj表示所述待定位节点的上一跳邻居节点中任一个节点。
举例来说,第一确定模块113包括:
第二获取单元、用于分别将所述待定位节点到所述三个信标节点的虚拟跳数与对应信标节点的虚拟每跳距离相乘,分别获取所述待定位节点到所述三个信标节点的距离;
第一确定单元,用于根据所述待定位节点到所述三个信标节点的距离和所述三个信标节点的位置坐标,采用三边测量法计算得到所述待定位节点的估算位置坐标。
举例来说,接收模块111,还用于接收两跳邻居节点分别广播的第一节点消息,各所述第一节点消息中包括各对应两跳邻居节点的估算位置坐标;
举例来说,所述装置还包括:
第二获取模块114,用于根据所述待定位节点自身的估算位置坐标、各两跳邻居节点的估算位置坐标,分别获取所述待定位节点到各两跳邻居节点的估算距离dij’;根据公式分别计算所述待定位节点到各两跳邻居节点的估算跳数hij’,其中,r为预设的节点传输半径;
第二确定模块115,用于确定所述待定位节点到两跳邻居节点的估算跳数hij’等于两跳的所述两跳邻居节点的个数,若所述个数超过预设个数,则确定所述待定位节点自身为好节点,并添加好节点标识,否则确定所述待定位节点自身为坏节点,并添加坏节点标识。
举例来说,接收模块111,还用于接收各一跳邻居节点分别广播的第二节点消息,各所述第二节点消息中包括各对应一跳邻居节点的估算位置坐标;
对应地,第二获取模块114,还用于根据所述待定位节点自身的估算位置坐标、各一跳邻居节点的估算位置坐标,分别获取所述待定位节点到各一跳邻居节点的估算距离;根据所述待定位节点到各一跳邻居节点的估算距离,将各一跳之内的邻居节点按序排列并分配估算距离序列号a′i,i=1,…n,n为一跳邻居节点的个数;
第二获取模块114,还用于通过测量所述待定位节点到各一跳邻居节点的信号强度值RSS,分别获取所述待定位节点到各一跳邻居节点的测量距离;根据所述待定位节点到各一跳邻居节点的测量距离,将各一跳邻居节点按序排列并分配测量距离序列号ai,i=1,…n,n为一跳邻居节点的个数;
举例来说,第二确定模块115,还用于根据公式
确定所述待定位节点的距离序列匹配度Mi,其中,δi是最长公共子序列长度占整个序列长度的比例,CosDisti是所述估算距离序列和所述测量距离序列的余弦距离;
若所述距离序列匹配度Mi不小于预设的距离序列匹配度,则确定所述待定位节点自身为好节点,并添加好节点标识,否则确定所述待定位节点自身为坏节点,并添加坏节点标识。
举例来说,若所述待定位节点为好节点;
接收模块111,还用于接收各一跳邻居节点分别广播的第三节点消息,确定各一跳邻居节点中的好节点为所述待定位节点的一跳好邻居节点;其中,各所述第三节点消息中包括各对应一跳邻居节点对应的估算位置坐标和各对应一跳邻居节点对应的节点标识,所述节点标识包括好节点标识或坏节点标识;
举例来说,所述装置还包括:
第三获取模块116,用于根据所述待定位节点自身的估算位置坐标和各一跳好邻居节点的估算位置坐标,分别计算所述待定位节点到各一跳好邻居节点之间的估算距离lij;通过测量所述待定位节点到各一跳好邻居节点的信号强度值RSS,分别获取所述待定位节点到各一跳好邻居节点的测量距离dij;
第三确定模块117,用于根据公式
获取所述待定位节点到各一跳好邻居节点的距离匹配度g(i,j),其中ε为平均测距误差;若所述待定位节点的距离匹配度大于预设的距离匹配度,则确定所述待定位节点自身为加权节点,添加加权标识,并广播第四节点消息,所述第四节点消息中包含所述待定位节点的位置坐标和加权标识。
举例来说,若所述待定位节点为坏节点;
接收模块111,还用于接收各一跳邻居节点中的加权节点分别广播的第四节点消息,确定各一跳邻居节点中的加权节点为一跳加权节点,所述第四节点消息中包含所述加权节点的位置坐标和加权标识;
对应地,第三获取模块116,还用于根据所述待定位节点自身的估算位置坐标和各一跳加权节点的位置坐标,分别计算所述待定位节点到各一跳加权节点之间的估算距离lij;通过测量所述待定位节点到各一跳加权节点的信号强度值RSS,分别获取所述待定位节点到各一跳加权节点的测量距离dij;
所述装置还包括:
第四确定模块118,用于分别将所述待定位节点到各一跳加权节点之间的估算距离lij和对应的测量距离dij进行匹配,若不匹配,则确定所述待定位节点到所述不匹配的一跳加权节点之间的测量距离dij为参考距离,并将所述不匹配的一跳加权节点确定为参考节点;确定三个所述参考距离和对应的参考节点,根据三个所述参考距离和三个所述参考节点的位置坐标,采用三边测量法重新确定所述待定位节点的位置坐标。
本发明实施例所述的定位装置具体可以用于执行图2、图3、图6、图9、图10所示的方法,其实现原理和技术效果不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。