ns3仿真3D可视化

2023-11-08 20:20
文章标签 可视化 仿真 3d ns3

本文主要是介绍ns3仿真3D可视化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

因为种种原因需要实现ns3仿真的三维可视化功能,ns3已经提供了实时的仿真可视化程序pyviz。 首先对该部分进行分析。
pyviz部分的程序有与ns3实现有关的c++部分。有专注于可视化python程序。

pyviz 可视化python程序文件框架

在这里插入图片描述
需要解决的核心问题。

  1. 找到所有画图的位置。 || 如何更新,所有的调用,能否增加数据。
  2. 找到所有数据的来源。 || 打印出所有数据。

下面对重要文件进行分析。

init.py
ns.cppyy.cppdef("""using namespace ns3; bool hasMobilityModel(Ptr<Node> node){ return !(node->GetObject<MobilityModel>() == 0); };""")
ns.cppyy.cppdef("""using namespace ns3; Vector3D getNodePosition(Ptr<Node> node){ return node->GetObject<MobilityModel>()->GetPosition(); };""")
ns.cppyy.cppdef("""using namespace ns3; Ptr<Ipv4> getNodeIpv4(Ptr<Node> node){ return node->GetObject<Ipv4>(); };""")
ns.cppyy.cppdef("""using namespace ns3; Ptr<Ipv6> getNodeIpv6(Ptr<Node> node){ return node->GetObject<Ipv6>(); };""")
ns.cppyy.cppdef("""using namespace ns3; std::string getMobilityModelName(Ptr<Node> node){ return node->GetObject<MobilityModel>()->GetInstanceTypeId().GetName(); };""")
ns.cppyy.cppdef("""using namespace ns3; bool hasOlsr(Ptr<Node> node){ return !(node->GetObject<olsr::RoutingProtocol>() == 0); };""")
ns.cppyy.cppdef("""using namespace ns3; Ptr<olsr::RoutingProtocol> getNodeOlsr(Ptr<Node> node){ return node->GetObject<olsr::RoutingProtocol>(); };""")

后续将追踪此处的调用函数,该函数对获取的数据以及去向进行解析

core.py

其中核心类: class Visualizer(GObject.GObject):

load_plugins()
viz = Visualizer()
for hook, args in initialization_hooks:GLib.idle_add(hook, viz, *args)
ns.Packet.EnablePrinting()
viz.start()
core.py 中的 Visualizer() 类
初始化
# 重要回调语句
for plugin in plugins:plugin(self)

这句话跟load_plugins()共同完成对plugins内部所有模块类型的载入。

viz.start()

def start(self):self.scan_topology()self.window.connect("delete-event", self._quit)#self._start_update_timer()
## 不知道为啥这个函数没有检测到被调用GLib.timeout_add(200, self.autoscale_view)self.simulation.start()try:__IPYTHON__except NameError:passelse:self._monkey_patch_ipython()Gtk.main()

mob = ns.cppyy.gbl.hasMobilityModel(ns3_node)

研究一下谁调用了 _update_node_positions()

追踪画图

画布的创建 self.canvas = GooCanvas.Canvas()

base.py
功能类

为每种元素都有一个类, 但类里没有功能函数。
在这里插入图片描述

设备种类变量

重要变量, 肯定是区分每个节点所携带的不同的device类型的变量
在这里插入图片描述
device_traits 变量也在 scan_topology函数中被调用, 我觉得只要把这个删掉,大概率就不会有ns3的aqua报错了。

比例尺函数

画图辅助函数,比例尺
在这里插入图片描述

load_plugins()

载入模块
在这里插入图片描述
此部分的核心在于plugins文件夹中文件的register函数
例如 interface_statics.py 接口数据统计部分。
在这里插入图片描述
wifi 链路部分。
在这里插入图片描述
有一个需要解决的问题: 需要在这里添加一个对aqua 设备的注册模块。

知识

python-c++绑定 : cppyy: Automatic Python-C++ bindings

在pyviz中,体现为,可以在python中通过ns.xxx函数调用ns3的相关模块获取数据。例如通过一下diamagnetic块获得了节点的位置信息。
在这里插入图片描述

ipython

一个非常流行的python解释器,相比于原生的python解释器有许多优点和长处

功能简介

(1) python shell不能在退出保存历史;ipython历史记录自动保存:保存在history.sqlite文件下:可用“”、“”、“”调用最近三次记录;

(2) python shell不支持tab自动补全;ipython支持tab补全;

(3) python shell不能快速获取类、函数信息;ipython通过“?”显示对象签名、文档字符串、代码位置,通过“??”显示源代码;(4) python shell不能直接执行shell命令,需要借助sys;ipython通过“!”调用系统命令,如“!uptime”;

(5) 其他ipython有很多magic函数,可通过使用%lsmagic枚举;

 %run:运行python文件%edit:使用编辑器打开当前函数编辑%save:把某些历史记录保存到文件%debug:激活debug程序等等,后面会讲到

(6)ipython有很多快捷键

(7)ipython的扩展宏系统、storemagic持久化宏、变量、别名;以及autoreload自动重载等功能;

magic command 重要功能

所谓的模式命令,是指那些给我们提供方便,轻松控制ipython交互系统的命令,可以这样去理解,魔术命令可以看成是ipython交互环境下面的命令行程序,其中很多还有一些命令行参数选项。

%quickref :可以显示ipython的快速参考

%magic :可以查看到底有哪些模式命令(这个方法会显示每一个命令的详细信息,因此会很多)

%lsmagic :这里只会显示模式命令的名字,会比较简洁,查看起来更方便

%命令? 或者是%命令??:当我们想要查看某一命令的详细信息,我们可以使用同前面类似的方法,在魔术命令后面添加一个或者是两个问号??来查看详细信息。

Platform 库

platform模块提供了一个API来获取关于运行代码的底层系统/平台的信息。操作系统名称、Python版本、架构、硬件信息等信息通过平台模块功能公开。这个模块不需要安装,因为它是Python安装附带的默认库的一部分。
可以使用该库获取python的一些信息
首先,让我们获取有关python的一些信息,例如版本,构建信息等。
python_version() – 返回python版本。
python_version_tuple() – 返回元组中的python版本。
python_build() – 以元组的形式返回内部版本号和日期。
python_compiler() – 用于编译python的编译器。
python_implementation() – 返回python实现,例如“ PyPy”,“ CPython”等。

这篇关于ns3仿真3D可视化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/372274

相关文章

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

基于SSM+Vue+MySQL的可视化高校公寓管理系统

系统展示 管理员界面 宿管界面 学生界面 系统背景   当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大环境让那些止步不前,不接受信息改革带来的信息技术的企业随时面临被淘汰,被取代的风险。所以当今,各个行业领域,不管是传统的教育行业

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用,模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇,同时也伴随着一系列需要克服的挑战,如何看待企业引进增材制造,小编为您全面分析。 机遇篇: 加速产品创新:3D打印技术如同一把钥匙,为模具企业解锁了快速迭代产品设计的可能。企业能够迅速将创意转化为实体模型,缩短产品从设计到市场的周期,抢占市场先机。 强化定制化服务:面