传感器开发平台
直播中

王海燕

7年用户 162经验值
私信 关注

什么是TinyDB路由模块?

tinyDB是由美国加州大学伯克利分校的研究人员开发的一个无线传感器网络数据库的原型系统。它将整个无线传感器网络视为一个虚拟的数据库系统,并支持类SQL查询。传感器网络上的所有数据类型,包括各种类型的传感器数据、静态数据都关系表中的一个字段,目前系统的关系表只有一个Sensors表。

回帖(3)

尤立虔

2019-10-23 15:13:15
而实现上,它是由两部分组成的,一部分作为数据库前端,接收普通的查询和控制命令,以及基于事件的查询,同时由TinyDB根据传感器网络的能量自动调整执行周期的查询;另一部分是运行在节点上的嵌入式数据库引擎,具体负责传感器网络中的数据管理,以及同时执行多个查询等。

1 TinyDB构成及软件介绍

TinyDB系统主要是由客户端、TinvDB Server和传感器网络节点端三个部分组成。客户端安装有基于Java的应用程序接口(TinyDB客户端API),用户通过该接口来使用TinyDB。传感器网络中的每一个节点都会安装TinvDB的传感器网络软件(TinyDB QP)。

TniyDB的客户端软件包括两部分:一部分是类似于SOL语言的查询语言TinySQL,是供终端用户使用的。它屏蔽了无线传感器网络的细节,通过作为应用接口的数据库前端,用户看到的是一个数据库系统,故只需要使用类SOL进行数据查询检索即可。即:



另一部分是基于Java的应用程序界面,主要支持用户使用TinyDB编写应用程序构成,主要功能包括查询请求的接收、验证、优化,查询的管理和查询结果的接收,发送控制命令,与无线传感器网络相连接,建立数据库与用户交互的界面等。图1所示展示了TinyDB应用程序的功能。



传感器网络节点端的软件包括四个用nesC语言编写的构件:传感器节点目录及模式管理器、查询处理器、存储管理器和网络拓扑管理器。传感器节点目录负责记录每个节点的属性”。

查询处理器负责完成查询处理工作,使用传感器目录存储的信息可以获得传感器节点的属性。存储管理器由MemAlloc.allocComplete()和MemAlloc.compactComplete()来触发相应的事件。网络拓扑管理器可为TinyDB处理所有传感器节点到传感器节点以及传感器节点到基站间的通信,即路由查询和数据信息。

举报

李琳

2019-10-23 15:13:21
2  网络拓扑模块的具体分析

网络拓扑管理器使用简单的树维护算法来建立一个以汇聚节点为根节点的树型拓扑结构,每个传感器节点保存一个邻居节点表,并在这些邻居节点中选择一个节点作为它在路由树中的父节点。其具体实现流程图如图2所示。



2.1  发送阶段分析

在发送阶段,首先是初始化,即设置一些参数为默认值,可设置汇聚节点(节点ID号为0)父节点为自身,跳数为0。计算gUpdateInterval=TADA_TO_ROUTE_RATIO*DATA_FREQ,也就是一个路由更新报文的时间。

然后是执行TimerTask(),每隔gUpdateInterval的时间执行一次TimerTask ()任务。主要包括更新路由表,选择父节点,发送数据包等。

更新路由表就是通过计数器控制每隔十个gUpdateInterval触发一次做邻居表项的更新计算,可由updateTable()调用updateEst ()来实现。主要是更新路由表项中的跳数和通信代价。

计算代价函数主要是链路估计,其基本思想是由节点统计一定时间内从某个邻居节点接收到的分组占该邻居节点发往该节点的分组数量的比重。链路估计包括发送代价估计和接收代价估计两个部分,并用这两个值来表示链路的双向通信代价。此外,还应综合原先的链路估计以决定新的链路估计值。

