ns3使用入门_基于ns3.44_Part5_Animation动画

 前言

事实上ns3的官方手册很全,相关书籍也是有的,官网先贴在这里:

ns-3 | a discrete-event network simulator for internet systemsa discrete-event network simulator for internet systemshttps://www.nsnam.org/相关的脚本介绍也都有一些:

ns-3.35_wifi-he-network.cc_ns-3网络仿真工具wifi脚本解析_wifi脚本网络拓扑_ns-3wifi6吞吐脚本关键注释_吞吐部分_基础ns-3_ns3.35-优快云博客

ns-3-model-library wifi 浅析_ns-3wifi部分解析_ns-3网络模拟器wifi部分文档分析_Part1_ns3 wifiphy物理层冲突-优快云博客

ns-3-model-library wifi 浅析_ns-3wifi部分解析_ns-3网络模拟器wifi部分文档分析_Part2_yansphy-优快云博客

不过现有的要么版本老旧,要么过于现象化,不够本质,正好我最近分析了下官方手册,在这里分享给大家——需要更加完整的内容,可以直接去官网。

Animation动画

动画是网络仿真的重要工具。虽然 ns-3 不包含默认的图形动画工具,但我们目前有两种方式来提供动画,即使用 PyViz 方法或 NetAnim 方法。PyViz 方法在 http://www.nsnam.org/wiki/PyViz 中进行了介绍。

我们将在此处简要描述 NetAnim 方法。

NetAnim

NetAnim 是一个独立的、基于 Qt5 的软件可执行文件,它使用 ns-3 模拟期间生成的跟踪文件来显示拓扑并动画化节点之间的数据包流。

此外,NetAnim 还提供了有用的功能,例如用于显示数据包元数据的表格,如下图所示

一种可视化移动节点轨迹的方法

一种显示多个节点在不同时间点的路由表的方法

将与多个节点关联的计数器显示为图表或表格的方法

一种查看数据包传输和接收事件时间线的方法

 Methodology方法

在注册一个AnimationInterface anim("wireless-animation.xml"); // Mandatory的时候,会初始化StartAnimation();里面会ConnectCallbacks();,这里面有大量的connect,比如Config::ConnectFailSafe("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/MacTx",MakeCallback(&AnimationInterface::WifiMacTxTrace, this));这里面的tracing sink WifiMacTxTrace在每次$ns3::WifiNetDevice/Mac/MacTx这个tracing source触发之后就给对应node 的计数器++,最后记录到anim文件里面

ns3::AnimationInterface 负责创建跟踪 XML 文件。AnimationInterface 使用tracing infrastructure来跟踪节点之间的数据包流。在模拟开始之前,AnimationInterface 将自身注册为 tx rx 事件的 trace hook。当调度数据包进行传输或接收时,将调用 AnimationInterface 中相应的 tx rx  trace hooks 。调用 rx 钩子时,AnimationInterface 将知道数据包在这两个端点之间流动,并以 XML 格式将此信息与相应的 tx rx 时间戳一起添加到跟踪文件中。XML 格式将在后面的部分中讨论。请务必注意,仅当调用 rx 跟踪钩子时,AnimationInterface 才会记录数据包。每个 tx 事件都必须与 rx 事件匹配。

下载 NetAnim

构建 NetAnim

构建 NetAnim 需要 Qt55.4 及更高版本)。要构建 NetAnim,请使用以下命令

$ cd netanim
$ make clean
$ qmake NetAnim.pro
$ make

注意:在某些系统中,qmake 可以是 “qmake-qt5” 这应该会在同一目录中创建一个名为 “NetAnim” 的可执行文件:

$ ls -l NetAnim
-rwxr-xr-x 1 john john 390395 2012-05-22 08:32 NetAnim

用法

使用 NetAnim 是一个两步过程,第 1 步:使用 ns-3 代码库中的 “ns3::AnimationInterface” 在模拟期间生成动画 XML 跟踪文件。第 2 步:使用名为 NetAnim 的基于 Qt 的离线动画器加载第 1 步中生成的 XML 跟踪文件。

第 1 步:生成 XML 动画跟踪文件

“src/netanim”下的类“AnimationInterface”使用底层 ns-3 跟踪源以 XML 格式构建带时间戳的 ASCII 文件。示例位于 src/netanim/examples 示例下:

