[ns3-30] Aktivieren Sie die Visualisierung von Python-Skripten

Ich kannte die Ursache nicht und war wirklich begeistert, also ist es ein Memorandum.

Umgebung

OS: Ubuntu 18.04 ns3: 3.30

Status

Hier wird als Beispiel example / tutoral / three.py verwendet. https://www.nsnam.org/doxygen/third_8py_source.html

Es wird angenommen, dass three.cc mit demselben Inhalt normal angezeigt wird, auch wenn es mit dem vis-Flag ausgeführt wird.

$ ./waf --run scratch/mythird --vis
Waf: Entering directory `/usr/ns/ns-3.30/build'
Waf: Leaving directory `/usr/ns/ns-3.30/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (0.652s)
Could not load plugin 'show_last_packets.py': No module named 'kiwi'
Could not load icon applets-screenshooter due to missing gnomedesktop Python module
scanning topology: 8 nodes...
scanning topology: calling graphviz layout
scanning topology: all done.

Screenshot from 2020-05-05 21-23-38.png

Läuft gut ohne die vis-Flagge


$ ./waf --pyrun examples/tutorial/third.py
Waf: Entering directory `/usr/ns/ns-3.30/build'
Waf: Leaving directory `/usr/ns/ns-3.30/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (0.652s)
At time 2s client sent 1024 bytes to 10.1.2.4 port 9
At time 2.01799s server received 1024 bytes from 10.1.3.3 port 49153
At time 2.01799s server sent 1024 bytes to 10.1.3.3 port 49153
At time 2.03371s client received 1024 bytes from 10.1.2.4 port 9

Ein Fehler tritt auf, wenn das vis-Flag gesetzt ist.

$ ./waf --pyrun examples/tutorial/third.py --vis
Waf: Entering directory `/usr/ns/ns-3.30/build'
Waf: Leaving directory `/usr/ns/ns-3.30/build'
Build commands will be stored in build/compile_commands.json
'build' finished successfully (0.707s)
assert failed. cond="uid != 0", msg="Assert in TypeId::LookupByName: ns3::VisualSimulatorImpl not found", file=../src/core/model/type-id.cc, line=828
terminate called without an active exception
Command ['/usr/bin/python3', 'examples/tutorial/third.py', '--SimulatorImplementationType=ns3::VisualSimulatorImpl'] terminated with signal SIGIOT. Run it under a debugger to get more information (./waf --run <program> --command-template="gdb --args %s <args>").

Der Fehler besagt nur, dass Sie den Debugger verwenden können, was verwirrend sein kann.

Wenn Sie eine Warnung namens "Gtk-Warnung" erhalten, stimmt die Gtk-Version möglicherweise nicht überein. Installieren Sie das entsprechende Gtk.

Lösung

Tatsächlich fehlt ein Paket. Importieren Sie ns.visualizer mit dem folgenden Befehl.

import ns.visualizer

Dies wird leise auf der Wiki-Seite geschrieben. Ich möchte, dass Sie es von Anfang an einfügen w https://www.nsnam.org/wiki/PyViz

Das modifizierte dritte.py ist wie folgt.

third.py


# -*-  Mode: Python; -*-
# /*
#  * This program is free software; you can redistribute it and/or modify
#  * it under the terms of the GNU General Public License version 2 as
#  * published by the Free Software Foundation;
#  *
#  * This program is distributed in the hope that it will be useful,
#  * but WITHOUT ANY WARRANTY; without even the implied warranty of
#  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  * GNU General Public License for more details.
#  *
#  * You should have received a copy of the GNU General Public License
#  * along with this program; if not, write to the Free Software
#  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#  *
#  * Ported to Python by Mohit P. Tahiliani
#  */

import ns.core
import ns.network
import ns.point_to_point
import ns.applications
import ns.wifi
import ns.mobility
import ns.csma
import ns.internet
import sys

import ns.visualizer

# // Default Network Topology
# //
# //   Wifi 10.1.3.0
# //                 AP
# //  *    *    *    *
# //  |    |    |    |    10.1.1.0
# // n5   n6   n7   n0 -------------- n1   n2   n3   n4
# //                   point-to-point  |    |    |    |
# //                                   ================
# //                                     LAN 10.1.2.0

