发明名称 一种基于人工势场的无线传感器网络路由方法
摘要 本发明涉及一种基于人工势场的无线传感器网络路由方法,分为四个步骤:初始化阶段、路由建立阶段、路由上传阶段和数据发送阶段,解决了现有技术中路由开销和能耗大、路由选择不具备均衡负载功能的问题,降低了计算复杂性,避免了大量的路由开销,提高了能效,并且可以起到均衡网络负载功能。
申请公布号 CN103906166B 申请公布日期 2017.04.26
申请号 CN201410137166.8 申请日期 2014.04.04
申请人 西北工业大学 发明人 张若南;王世超;蔡琳
分类号 H04W40/04(2009.01)I;H04W40/10(2009.01)I;H04W84/18(2009.01)I 主分类号 H04W40/04(2009.01)I
代理机构 西北工业大学专利中心 61204 代理人 王鲜凯
主权项 一种基于人工势场的无线传感器网络路由方法,其特征在于步骤如下:步骤1:初始化阶段:a)对网络中的汇聚节点进行编码,设置其ID等于1;对网络中的传感器节点进行编码,使它们的ID互不相同且均不等于1,然后所有传感器节点将自己的空洞标志位初始化为“false”;b)传感器节点通过定位装置获取自身位置坐标P<sub>i</sub>(x<sub>i</sub>,y<sub>i</sub>),其中x<sub>i</sub>、y<sub>i</sub>分别为其所在位置点的横、纵坐标值;传感器节点通过电源管理模块读取自身剩余电量V<sub>i</sub>;c)汇聚节点采用泛洪方式广播自身位置坐标P(x<sub>1</sub>,y<sub>1</sub>),传感器节点接收汇聚节点的自身位置坐标并存储,计算自己到汇聚节点的距离d<sub>i_1</sub>:<maths num="0001"><math><![CDATA[<mrow><msub><mi>d</mi><mrow><mi>i</mi><mo>_</mo><mn>1</mn></mrow></msub><mo>=</mo><msqrt><mrow><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><msub><mi>x</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>y</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup></mrow></msqrt></mrow>]]></math><img file="FDA0001128239030000011.GIF" wi="670" he="102" /></maths>式中,下标i_1表示从ID为i的传感器节点到ID为1的汇聚节点的距离区间;d)所有传感器节点向四周广播“hello”数据包,数据包包含自己的ID、位置信息及剩余电量信息;e)当传感器节点i收到邻居节点j发来的“hello”数据包后,所述的邻居节点为能够直接与本传感器节点互相通信的传感器节点或汇聚节点,传感器节点i取出数据包中的位置信息,记为P<sub>j</sub>(x<sub>j</sub>,y<sub>j</sub>),计算自己到该邻居节点距离d<sub>i_j</sub>和邻居节点j到汇聚节点的距离d<sub>j_1</sub>:<maths num="0002"><math><![CDATA[<mrow><msub><mi>d</mi><mrow><mi>i</mi><mo>_</mo><mi>j</mi></mrow></msub><mo>=</mo><msqrt><mrow><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>-</mo><msub><mi>x</mi><mi>j</mi></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>i</mi></msub><mo>-</mo><msub><mi>y</mi><mi>j</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></mrow></msqrt></mrow>]]></math><img file="FDA0001128239030000012.GIF" wi="694" he="102" /></maths><maths num="0003"><math><![CDATA[<mrow><msub><mi>d</mi><mrow><mi>j</mi><mo>_</mo><mn>1</mn></mrow></msub><mo>=</mo><msqrt><mrow><msup><mrow><mo>(</mo><msub><mi>x</mi><mi>j</mi></msub><mo>-</mo><msub><mi>x</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mo>+</mo><msup><mrow><mo>(</mo><msub><mi>y</mi><mi>j</mi></msub><mo>-</mo><msub><mi>y</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup></mrow></msqrt></mrow>]]></math><img file="FDA0001128239030000013.GIF" wi="693" he="103" /></maths>式中,下标i_j表示从传感器节点i到ID为j邻居节点的距离区间,下标j_1表示从邻居节点j到汇聚节点的距离区间;将d<sub>j_1</sub>和d<sub>i_1</sub>作比较,如果d<sub>j_1</sub><d<sub>i_1</sub>,则将邻居节点的ID、位置信息、距离d<sub>i_j</sub>和剩余能量信息放入邻居集合Ω<sub>1</sub>;如果d<sub>j_1</sub>≥d<sub>i_1</sub>,则将邻居节点的ID、位置信息、距离d<sub>i_j</sub>和剩余能量信息放入邻居集合Ω<sub>2</sub>;步骤e一直重复到所有传感器节点都接收了自己所有邻居节点的“hello”数据包并完成子步骤内的计算过程;f)每个传感器节点开始检查自己的邻居集合Ω<sub>1</sub>和Ω<sub>2</sub>,如果Ω<sub>1</sub>和Ω<sub>2</sub>都是空集,该传感器节点报废;如果Ω<sub>1</sub>是空集,Ω<sub>2</sub>不是空集,该传感器节点将自己的空洞标志位更新为“true”;步骤2:路由建立阶段:a)传感器节点检查自身的空洞标志位,根据空洞标志位的“true”或“false”选择不同的路由请求方案:当空洞标志位为“false”,计算出传感器节点i所受的合力在x和y方向上的分量F<sub>ix</sub>、F<sub>iy</sub>:<maths num="0004"><math><![CDATA[<mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><msub><mi>F</mi><mrow><mi>i</mi><mi>x</mi></mrow></msub><mo>=</mo><mfrac><mrow><msub><mi>V</mi><mn>1</mn></msub><mo>&times;</mo><mrow><mo>(</mo><msub><mi>x</mi><mn>1</mn></msub><mo>-</mo><msub><mi>x</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow><msubsup><mi>d</mi><mrow><mi>i</mi><mo>_</mo><mn>1</mn></mrow><mn>3</mn></msubsup></mfrac><mo>+</mo><munder><mo>&Sigma;</mo><mrow><mi>j</mi><mo>&Element;</mo><msub><mi>&Omega;</mi><mn>1</mn></msub></mrow></munder><mfrac><mrow><msub><mi>V</mi><mi>j</mi></msub><mo>&times;</mo><mrow><mo>(</mo><msub><mi>x</mi><mi>j</mi></msub><mo>-</mo><msub><mi>x</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow><msubsup><mi>d</mi><mrow><mi>i</mi><mo>_</mo><mi>j</mi></mrow><mn>3</mn></msubsup></mfrac></mrow></mtd></mtr><mtr><mtd><mrow><msub><mi>F</mi><mrow><mi>i</mi><mi>y</mi></mrow></msub><mo>=</mo><mfrac><mrow><msub><mi>V</mi><mn>1</mn></msub><mo>&times;</mo><mrow><mo>(</mo><msub><mi>y</mi><mn>1</mn></msub><mo>-</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow><msubsup><mi>d</mi><mrow><mi>i</mi><mo>_</mo><mn>1</mn></mrow><mn>3</mn></msubsup></mfrac><mo>+</mo><munder><mo>&Sigma;</mo><mrow><mi>j</mi><mo>&Element;</mo><msub><mi>&Omega;</mi><mn>1</mn></msub></mrow></munder><mfrac><mrow><msub><mi>V</mi><mi>j</mi></msub><mo>&times;</mo><mrow><mo>(</mo><msub><mi>y</mi><mi>j</mi></msub><mo>-</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow><msubsup><mi>d</mi><mrow><mi>i</mi><mo>_</mo><mi>j</mi></mrow><mn>3</mn></msubsup></mfrac></mrow></mtd></mtr></mtable></mfenced>]]></math><img file="FDA0001128239030000021.GIF" wi="763" he="311" /></maths>式中,V<sub>1</sub>的值等于<img file="FDA0001128239030000022.GIF" wi="391" he="167" />其中K是常数,d<sub>i_1</sub>、d<sub>i_j</sub>、d<sub>j_1</sub>分别表示从传感器节点i到汇聚节点、从传感器节点i到邻居节点j、从邻居节点j到汇聚节点的距离,V<sub>j</sub>表示邻居节点j的剩余电量;利用电场引力分量F<sub>ix</sub>和F<sub>iy</sub>得到电场合力的方向向量<img file="FDA0001128239030000023.GIF" wi="78" he="78" /><img file="FDA0001128239030000024.GIF" wi="596" he="191" />计算电场合力的方向向量<img file="FDA0001128239030000025.GIF" wi="58" he="79" />与传感器节点i到邻居节点j的连线的夹角θ<sub>ij</sub>,其中j∈Ω<sub>1</sub>:<maths num="0005"><math><![CDATA[<mrow><msub><mi>&theta;</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub><mo>=</mo><mo>|</mo><msup><mi>cos</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup><mrow><mo>(</mo><mfrac><mrow><mo>(</mo><msub><mi>x</mi><mi>j</mi></msub><mo>-</mo><msub><mi>x</mi><mi>i</mi></msub><mo>)</mo><mo>&times;</mo><msub><mi>F</mi><mrow><mi>i</mi><mi>x</mi></mrow></msub><mo>+</mo><mo>(</mo><msub><mi>y</mi><mi>j</mi></msub><mo>-</mo><msub><mi>y</mi><mi>i</mi></msub><mo>)</mo><mo>&times;</mo><msub><mi>F</mi><mrow><mi>i</mi><mi>y</mi></mrow></msub></mrow><mrow><msub><mi>d</mi><mrow><mi>i</mi><mo>_</mo><mi>j</mi></mrow></msub><mo>&times;</mo><msqrt><mrow><msubsup><mi>F</mi><mrow><mi>i</mi><mi>x</mi></mrow><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>F</mi><mrow><mi>i</mi><mi>y</mi></mrow><mn>2</mn></msubsup></mrow></msqrt></mrow></mfrac><mo>)</mo></mrow><mo>|</mo></mrow>]]></math><img file="FDA0001128239030000026.GIF" wi="982" he="223" /></maths>从邻居集合Ω<sub>1</sub>中选择使θ<sub>ij</sub>最小的对应邻居节点作为下一跳,发送路由请求数据包,该路由请求数据包包括下一跳ID、自身的ID以及自己的空洞标志位;当空洞标志位为“true”,传感器节点从集合Ω<sub>2</sub>中选择d<sub>j_1</sub>最小的对应邻居节点作为下一跳,发送路由请求数据包,路由请求数据包中包括下一跳ID、自身的ID和空洞标志位;b)传感器节点收到来自邻居节点的路由请求数据包,取出其中的ID和空洞标志位信息;如果空洞标志位是“true”,将该ID对应的邻居节点从自身的邻居集合Ω<sub>1</sub>或Ω<sub>2</sub>中删除,重新执行步骤1的步骤f)更新自身的路由空洞标志位;如果空洞标志位是“false”,传感器节点检查自身的空洞标志位进行路由答复:如果是“true”则给路由请求数据包的发送者反馈一个路由错误答复数据包,该数据包的路由答复域的值是“0”;如果是“false”则给路由请求数据包的发送者反馈一个路由确认答复数据包,该数据包的路由答复域的值是“1”;c)传感器节点收到反馈的路由答复数据包后,解析其中的路由答复域,如果路由答复域的值是“1”,则从当前节点到选定下一跳节点的路由建立成功;如果路由答复域的值是“0”,则路由建立失败,将选定下一跳节点从自身的邻居集合Ω<sub>1</sub>或Ω<sub>2</sub>中删除,执行步骤1的步骤f)更新自身的路由空洞标志位后,再重新执行步骤2;步骤3:路由上传阶段:a)源节点i生成一个路由上传包,路由上传包包括目的节点信息域、源节点信息域和中继节点信息域,将该路由上传包发送给自己的邻居节点j;邻居节点j收到该数据包后,将包中的中继节点域取出,顺序加入自己的ID,并修改下一跳ID,然后重新打包,发给自己的下一跳节点k;节点k将包中的中继节点域取出,顺序加入自己ID,并修改下一跳ID,然后重新打包,发给汇聚节点;b)汇聚节点收到路由上传包后,把源节点信息域和中继节点信息域的信息取出,得到了从源节点到汇聚节点的完整路由信息,当所有传感器节点的路由上传包都被汇聚节点接收后,汇聚节点就拥有了整个网络的完整路由表;步骤4:数据发送阶段:a)汇聚节点查询路由表,找到被查询节点所对应的路由信息,将路由信息和查询信息打包成查询信息包,并通过路由表发送给下一跳;中继节点收到该查询信息包,将包中的路由信息域取出,查询自己所应转发的下一跳节点ID,修改包中的下一跳ID域值为查得的结果,将路由信息域中自己的ID部分删除,重新打包该数据包后向查得的下一跳发送,直至查询数据包到达被查询节点;b)源节点收到查询信息包后,将数据打包后发送给自己的下一跳节点,下一跳节点收到此数据包后,继续向自己的下一跳节点转发,直至数据包抵达汇聚节点。
地址 710072 陕西省西安市友谊西路127号