可视化工具NetAnim在NS-3中的使用

NetAnim说明:它是一个独立的、基于Qt4的离线动画演示工具,在NS_3仿真过程中生成XML格式的trace文件,仿真结束后NetAnim读取该文件显示网络拓扑和节点间数据分组流(包括有线链路和无线链路)等动画过程。


一、首先安装NetAnim

在之前讲过,参照https://blog.csdn.net/wuzhiwuweisun/article/details/79493986


二、生成XML文件


1.生成XML最基本的条件:

1)wscript 文件中包含netanim模块,需要注意的是你要编译的脚本文件要和这个wsript文件在同一目录下,以wireless-animation.cc为例,目录是ns-allinone-3.27/ns-3.27/src/netanim/examples。




PS:上边的这个目录下的wireless-animation.cc是官方提供的用于NetAnim仿真的文档。我们 这里 用的 是 目录examples/tutorial/first.cc文件,并把它复制为  scratch/myfirst.cc。可能是scratch目录是waf默认编译的目录的原因吧,这里并没有wscript文件,如下图,可是我在做的时候一样生成了first.xml文件。这里后边再看看能不能整明白,暂时放在这里。



对这第一条我再补充一下。这里用到的一本书是《NS-3网络模拟器基础与应用》(下载链接:https://pan.baidu.com/s/1HgDNSfGOqWPP4m62Hn_vXg 密码:gw49)。这本书的73页详细介绍了生成XML过程,并且从6.7节详细讲了wscript的作用。这里从书里摘取了跟示例wireless-animation.cc有关的wscript说明。


打开wscript脚本文件,大致内容和上图说的功能对应,使目录下的脚本文件包含netanim模块。以后我们在改写 wscript脚本时下面的红圈里就是格式,如下:



2)在wireless-animation.cc(只是以这个为例)脚本开头添加头文件。

#include "ns3/netanim-module.h"  
  
  


3)在wireless-animation.cc(只是以这个为例)脚本末尾的Simulator::Run()命令前一行添加下面的命令:

AnimationInterface anim("文件的名字.xml"); 
  
  


最后运行命令   sudo ./waf --run src/netanim/examples/wireless-animation

生成wireless-animation.xml




用NetAnim打开wireless-animation.xml文件,如下:



点击运行的绿色按钮:



至此使用NetAnim的最基本用法完成。


2.生成XML的可选条件:


除了以上必须满足的三个条件外,我们可以根据需要在脚本中加入以下语句:


anim.SetMobilityPollInterval (Seconds (1));
  
  

AnimationInterface默认250ms记录一次所有节点的位置。这个方法设置了AnimationInterface记录所有节点位置的时间间隔。如果节点的位置预料每次变化非常小,那么设置高流动性轮训间隔将是非常有用的。否则,将会产生非常大的xml文件。


anim.SetConstantPosition (Ptr< Node > n, double x, double y);
  
  

AnimationInterface允许设置所有节点的位置。在ns3中,该设置与MobillityModel关联。该方法是非常快捷的方式来设置一个静止的节点位置。

这个命令在wireless-animation中具体形式是:




  
  
  1. anim.SetStartTime (Seconds( 150));
  2. anim.SetStopTime (Seconds( 150));

上述命令是设置动画记录内容在仿真过程中的开始和结束时间。AnimationInterface会产生比较大的xml文件。上面的方法可以限制AnimationInterface记录的时间窗口。这样可以达到只关注于与仿真相关联的部分,同时产生比较小的xml文件。


AnimationInterface anim ("animation.xml", 50000);
  
  
该构造器保证产生的xml文件只记录5000个packets。例如,如果AnimationInterface抓取到了150000个packets,使用这个构造器可以产生三个文件
• animation.xml - containing the packet range 1-50000
• animation.xml-1 - containing the packet range 50001-100000

• animation.xml-2 - containing the packet range 100001-150000


anim.EnablePacketMetadata (true);
  
  
使用该方法,则AnimationInterface会在产生的xml文件中记录每一个packet的元数据。记录了元数据之后,可以使用比较简单的与每个packet相关的信息,这样就方便NetAnim提供更好的统计和过滤,例如,TCP序列号,源IP,目的地IP等。

注意:使用这样的属性,将会导致比较大的XML文件产生。不要在使用Wimax links的时候使用该属性。


anim.UpdateNodeDescription (5, "Access-point");
  
  

使用该方法,AnimationInterface将会把节点5标记为“Access-point”文字。


anim.UpdateNodeSize (6, 1.5, 1.5);
  
  

使用该方法,AnimationInterface将会把节点大小缩放为1.5倍。NetAnim会自动缩放视图以适应拓扑的边界。这意味着,NetAnim会调整太大或者太小的节点。使用该方法允许你覆盖NetAnim默认的节点的size。


anim.UpdateNodeCounter (89, 7, 3.4);
  
  

该方法说明,AnimationInterface设置节点7的值为3.4 id==89。id=89的节点必须存在,须先使用AnimationInterface::AddNodeCounter方法设置之后,才能调用UpdateNodeCounter方法。


三、在第一个示例first.cc基础上用NetAnim分析


$ cp examples/tutorial/first.cc  scratch/myfirst.cc     这里我把first.cc拷贝到scratch目录下

用vim编辑器打开myfirst.cc文件并按照上边的步骤修改。

在源代码中添加头文件:

#include “ns3/netanim-module.h”  
  
  


在脚本末尾的Simulator::Run();前加一句:

AnimationInterface anim(“first.xml”);  
  
  

按下ESC,退出编辑模式

按下:wq保存退出。


进到目录ns-allinone-3.27/ns-3.27,编译:

sudo ./waf --run scratch/myfirst

  
  

生成first.xml文件:



在目录ns-allinone-3.27/netanim-3.108执行命令打开NetAnim:



打开刚才的first.xml文件:



运行后:



如果感觉节点的位置什么的不大合适,可以通过上边的步骤二的语句修改。比如改位置,在脚本中加入以下语句:


  
  
  1. anim.SetConstantPosition(nodes.Get( 0), 10, 10)
  2. anim.SetConstantPosition(nodes.Get( 1), 50, 50)

注意命令加在输出first.xml命令后:



打开重新编译过的first.xml文件,节点位置改变(有个问题,刚开始的位置和上边的位置一样,运行0.25s后才 改变位置):



运行后:


先写到这里,分析数据的话后面有时间会写。


参考的博文:

1.https://www.jianshu.com/p/9c340c63f86a

2.https://blog.csdn.net/hdliuxl/article/details/70224300

3.https://blog.csdn.net/Mary19920410/article/details/70844487





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值