$ ./ns3 configure -d debug --enable-examples
$ ./ns3 run "dumbbell-animation"

上面将创建一个 XML 文件dumbbell-animation.xml

Mandatory

确保程序的 CMakeLists.txt 包含 “netanim” 模块。此类CMakeLists.txt的示例位于 src/netanim/examples/CMakeLists.txt。在测试程序中包含标头 [#include “ns3/netanim-module.h”],添加语句:

AnimationInterface anim("animation.xml");  // where "animation.xml" is any arbitrary filename

 [对于 NS-3.13 之前的版本,您还必须使用“Anim.SetXMLOutput() 设置 XML 模式,并使用 animStartAnimation();]

Optional

以下是可选但有用的步骤:

// Step 1
anim.SetMobilityPollInterval(Seconds(1));

AnimationInterface 默认每 250 ms 记录一次所有节点的位置。上面的语句设置 AnimationInterface 记录所有节点位置的周期性间隔。如果预计节点移动的次数非常少,则设置较高的移动轮询间隔以避免大型 XML 文件非常有用。

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

AnimationInterface 要求设置所有节点的位置。在 ns-3 中,这是通过设置关联的 MobilityModel 来完成的。“SetConstantPosition” 是设置静止节点的 x-y 坐标的快速方法。

// Step 3
anim.SetStartTime(Seconds(150)); and anim.SetStopTime(Seconds(150));

AnimationInterface 可以生成大型 XML 文件。上述语句限制了 AnimationInterface 执行跟踪的窗口。限制窗口有助于仅关注模拟的相关部分,并创建易于管理的小 XML 文件

// Step 4
AnimationInterface anim("animation.xml", 50000);

使用上述构造函数可确保每个动画 XML 跟踪文件只有 50000 个数据包。例如,如果 AnimationInterface 捕获了 150000 个数据包,则使用上述构造函数将捕获拆分为 3 个文件

  • animation.xml - containing the packet range 1-50000
    animation.xml - 包含数据包范围 1-50000
  • animation.xml-1 - containing the packet range 50001-100000
    animation.xml-1 - 包含数据包范围 50001-100000
  • animation.xml-2 - containing the packet range 100001-150000
    animation.xml-2 - 包含数据包范围 100001-150000
// Step 5
anim.EnablePacketMetadata(true);

通过上述语句,AnimationInterface 将每个数据包的元数据记录在 xml 跟踪文件中。NetAnim可以使用元数据来提供更好的统计数据和过滤,同时在数据包动画期间提供有关数据包的一些简要信息,如TCP序列号或源和目标IP地址。注意:启用此功能将导致 XML 跟踪文件变大。请不要在使用 Wimax 链接时启用此功能。

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

通过上述语句,AnimationInterface 将文本 “Access-point” 分配给节点 5

// Step 7
anim.UpdateNodeSize(6, 1.5, 1.5);

使用上述语句,AnimationInterface 将节点大小设置为按 1.5 缩放。NetAnim 会自动缩放图形视图以适应拓扑的边界。这意味着 NetAnim 可以异常地将节点的大小缩放得太高或太低。使用 AnimationInterface::UpdateNodeSize 可以覆盖 NetAnim 中的默认缩放比例,并使用自己的自定义缩放比例。

// Step 8
anim.UpdateNodeCounter(89, 7, 3.4);

看起来是用于把anim统计的某一个node里面某一个触发的触发次数(比如Node 0  Phy tx发生了多少次)打印到xml里面,上面的用法是直接把3.4这个值存到xmlID 89node7里面去。

使用上述语句,AnimationInterface 将计数器设置为 Id == 89,与 Node 7 with the value 3.4相关联。ID 89 的计数器是使用 AnimationInterface::AddNodeCounter 获取的。一个示例用法在 src/netanim/examples/resource-counters.cc 中。

第 2 步:在 NetAnim 中加载 XML

假设已构建 NetAnim,请使用命令 “./NetAnim” 启动 NetAnim。如果 NetAnim 不可用,请查看构建 NetAnim”部分,打开 NetAnim 后,单击 文件打开 左上角的按钮,选择在步骤 1 中生成的 XML 文件。点击绿色的播放按钮开始动画

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值