cmd = ns.core.CommandLine()
cmd.nCsma = 3
cmd.verbose = "True"
cmd.nWifi = 3
cmd.tracing = "False"

cmd.AddValue("nCsma", "Number of \"extra\" CSMA nodes/devices")
cmd.AddValue("nWifi", "Number of wifi STA devices")
cmd.AddValue("verbose", "Tell echo applications to log if true")
cmd.AddValue("tracing", "Enable pcap tracing")

cmd.Parse(sys.argv)

nCsma = int(cmd.nCsma)
verbose = cmd.verbose
nWifi = int(cmd.nWifi)
tracing = cmd.tracing

# The underlying restriction of 18 is due to the grid position
# allocator's configuration; the grid layout will exceed the
# bounding box if more than 18 nodes are provided.
if nWifi > 18:
	print ("nWifi should be 18 or less; otherwise grid layout exceeds the bounding box")
	sys.exit(1)

if verbose == "True":
	ns.core.LogComponentEnable("UdpEchoClientApplication", ns.core.LOG_LEVEL_INFO)
	ns.core.LogComponentEnable("UdpEchoServerApplication", ns.core.LOG_LEVEL_INFO)
	
p2pNodes = ns.network.NodeContainer()
p2pNodes.Create(2)

pointToPoint = ns.point_to_point.PointToPointHelper()
pointToPoint.SetDeviceAttribute("DataRate", ns.core.StringValue("5Mbps"))
pointToPoint.SetChannelAttribute("Delay", ns.core.StringValue("2ms"))

p2pDevices = pointToPoint.Install(p2pNodes)

csmaNodes = ns.network.NodeContainer()
csmaNodes.Add(p2pNodes.Get(1))
csmaNodes.Create(nCsma)

csma = ns.csma.CsmaHelper()
csma.SetChannelAttribute("DataRate", ns.core.StringValue("100Mbps"))
csma.SetChannelAttribute("Delay", ns.core.TimeValue(ns.core.NanoSeconds(6560)))

csmaDevices = csma.Install(csmaNodes)

wifiStaNodes = ns.network.NodeContainer()
wifiStaNodes.Create(nWifi)
wifiApNode = p2pNodes.Get(0)

channel = ns.wifi.YansWifiChannelHelper.Default()
phy = ns.wifi.YansWifiPhyHelper.Default()
phy.SetChannel(channel.Create())

wifi = ns.wifi.WifiHelper()
wifi.SetRemoteStationManager("ns3::AarfWifiManager")

mac = ns.wifi.WifiMacHelper()
ssid = ns.wifi.Ssid ("ns-3-ssid")

mac.SetType ("ns3::StaWifiMac", "Ssid", ns.wifi.SsidValue(ssid), "ActiveProbing", ns.core.BooleanValue(False))
staDevices = wifi.Install(phy, mac, wifiStaNodes)

mac.SetType("ns3::ApWifiMac","Ssid", ns.wifi.SsidValue (ssid))
apDevices = wifi.Install(phy, mac, wifiApNode)

mobility = ns.mobility.MobilityHelper()
mobility.SetPositionAllocator ("ns3::GridPositionAllocator", "MinX", ns.core.DoubleValue(0.0), 
								"MinY", ns.core.DoubleValue (0.0), "DeltaX", ns.core.DoubleValue(5.0), "DeltaY", ns.core.DoubleValue(10.0), 
                                 "GridWidth", ns.core.UintegerValue(3), "LayoutType", ns.core.StringValue("RowFirst"))
                                 
mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel", "Bounds", ns.mobility.RectangleValue(ns.mobility.Rectangle (-50, 50, -50, 50)))
mobility.Install(wifiStaNodes)

mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel")
mobility.Install(wifiApNode)

stack = ns.internet.InternetStackHelper()
stack.Install(csmaNodes)
stack.Install(wifiApNode)
stack.Install(wifiStaNodes)

address = ns.internet.Ipv4AddressHelper()
address.SetBase(ns.network.Ipv4Address("10.1.1.0"), ns.network.Ipv4Mask("255.255.255.0"))
p2pInterfaces = address.Assign(p2pDevices)

