一种基于人工势场的无线传感器网络路由方法
技术领域
本发明涉及通信领域,具体涉及一种基于人工势场的无线传感器网络路由方法。
背景技术
无线传感器网络具有部署灵活、扩展方便、价格低廉等优点。然而传感器节点一般是由电池供电,因此能量是影响无线传感器网络性能的关键问题。路由是选择数据包从信源节点到目标节点的转发路径,并决定数据包在路径上如何转发的方法。无线传感器网络的路由方法需要特别注意节能特性。人工势场概念最早由Khatib在文献“Real-time obstacle avoidance for manipulators and mobile robots[J].The internationaljournal of robotics research,1986,5(1):90-98”中提出,应用于足球机器人避障路径规划。其基本思想是构造目标位姿引力场和障碍物周围斥力场共同作用的人工势场,搜索势函数的下降方向来寻找无碰撞路径。
文献“伪三维的地理位置无线传感器网络路由算法,《计算机工程与应用》,http://www.cnki.net/kcms/detail/11.2127.TP.20121121.1100.012.html”公开了一种基于地理位置信息的无线传感器路由方法。文献中所提出的路由方法在空间三维电子地图上进行离散取点,计算相邻点之间的空间欧氏距离,将相邻关系映射到二维平面上,然后运用最短路径计算方法,计算出地图表面这些离散点之间沿起伏地势的近似最短路径。传感器节点根据自身地理位置,采用一种四点最近定位方法将自身定位到最近的地图离散点,并根据离散点之间的最短距离逼近实际起伏地势上的最短路径,然后寻找邻居节点采样点中距离目标节点采样点路由最短的一个,以该采样点对应的邻居节点作为下一跳,并转发数据,直至将数据传到目标节点。文献所介绍的无线传感器网络路由方法存在如下问题:计算最短路径时使用全局地图信息,需要大量的路由开销,计算方法复杂,能耗较大;所选择的路由只是地理位置上的最短,未考虑均衡网络负载功能。
发明内容
要解决的技术问题
为了避免现有技术中路由开销和能耗大、路由选择不具备均衡负载功能的问题,本发明提供一种新型的基于人工势场的无线传感器网络路由方法,降低了计算复杂性,避免了大量的路由开销,提高了能效,并且可以起到均衡网络负载功能。
技术方案
一种基于人工势场的无线传感器网络路由方法,其特征在于步骤如下:
步骤1:初始化阶段:
a)对网络中的汇聚节点进行编码,设置其ID等于1;对网络中的传感器节点进行编码,使它们的ID互不相同且均不等于1,然后所有传感器节点将自己的空洞标志位初始化为“false”;
b)传感器节点通过定位装置获取自身位置坐标Pi(xi,yi),其中xi、yi分别为其所在位置点的横、纵坐标值;传感器节点通过电源管理模块读取自身剩余电量Vi;
c)汇聚节点采用泛洪方式广播自身位置坐标P(x1,y1),传感器节点接收汇聚节点的自身位置坐标并存储,计算自己到汇聚节点的距离di_1:
式中,下标i_1表示从ID为i的传感器节点到ID为1的汇聚节点的距离区间;
d)所有传感器节点向四周广播“hello”数据包,数据包包含自己的ID、位置信息及剩余电量信息;
e)当传感器节点i收到邻居节点j发来的“hello”数据包后,所述的邻居节点为能够直接与本传感器节点互相通信的传感器节点或汇聚节点,传感器节点i取出数据包中的位置信息,记为Pj(xj,yj),计算自己到该邻居节点距离di_j和邻居节点j到汇聚节点的距离dj_1:
式中,下标i_j表示从传感器节点i到ID为j邻居节点的距离区间,下标j_1表示从邻居节点j到汇聚节点的距离区间;将dj_1和作di_1比较,如果dj_1<di_1,则将邻居节点的ID、位置信息、距离di_j和剩余能量信息放入邻居集合Ω1;如果dj_1≥di_1,则将邻居节点的ID、位置信息、距离di_j和剩余能量信息放入邻居集合Ω2;
步骤e一直重复到所有传感器节点都接收了自己所有邻居节点的“hello”数据包并完成子步骤内的计算过程;
f)每个传感器节点开始检查自己的邻居集合Ω1和Ω2,如果Ω1和Ω2都是空集,该传感器节点报废;如果Ω1是空集,Ω2不是空集,该传感器节点将自己的空洞标志位更新为“true”;
步骤2:路由建立阶段:
a)传感器节点检查自身的空洞标志位,根据空洞标志位的“true”或“false”选择不同的路由请求方案:
当空洞标志位为“false”,计算出传感器节点i所受的合力在x和y方向上的分量Fix、Fiy:
式中,V
1的值等于
其中K是常数,d
i_1、d
i_j、d
j_1分别表示从传感器节点i到汇聚节点、从传感器节点i到邻居节点j、从邻居节点j到汇聚节点的距离,V
j表示邻居节点j的剩余电量;利用电场引力分量F
ix和F
iy得到电场合力的方向向量
计算电场合力的方向向量
与传感器节点i到邻居节点j的连线的夹角θ
ij,其中j∈Ω
1:
从邻居集合Ω1中选择使θij最小的对应邻居节点作为下一跳,发送路由请求数据包,该路由请求数据包包括下一跳ID、自身的ID以及自己的空洞标志位;
当空洞标志位为“true”,传感器节点从集合Ω2中选择dj_1最小的对应邻居节点作为下一跳,发送路由请求数据包,路由请求数据包中包括下一跳ID、自身的ID和空洞标志位;
b)传感器节点收到来自邻居节点的路由请求数据包,取出其中的ID和空洞标志位信息;如果空洞标志位是“true”,将该ID对应的邻居节点从自身的邻居集合Ω1或Ω2中删除,重新执行步骤1的步骤f)更新自身的路由空洞标志位;如果空洞标志位是“false”,传感器节点检查自身的空洞标志位进行路由答复:如果是“true”则给路由请求数据包的发送者反馈一个路由错误答复数据包,该数据包的路由答复域的值是“0”;如果是“false”则给路由请求数据包的发送者反馈一个路由确认答复数据包,该数据包的路由答复域的值是“1”;
c)传感器节点收到反馈的路由答复数据包后,解析其中的路由答复域,如果路由答复域的值是“1”,则从当前节点到选定下一跳节点的路由建立成功;如果路由答复域的值是“0”,则路由建立失败,将选定下一跳节点从自身的邻居集合Ω1或Ω2中删除,执行步骤1的步骤f)更新自身的路由空洞标志位后,再重新执行步骤2;
步骤3:路由上传阶段:
a)源节点i生成一个路由上传包,路由上传包包括目的节点信息域、源节点信息域和中继节点信息域,将该路由上传包发送给自己的邻居节点j;邻居节点j收到该数据包后,将包中的中继节点域取出,顺序加入自己的ID,并修改下一跳ID,然后重新打包,发给自己的下一跳节点k;节点k将包中的中继节点域取出,顺序加入自己ID,并修改下一跳ID,然后重新打包,发给汇聚节点;
b)汇聚节点收到路由上传包后,把源节点信息域和中继节点信息域的信息取出,得到了从源节点到汇聚节点的完整路由信息,当所有传感器节点的路由上传包都被汇聚节点接收后,汇聚节点就拥有了整个网络的完整路由表;
步骤4:数据发送阶段:
a)汇聚节点查询路由表,找到被查询节点所对应的路由信息,将路由信息和查询信息打包成查询信息包,并通过路由表发送给下一跳;中继节点收到该查询信息包,将包中的路由信息域取出,查询自己所应转发的下一跳节点ID,修改包中的下一跳ID域值为查得的结果,将路由信息域中自己的ID部分删除,重新打包该数据包后向查得的下一跳发送,直至查询数据包到达被查询节点;
b)源节点收到查询信息包后,将数据打包后发送给自己的下一跳节点,下一跳节点收到此数据包后,继续向自己的下一跳节点转发,直至数据包抵达汇聚节点。
所述的K的取值范围为[0.5,5]。
有益效果
本发明提出的一种基于人工势场的无线传感器网络路由方法,具有如下的有益效果:
第一,本发明所涉及的路由方法算法简单,无需大量复杂的计算,适合于在无线传感器网络中部署;
第二,本发明所涉及的路由方法避免了全局网络信息的交换,只需要利用一跳邻居节点信息,路由开销小;
第三,本发明创造性地将人工势场概念应用于无线传感器网络路由问题。根据静电场原理,负电荷所受的电场力指向于高电势方向,在本发明中高电势的方向一般对应于邻居节点密集的方向。而且本发明中下一跳的选择主要依赖于电场引力合力的方向,所以路由选择更倾向于偏向节点密度高的区域。也即,节点密度高的区域将承担更多的网络负载,从而通过路由间接地均衡了网络负载。
第四,本发明所涉及的路由方法可以有效提高网络使用寿命。
第五,本发明所涉及的路由方法鲁棒性好,路由成功率高。
附图说明
图1典型的包含传感器节点和汇聚节点的网络
图2路由空洞情况
图3根据电场力合力方向选择下一跳节点
图4陷入路由空洞时的路由选择
图5路由上传过程
图6汇聚节点发送查询消息
具体实施方式
现结合实施例、附图对本发明作进一步描述:
图1是一种典型的网络拓扑,其中以节点M为中心的虚线圆表示节点M的无线通信半径。穿越节点M的弧线的中心是汇聚节点,半径是M到汇聚节点距离。按照以下步骤进行初始化:
a)对网络中的汇聚节点进行编码,设置其ID等于1;对网络中的传感器节点进行编码,使它们的ID互不相同且均不等于1,然后所有传感器节点将自己的空洞标志位初始化为“false”;
b)传感器节点通过定位装置获取自身位置坐标Pi(xi,yi),其中xi、yi分别为其所在位置点的横、纵坐标值;传感器节点通过电源管理模块读取自身剩余电量Vi;
c)汇聚节点采用泛洪方式广播自身位置坐标P(x1,y1),传感器节点接收汇聚节点的自身位置坐标并存储,计算自己到汇聚节点的距离di_1:
式中,下标i_1表示从ID为i的传感器节点到ID为1的汇聚节点的距离区间;
d)所有传感器节点向四周广播“hello”数据包,数据包包含自己的ID、位置信息及剩余电量信息,其格式如下:
e)当传感器节点i收到邻居节点j发来的“hello”数据包后,所述的邻居节点为能够直接与本传感器节点互相通信的传感器节点或汇聚节点,传感器节点i取出数据包中的位置信息,记为Pj(xj,yj),计算自己到该邻居节点距离di_j和邻居节点j到汇聚节点的距离dj_1:
式中,下标i_j表示从传感器节点i到ID为j邻居节点的距离区间,下标j_1表示从邻居节点j到汇聚节点的距离区间;将dj_1和作di_1比较,如果dj_1<di_1,则将邻居节点的ID、位置信息、距离di_j和剩余能量信息放入邻居集合Ω1;如果dj_1≥di_1,则将邻居节点的ID、位置信息、距离di_j和剩余能量信息放入邻居集合Ω2。如图1所示,虚线圆所包括的传感器节点(除去M)是节点M的邻居节点,虚线弧将M的邻居节点分为两个部分:到汇聚节点的距离比M近和到汇聚节点的距离比M远。这两部分邻居分别被M放入集合Ω1和Ω2中。
步骤e一直重复到所有传感器节点都接收了自己所有邻居节点的“hello”数据包并完成子步骤内的计算过程;
f)每个传感器节点开始检查自己的邻居集合Ω1和Ω2,如果Ω1和Ω2都是空集,说明节点不在网络拓扑内,该传感器节点报废;如果Ω1是空集,Ω2不是空集,说明存在邻居节点,但邻居到汇聚节点的距离都比自己的更远,该传感器节点将自己的空洞标志位更新为“true”;这种情况如图2所示,节点N的通信半径内存在邻居节点,但邻居到汇聚节点的距离都比自己的远,本方法中称这种情况为“陷入了路由空洞”,陷入路由空洞的节点需要将空洞标志位置为“true”。
等待初始化工作完成后,如果对于节点j,dj_1小于节点j的通信半径,也即可直达汇聚节点,则设定下一跳节点ID为1,并将空洞标志为更新为“false”,然后直接执行路由上传阶段。否则,网络执行路由建立阶段:
a)路由请求:传感器节点检查自身的空洞标志位,根据空洞标志位的“true”或“false”选择不同的路由请求方案:
当空洞标志位为“false”,计算出传感器节点i所受的合力在x和y方向上的分量Fix、Fiy:
式中,V
1的值等于
其中K是常数,其值介于区间[0.5,5]内,并且需要在网络部署之前设定好,K值将直接影响路由的选择结果,K值较小时,路由结果将偏重于均衡负载,K值较大时,路由结果将偏重于减少跳数。d
i_1、d
i_j、d
j_1分别表示从传感器节点i到汇聚节点、从传感器节点i到邻居节点j、从邻居节点j到汇聚节点的距离,V
j表示邻居节点j的剩余电量;利用电场引力分量F
ix和F
iy得到电场合力的方向向量
计算电场合力的方向向量
与传感器节点i到邻居节点j的连线的夹角θ
ij,其中j∈Ω
1:
从邻居集合Ω1中选择使θij最小的对应邻居节点作为下一跳,如图3所示,连线Lij,Lik和Lil中,Lik与合力方向向量夹角值最小,故选择邻居节点k作为节点i的下一跳。确定了下一跳后,发送路由请求数据包,该路由请求数据包包括下一跳ID、自身的ID以及自己的空洞标志位,格式如下:
当空洞标志位为“true”,节点遭遇了路由空洞,也即节点的邻居中,没有比自己更靠近汇聚节点的了,此时需要采用备用路由方案。传感器节点从集合Ω2中选择dj_1最小的对应邻居节点作为下一跳,也即到汇聚节点距离最短的一个作为下一跳。如图4所示,节点i陷入了路由空洞,其邻居集合Ω2中有四个节点:j、k、l、p,节点i从中选择距离汇聚节点最近的一个,也即节点j,作为下一跳。确定下一跳后,向其发送路由请求数据包,路由请求数据包中包括下一跳ID、自身的ID和空洞标志位,格式如下:
b)路由答复:传感器节点收到来自邻居节点的路由请求数据包,取出其中的ID和空洞标志位信息;如果空洞标志位是“true”,说明该邻居陷入了路由空洞。将该ID对应的邻居节点从自身的邻居集合Ω1或Ω2中删除,重新执行步骤1的步骤f)更新自身的路由空洞标志位;如果空洞标志位是“false”,传感器节点检查自身的空洞标志位进行路由答复:如果是“true”则给路由请求数据包的发送者反馈一个路由错误答复数据包,该数据包的路由答复域的值是“0”,格式如下:
如果是“false”则给路由请求数据包的发送者反馈一个路由确认答复数据包,该数据包的路由答复域的值是“1”,格式如下:
c)路由确认:传感器节点收到反馈的路由答复数据包后,解析其中的路由答复域,如果路由答复域的值是“1”,则从当前节点到选定下一跳节点的路由建立成功;如果路由答复域的值是“0”,则路由建立失败,将选定下一跳节点从自身的邻居集合Ω1或Ω2中删除,执行步骤1的步骤f)更新自身的路由空洞标志位后,再重新执行步骤2。
路由建立阶段完成后,进入路由上传阶段。按照以下步骤完成对汇聚节点的路由上传:
a)如图5所示的路由上传过程:源节点i生成一个路由上传包,路由上传包包括目的节点信息域、源节点信息域和中继节点信息域,其格式如下:
将该路由上传包发送给自己的邻居节点j;邻居节点j收到该数据包后,将包中的中继节点域取出,顺序加入自己的ID,并修改下一跳ID,然后重新打包,发给自己的下一跳节点k,此时的路由上传包格式如下:
节点k将包中的中继节点域取出,顺序加入自己ID,并修改下一跳ID,然后重新打包,发给汇聚节点,此时的路由上传包格式如下:
b)解析路由上传包:汇聚节点收到路由上传包后,把源节点信息域和中继节点信息域的信息取出,得到了从源节点到汇聚节点的完整路由,如图5所示,汇聚节点通过节点k收到了源节点i的路由上传包,将源节点域和中继节点域取出,即可得到自身到源节点路由信息:1→k→j→i。当所有传感器节点的路由上传包都被汇聚节点接收后,汇聚节点就拥有了整个网络的完整路由表。
路由上传阶段结束后,网络开始数据发送阶段:
a)下行数据发送:汇聚节点查询路由表,找到被查询节点所对应的路由信息,将路由信息和查询信息打包成查询信息包,格式如下:
报文头 |
目的节点ID |
源节点ID |
下一跳ID |
路由信息 |
查询内容 |
这里源节点是汇聚节点,故源节点ID域的值应该为1,并通过路由表发送给下一跳;中继节点收到该查询信息包,将包中的路由信息域取出,查询自己所应转发的下一跳节点ID,修改包中的下一跳ID域值为查得的结果,将路由信息域中自己的ID部分删除,重新打包该数据包后向查得的下一跳发送,直至查询数据包到达被查询节点。此过程如图6所示,汇聚节点要向节点i发送查询消息,则生成一个查询消息包如下:
将该包转发给节点k,节点k收到后将路由信息取出,查到自己所应转发的下一跳为节点j,然后将路由信息中自己的ID删除,更新下一跳节点ID,重新打包,得到如下消息查询包:
节点k将该包转发给下一跳节点j,节点j收到后将路由信息取出,查到自己所应转发的下一跳为节点i,然后将路由信息中自己的ID删除,更新下一跳节点ID,重新打包,得到如下消息查询包:
节点j把消息查询包发送给下一跳节点i,至此查询消息成功抵达目标节点。
b)上行数据发送:上行数据发送指源节点向汇聚节点发送数据。源节点收到查询信息包后,将数据打包后发送给自己的下一跳节点,数据包格式如下:
报文头 |
目的节点ID |
源节点ID |
下一跳ID |
数据内容 |
这里目的节点是汇聚节点,故目的节点ID域的值应该为1。
中继节点收到此数据包后,查询自己在路由建立阶段所确定的下一跳ID,并用该值更新数据包中的下一跳ID域,然后重新打包后将数据包转发给自己的下一跳节点。所有的中继节点均执行此过程,直至数据包抵达目的节点。