针对无线传感器网络的仿真平台(上)
时间:2008-03-12 来源:zcwuwei
TOSSIM、TOSSF与SENS均能够对TinyOS程序进行仿真。
TOSSIM(TinyOS mote SIMulator)是为运行于MICA系列传感器节点的TjnyOS应用程序而设计的,它与TinyOS一起发行,包括一个可与仿真交互的可视化仿真过程图形用户界面TinyViz(TinyOS Visualizer)。TOSSIM在设计时主要考虑下列四方面。
①规模:系统应该能够处理拥有不同网络配置的数干节点。
②完整性:为了准确捕获行为,TOSSIM包括尽量多的系统交互。
③保真度:如果测试要准确,则需要捕获很细小的交互。
④桥接:桥接TOSSIM之间的差距,测试及验证在实际硬件中执行的代码。
针对大规模仿真的日标,仿真器中的每个节点与一个有向图(每边都有一个概率比特误码)连接。为了传输的有效性,用“0”表示比特错误,但会根据情况的不同而改变。此外,所有的节点运行相同的代码,这样可以提高效率。
TOSSIM的概率比特误码模型会导致错误,并在分析低级协议时降低了仿真器的效率。编译时,微小的时序和中断属性丢失会影响与其他节点的交互,也同样会降低准确度。另外,TOSSIM只考虑了传感器的数据采集硬件的仿真,并没有实现对环境触发的反应的仿真。
PowerTOSSIM是一个电源模型,已经集成到TOSSIM中。PowerTOSSIM对TinyOS应用程序消耗的电能进行建模,包括Mica2传感器节点能量消耗的详细模型。
665){this.resized=true;this.style.width=665;}">
对于熟悉TinyOS编程的人来说,TOSSF的使用非常容易,只需要学习编写基本的DML(Domain Modeling Language)配置脚本以定义仿真场景和仿真节点。
TOSSF也有一定的限制:
·所有的中断都是在任务、命令或者事件执行完之后才得到响应的;
·命令和事件处理程序在零仿真时间单元执行;
·没有抢占。
SENS是一个可定制的传感器网络仿真器,它包括针对应用程序、网络通信、物理环境的可互换、可扩展的组件。
SENS拥有一个可定制组件的分层结构,具有平台无关性,添加新的平台只需要添加相应的配置参数即可。SENS采用新颖的物理环境建模机制,将环境定义为一些可交换的单元的格子。
SENS的结构如图6-8所示,包括多个模拟的传感器节点和一个环境组件,每个节点包括三部分:物理组件、网络组件及应用组件,每个组件有一个虚拟时钟,消息能以任何延时发送。用户可以使用SENS提供的组件,也可对现有组件进行修改,甚至自己编写新的组件。通过选择不同的组件组合,用户可以实现不同的网络应用。节点也可以有不同的配置,从而可以仿真不同种类的传感器网络,这在不同节点具有不同的能力及添加新节点的情况下是很有用的。
①应用组件:模拟单个传感器节点上软件的执行,它与网络组件通信以接收和发送数据包,与物理组件通信以读取传感器数据和控制执行机构。SENS可以通过继承Application类来完成应用开发,但是不能直接运行在现有硬件平台上。另外,SENS提供了一个瘦兼容层,使得仿真器与实际传感器节点可以使用相同的代码,从而能够仿真TinyOS应用程序。
665){this.resized=true;this.style.width=665;}">
②网络组件:模拟传感器节点数据包的接收和发送功能。所有网络组件继承自Network基类(指定基本的网络接口)。每个网络组件与一个应用组件和相邻节点的网络组件相连。相邻节点之间交换的消息格式是固定的,从而实现不同特性的网络。有三种网络模型:SimpleNetwork、ProbLossyNetwork并CollisionLossyNetwork。SimpleNetwork简单地将消息发给邻居节点并将接收到的消息传递给应用组件;ProbLossyNetwork按照一定的错误概率传递或者丢弃数据包;CollisionLossyNetwork在接收节点处计算数据包的碰撞。
③物理组件:模拟传感器、执行机构、电源、节点的电能消耗及与环境的交互。
④环境组件:模拟传感器及执行机构可能所处的实际环境。
Tvthon是实现基于Python脚本的、对TOSSIM仿真器的扩展,Tython与TOSSIM的设计对应如图6-9所示。Tython包括一个丰富的脚本原语库,能让用户描述动态的、能重复使用的仿真场景。利用TinyOS事件驱动的优点,允许用户附加脚本反馈到特定的仿真场景。脚本也可以在整个网络和节点级分析并改变环境变化反应的行为。
665){this.resized=true;this.style.width=665;}">
2.ATEMU
ATEMU弥补了TOSSIM的不足,像TOSSIM一样,ATEMU的代码是与Mica2平台兼容的二进制代码。ATEMU使用逐个周期策略运行应用程序代码,仿真比TOSSIM更加细致。这是通过对Mica使用的AVR处理器的仿真来实现的。
ATEMU使用XML配置文件来对网络进行配置。这使得网络以分等级的方式被定义,顶层定义网络特性,下面的层定义每个节点的特性。ATEMU的结构如图6-1O所示,它提供一个称为XATDB的图形用户接口,被用来调试和观察代码的执行,允许设置断点、单步调试及其他的调试功能。
ATEMU提供了一个精确的仿真模型,在此每个MICA传感器节点能够运行不同的应用程序代码。它比TOSSIM准确,但是速度和仿真规模有所降低。最多能准确仿真120个节点。除了逐条指令译码带来的开销以外,ATEMU还有面向对象模型所带来的开销,一个无线传输会影响网络中的其他节点。除了仿真规模问题之外,ATEMU是最准确的传感器仿真器之一。
665){this.resized=true;this.style.width=665;}">
Avrora是一个周期准确的指令级传感器网络仿真器,它能对10000个节点进行仿真,并比具有同样准确度的仿真器要快20倍,能实时处理25个节点。
Avrora是一个试图在TOSSIM及ATEMU两者之间找到平衡点的新仿真器(Emulator),它采用Java实现,而TOSSIM和ATEMU都采用C实现。像许多面向对象仿真器一样,Avrora将每个节点作为一个线程,但是它仍然运行实际的Mica代码。跟ATEMU一样,Avrora以逐条指令方式执行代码,但是为了获得更好的规模和速度,所有的节点在每条指令后都没有进行同步处理。
Avrora使用两种不同的同步策略。第一种方法使用一个同步间隔来定义同步发生的频率。这个值越大,同步间隔越大。同步间隔的“1”跟ATEMU大致相同。不能把这个值设得太高,否则节点将会运行超过其他节点事件影响的时间。第二种方法是在同步前等待邻居节点达到一个特定的仿真时间,一个全局数据结构用来保存每个仿真器的本地时间,该算法允许每个节点比其他的节点仿真时间超前直到需要同步。通过减少同步,Avrora有效地减少了开销。
4.SensorSim
SensorSim(注意此处的SensorSim不跟OMNeT++中的SensorSim一样)是在NS-2的基础上发展起来的,主要是在NS-2上建立无线传感器网络的模型库。如图6-11所示为SensorSim的传感器节点模型,它包括两个模块,即传感功能模块(Sensor Model)和能量模块(Power Model)。传感功能模块是一个包括传感器所有软件功能模块的传感器的软件抽象,这些模块有网络协议栈、中间件、应用程序、传感器协议栈。能量模块模拟实际的硬件抽象。其中的传感信道是传感器模块检测外部信号的媒介,除了传感器模块都是被动设备以外,传感信道跟无线信道类似。
665){this.resized=true;this.style.width=665;}">
SensorSim通过SensorWare中间件提供了混合仿真特性,SensorSim能够与实际的传感器节点交互。由于SensorSim不再更新并且无法获得,此处不再详细描述,具体可以阅读参考文献[29]。
5.LSU SensorSimulator
SensorSimulator是在OMNeT++基础上开发的一个支持无线传感器网络的仿真框架。这个框架提供了一些基本模块,使得用户可以开发自己的模块,并且非常容易地实现一些仿真协议而不需要解决接口及互操作性问题。SensorSimulator中的传感器节点基本结构如图6-12所示。SensorSimulator的源文件使用基本传感器网络的结构。目前正在开发一些标准的协议,比如802.11、带GEAR的定向扩散等,使得仿真变得更加容易。
6.SENSE
SENSE(Sensor Network Simulator and Emulator)是在COST(Component OrientedSimulation Toolkit,是一个通用离散事件仿真器,参见http://www.cs.rpi.edu/~cheng3/sense/cost.htl)之上开发的,编程语言为C++。SENSE的设计受三个仿真工具的影响,它具有类似NS一2的功能,像J-sim一样采用基丁组件的结构,像GIoMoslm一样支持并行仿真。由于采用基于组件的结构和并行仿真,开发者可以将重点放在仿真中的三个重要因素上,即可扩展性、重用性、仿真规模。采用了基于组件的仿真并考虑到了存储器有效使用,传感器网络特定模型等实际问题,使得SENSE成为无线传感器网络研究中简单、有效的仿真工具。
665){this.resized=true;this.style.width=665;}">
(1)扩展性
基十组件的仿真使得SENSE具有足够的扩展性。
组件端口模型:如图6-13所示。使得仿真模型容易扩展,如果有致的接口则新的组件可以代替旧的组件,小需要继承。
仿真组件分类:使得仿真引擎具有扩展性,高级用户可以开发满足特定需求的仿真引擎。
665){this.resized=true;this.style.width=665;}">
(2)重用性
块之间的依赖性降低从而增加了它们的可重用性。在一个仿真中实现的组件,如果满足另外一个仿真的接口及语义需求则可以被重用。
C++模板的扩展同样提高了可重用性。组件通常定义为模板类以处理不同类型的数据。
(3)并行仿真
SENSE使用了并行仿真和串行仿真可选方式,其系统默认是串行仿真。
(4)用户
sENSE中包括三类用户,即高级用户、网络构建者和组件设计者。
高级用户不需要什么编程技巧,只需要选择合适的模型和模板并设置相应的参数,便可构建传感器网络的仿真。它们不关心扩展性及重用性,但是要求仿真可以升级。
网络构建者需要构建新的网络拓扑等,它们依赖于现有模块以构建网络模型,主要关心可重用性。
组件构建者需要修改模块或者构建新的模块,主要关心可扩展性。