address.SetBase(ns.network.Ipv4Address("10.1.2.0"), ns.network.Ipv4Mask("255.255.255.0"))
csmaInterfaces = address.Assign(csmaDevices)

address.SetBase(ns.network.Ipv4Address("10.1.3.0"), ns.network.Ipv4Mask("255.255.255.0"))
address.Assign(staDevices)
address.Assign(apDevices)

echoServer = ns.applications.UdpEchoServerHelper(9)

serverApps = echoServer.Install(csmaNodes.Get(nCsma))
serverApps.Start(ns.core.Seconds(1.0))
serverApps.Stop(ns.core.Seconds(10.0))

echoClient = ns.applications.UdpEchoClientHelper(csmaInterfaces.GetAddress(nCsma), 9)
echoClient.SetAttribute("MaxPackets", ns.core.UintegerValue(1))
echoClient.SetAttribute("Interval", ns.core.TimeValue(ns.core.Seconds (1.0)))
echoClient.SetAttribute("PacketSize", ns.core.UintegerValue(1024))

clientApps = echoClient.Install(wifiStaNodes.Get (nWifi - 1))
clientApps.Start(ns.core.Seconds(2.0))
clientApps.Stop(ns.core.Seconds(10.0))

ns.internet.Ipv4GlobalRoutingHelper.PopulateRoutingTables()

ns.core.Simulator.Stop(ns.core.Seconds(10.0))

if tracing == "True":
	pointToPoint.EnablePcapAll ("third")
	phy.EnablePcap ("third", apDevices.Get (0))
	csma.EnablePcap ("third", csmaDevices.Get (0), True)

ns.core.Simulator.Run()
ns.core.Simulator.Destroy()

Der Visualizer sollte jetzt erfolgreich in Python gestartet werden.

das ist alles

Recommended Posts

[ns3-30] Aktivieren Sie die Visualisierung von Python-Skripten
So verwenden Sie das Python-Visualisierungspaket ordnungsgemäß
Empfehlung von Altair! Datenvisualisierung mit Python
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
Einführung von Python
Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python
[Python] Operation der Aufzählung
Liste der Python-Module
Visualisierungsnotiz von Python
Python-Datenvisualisierungsbibliotheken
Vereinheitlichung der Python-Umgebung
Kopie der Python-Einstellungen
Grundlagen der Python-Scraping-Grundlagen
[Python] Verhalten von Argmax
Verschiedene Python-Visualisierungstools
Verwendung von Python-Einheimischen ()
der Zen von Python
Installieren von Python 3.3 rc1
# 4 [Python] Grundlagen der Funktionen
Grundkenntnisse in Python
Nüchterne Trivia von Python3
Zusammenfassung der Python-Argumente
Profilieren Sie schnell Python-Skripte
Grundlagen von Python: Ausgabe
Installation von matplotlib (Python 3.3.2)
Anwendung von Python 3 vars
Visualisierung der Logistik mit Python
Verschiedene Verarbeitung von Python
[Python] Was machen Sie mit der Visualisierung von 4 oder mehr Variablen?
[Python] Richtige Verwendung der Karte
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
Python - Schneller Start der Protokollierung
Empfehlung der binpacking Bibliothek von Python
Importieren Sie Skripte dynamisch in Python
[Python] Wert des Funktionsobjekts (?)
Automatisches Update des Python-Moduls
Python --Überprüfen Sie den Wertetyp
[Python] Der Ursprung des Namens der Python-Funktion
Statische Analyse von Python-Programmen
Visualisierung von Daten nach Präfektur
Über verschiedene Codierungen von Python 3
Objektäquivalenzbeurteilung in Python
Einführung in Aktivitäten mit Python
Python> Umgang mit 2D-Arrays
Installieren Sie mehrere Versionen von Python
Upgrade von Python Anaconda
Umgang mit Python auf Mac
Python: Grundlagen der Verwendung von Scikit-Learn ①
Python-Anwendung: Datenvisualisierung # 2: matplotlib
2.x, 3.x Serienzeichencode von Python
Vergleich von 4 Arten von Python-Webframeworks
Einfache FPS-Messung von Python
Überprüfen Sie die OpenSSL-Version von Python 2.6
Python-Implementierung des Partikelfilters
Nachbearbeitung von Python (NG)