Cooja Simulator拾遗
摸索了一段Cooja模拟器,前面也转发了几篇文章,也都涉及了cooja仿真模拟的例子,在译文环境搭建及开发流程(官网翻译Get Started)中,也涉及了cooja的基本用法。其实自己多摸索摸索,简单的功能和用法还是能搞定。当然cooja功能还是很强大,例如串口,控制脚本这些,不是轻易能弄懂学会。
不得不说Cooja的资料非常少,很多资料都只是一些简单的用法,而且还是英文的,想要找一些全面彻底的资料还是很难。这里汇总一下有关cooja的东西,不涉及用法,也不系统,只是一些从资料或者是自己摸索出的点,觉得对理解cooja有一定的帮助。
1、Cooja不是一开始就有的,出现于2006年,被整合进contiki 2.0及后续版本
2、Cooja是Contiki over Java的缩写,也即cooja是基于java开发的,运行cooja需要java1.6以上环境
3、Cooja和Contiki通过JNI(java native interface)连接在一起,允许被仿真的应用在一个真是的contiki系统上运行
4、Cooja和仿真节点的交互是通过插件plugins完成的,如timeline、collectview、network,我们在cooja用到的功能模块都是一个个的插件
5、Cooja中运行的Contiki程序,要么是在本地主机CPU编译,要么在MSP430模拟器上编译
6、Cooja仿真器主要的设计目标是扩展性,为此使用了接口(Interface)和插件(Plugins)。一个接口呈现了一个传感节点的属性或设备,如一个状态、一个按钮或是一个无线收发器。一个插件被用来在仿真和仿真节点间交互,如控制仿真速度或是查看所有的网络流量。所有新的插件和接口都可以容易的创建和添加到仿真环境中。仿真器中许多其他部分,如负责发送无线网络数据的radio medium,也能够被实施和添加到仿真器。通过在一个仿真中同时支持几个不同的仿真环境,在异构网络中,不同的硬件平台可以被真。
7、Cooja支持指令级别、系统级别和应用级别的仿真.指令级别的仿真对于开发需要直接与硬件交互的驱动程序很有帮助。由于它需要模拟硬件的细节,所以复杂度较大,运行速度较慢。应用级别(或网络级别)的仿真主要用来仿真网络协议(比如路由协议).它不需对节点硬件进行模拟,关注的重点在于节点之间的交互.它复杂度相对较小,运行速度较快,但是缺乏对节点内部细节的描述.系统级别的仿真能平衡两者的优缺点.COOJA能同时进行上述3种级别的仿真,即在同一个网络中可以同时存在3种不同类型的节点.不同类型的节点可以关注不同的仿真需求,同时在整体上保持较快的仿真速度。
8、Cooja中每一个被仿真的项目可以被存储在后缀为.csc的文件中,csc全称即cooja simulation configuration
9、csc文件包括了模拟环境、插件、节点及位置等信息,还包括随机种子和无线电媒介等信息
10、csc是基于xml的,可以直接打开看到一些有关仿真的信息
11、Cooja中一个被仿真的contiki传感节点(mote)是一个实际的被编译和正在执行的contiki系统。该系统被cooja控制和分析,是这样被执行的:为本地平台编译contiki作为一个共享库,并使用java native Interfaces(JNI)将该库加载到java。在同一个cooja仿真中可以编译和加载几个不同的contiki库,代表不同类型的传感节点(异构网络)。Cooja通过一些函数控制和分析一个contiki系统。例如,模拟器通知contiki系统处理一个事件,或是获取整个contiki系统内存进行分析。这种途径赋予了模拟器对被模拟系统的完全控制。不幸的是,使用JNI也有一些恼人的副作用。最显著的是对扩展工具的依赖,如编译器和连接器以及它们运行时参数。
12、Cooja最初在Cygwin/Windows和Linux平台被开发,但之后被移植到MacOS。
13、对于在windows下进行开发,推荐使用Cygwin,当然,官方的开发环境instant contiki是最方便的
14、在cooja 出现之初,还需要对其进行配置,在一些老的资料中有提及,但现在直接在instant contiki环境下打开就可直接进行程序模拟,提醒大家看到时不要被弄迷糊了
15、cooja中提供两种无线电模型DGRM和UDGM,对于这个不是太懂,不知道有什么玄妙在里面,一般使用的UDGM
16、 DGRM 可以人工增加节点间的连通性,在RPL objective function & simulation using DGRM model in cooja中用的是DGRM
17、UDGM(Unit Disk Graph Model),无线电范围随着无线电能量的增加而增大,收发率可以通过UDGM配置
18、UDGM在建立仿真的时候有两种子模型:distance loss和constant loss,前者在RF范围丢包率随距离变化,距离越远,丢包率越大;后者在RF范围丢包率恒定
写之前感觉有必要总结一下,写完了感觉没什么实质的东西。这里也只是一些点,帮助理解cooja,具体用法可参看前面的文章+自己摸索。