这里以节点A为例,经过一段时间的统计后,它可以得到来自邻居节点B的接收分组数目,而节点B会在自己的路由状态广播中告知向节点A发送分组的数目。这二者的商就是节点A接收节点B发送的分组成功率,可用RcvEstA/B表示,用公式表示如下:

RcvEstA/B=RcvCountA/SendCountB。

同样,节点B也可以计算出接收节点A的发送分组成功率,并在节点B的周期性路由状态广播中报告自己到所有邻居节点的接收成功率,其邻居节点A则将节点B的接收成功率作为自己的发送成功率,用公式表示为:

SendEstA/B=RcvEstB/A

节点到邻居节点的双向链路估计是节点发送和接收成功率的乘积:

Est=SendEst·RctEst。

由于节点在短时间内收到的分组数量随时间不同,其抖动比较大,因此,为了减少链路评估的抖动,可采用指数加权位移平均(Exponential Weighted Moving Average,EWMA)来计算最终的链路估计值。EstFinal=EstOld*α+EstNew*(1-α)。在现实中,α常取0.75。

选择父节点可由chooseParent()函数来实现。当节点周期性广播路由状态信息时,每个节点都会相应的更新邻居节点到汇聚节点的跳数,并根据计算出来的代价函数来选择父节点。节点可按照路数小的优先当父节点,在跳数相同的条件下,可选择链路质量比较好的作为父节点。其实现流程如图3所示。


最后是数据包发送,可由SendRouteTask()函数把节点更新的消息(比如到根节点的跳数,以及链路代价等信息)封装到一个路由分组并广播所有邻居节点。

2.2  接收阶段分析

当节点收到一个数据包时,首先会检查自己的路由表中是否已经存在这个表项。如果存在,则退出。如果不存在,则需要在路由表中加入这个新的表项。这通常可由updateNbrCounters()函数实现。

路由表的大小一般由ROUTE_TABLE_SIZE决定,其值等于16。当路由表表项未满时,则可直接加入该表项。当路由表已满时,则应替换路由表中的某一个表项。替换发送估计值最小的节点,因为发送估计值越小,表明到该节点的通信质量越差。先由findEntryToBeReplaced()函数找到被替代那一表项的id号,并把这一项用newEntry()函数来清空,然后再把新的表项加入到路由表中。

3  网络拓扑模块的改进

采用上面的协议具有明显的缺点。首先,由于采用跳数小是作为选择父节点的首要条件,既使到根节点的链路质量不好,但由于跳数小,节点仍然会选择该节点作为父节点;另外,节点对链路质量的评估和最近一段时间的信道质量以及通信量都有关系,所以,信道质量会产生抖动现象。这样,子节点经常会在几个链路质量比较接近的父节点之间摇摆,从而造成拓扑的不稳定。本文即对此进行了改进。

首先是在chooseParent()中进行改进,即在选择父节点时,按照到根节点的总的成本来计算,即以到根节点的总代价最小为原则。并在算出代价后和原来的父节点代价作比较。如果低于某个数值时,才换父节点,这就避免了在几个相近的父节点间来回摇摆。其实现程序如图4所示。


举报

杨伟

2019-10-23 15:13:24
4  实验结果分析

把TinyDB的程序可在TinyOS的仿真工具Tossim中运行,然后分别将改进的路由协议与原来的路由协议在TOSSIM中进行仿真,图5所示是其仿真结果。



该仿真设定的模拟条件和假设前提为:时间间隔设定为5秒,即每隔5秒触发一次查询;设定模拟时间为300秒,分别记录10、20、30、40个节点的情况,每次都做20次,根据查询结果,其中有一项parent-id,故可知道该节点的父节点。其统计的父节点变化次数如表1所列。



由表1的实验数据分析可知,所改进的路由模块由于减少了父节点的变换次数而增加了网络的稳定性能。但在超过了16个节点之后,父节点的变化次数要明显增多,原因是在路由表中最多可心存16个条目。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分