Cooja Simulator拾遗

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,具体用法可参看前面的文章+自己摸索。

时间: 2024-11-09 02:20:27

Cooja Simulator拾遗的相关文章

Contiki源码结构

Contiki源码结构 apps目录下,用于存放Application,也就是我们的应用程序放在这个目录下.如webserver,webrowser等,如下图所示. core目录是contiki操作系统的内核所在. 其中cfs是contiki file system interface 模块,provide a lightweight flash system,called Coffee. 也就是文件系统. 其中ctk是contiki的图形界面模块,提供了graphical user inter

位运算总结&拾遗

JavaScript 位运算总结&拾遗 最近补充了一些位运算的知识,深感位运算的博大精深,此文作为这个系列的总结篇,在此回顾下所学的位运算知识和应用,同时也补充下前文中没有提到的一些位运算知识. 把一个数变为大于等于该数的最小的2的幂 一个数为2的幂,那么该数的二进制码只有最高位是1. 根据这个性质,我们来举个栗子,比如有数字10,转为二进制码后为: 1 0 1 0 我们只需把 0 bit的位置全部用1填充,然后再把该二进制码加1就ok了.而x | (x + 1)正好可以把最右边的0置为1,可是

C++拾遗--多线程:临界区解决子线程的互斥

C++拾遗--多线程:临界区解决子线程的互斥 前言 为了解决子线程的互斥问题,windows系统提出了关键段或临界区(CRITICAL_SECTION)的概念.它一共有四个共两对操作:初始化.销毁,进入.离开.它们定义在头文件synchapi.h中. 1.初始化变量 VOID WINAPI InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 2.销毁变量 VOID WINAPI DeleteCriticalSect

C++拾遗--多线程:原子操作解决线程冲突

C++拾遗--多线程:原子操作解决线程冲突 前言 在多线程中操作全局变量一般都会引起线程冲突,为了解决线程冲突,引入原子操作. 正文 1.线程冲突 #include <stdio.h> #include <stdlib.h> #include <process.h> #include <Windows.h> int g_count = 0; void count(void *p) { Sleep(100); //do some work //每个线程把g_c

C++拾遗--name_cast 显式类型转换

C++拾遗--name_cast 显式类型转换 前言 C++中提供了四种显式的类型转换方法:static_cast,const_cast,reinterpret_cast,dynamic_cast.下面分别看下它们的使用场景. 显式类型转换 1.staitc_cast 这是最常用的,一般都能使用,除了不能转换掉底层const属性. #include <iostream> using namespace std; int main() { cout << "static_c

Java HashMap拾遗

Java HashMap拾遗 @author ixenos 零碎知识 尽量返回接口而非实际的类型,如返回List.Set.Map而非ArrayList.HashSet.HashMap,便于更换数据结构,而客户端代码不用改变.这就是针对抽象编程 Map.entrySet 方法返回Map映射的 Set 视图Set<Map.Entry<K,V>>,维护entry键值对 该 set 受Map映射支持,所以对Map映射的更改可在此 set 中反映出来,反之亦然! 如果对该 set 进行迭代的

Python之路【第一篇:Python基础之拾遗】

拾遗一:Python种类 1.Cpython: 由C语言实现,将.py文件编译为.pyc文件的字节码,再转换为机器码.    2.Jpython: 由JAVA语言实现,将python的代码编译为JAVA的字节码,再转换为机器码.    3.Ironpython: 由C#实现,将将python的代码编译为C#字节码,再转换为机器码. 4.pypy: 将python的代码转换为字节码的同时也转换为机器码,提高执行速度. 拾遗二:Python的编码 1.ASCII码(American Standard

COCOS2D-X项目在XCODE没有IOS Simulator,无法仿真的解决办法

我把WIN7下用VS2012做好的项目移植到IOS,在OSX环境下用cocos new 生成一个项目,把原来的classess和Resources覆盖新生成的XCODE项目,,然后用XCODE打开项目添加好上述文件,如下图: 默认的scheme是libcocos2d IOS项目,有IOS SIMULATOR,但是 这个项目是无法启动仿真器的. 而我需要的是下图的SCHEME,但是不是默认的,而且没有IOS SIMULATOR供选用: 解决办法如下: 第一步: 第二步: 第三步: 第四步: 这样生

Unable to open liblaunch_sim.dylib. Try reinstalling Xcode or the simulator

关于Xcode7 Beta报错 simulator runtime is not available. Unable to open liblaunch_sim.dylib Try reinstalling Xcode or the simulator runtime. 解决办法 一.找到目标文件 /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iP