1
2
3 """ External-controlled simulation example
4 - random movement
5 - output to visual player, which is executed as child process
6 - this simulation is steered by an external entity via TCP socket connection
7 - uses SimulationControlled
8 - use mosp/controller.py for simple demo control
9 """
10
11 import sys
12 sys.path.append("..")
13 import time
14 import random
15
16 from mosp.core import Person, Simulation
17 from mosp.controller import SimulationControlled, Ticker
18 from mosp.geo import osm
19 from mosp.locations import Cafe
20 from mosp.impl import movement
21 from mosp.monitors import *
22
23 __author__ = "B. Henne, P. Tute"
24 __contact__ = "henne@dcsec.uni-hannover.de"
25 __copyright__ = "(c) 2010-2012, DCSec, Leibniz Universitaet Hannover, Germany"
26 __license__ = "GPLv3"
27
28
47
48 -def main(get_nodes=False):
49 """Defines the simulation, map, monitors, persons."""
50 t = time.time()
51 if not get_nodes:
52 try:
53 name = sys.argv[1]
54 port = int(sys.argv[2])
55 except IndexError:
56 print 'No name or port number specified!'
57 print 'Usage: python external-controlled_random_wiggler.py NAME PORT'
58 sys.exit(-1)
59 s = SimulationControlled(geo=osm.OSMModel('../data/minimap0.osm'), name=name, host='localhost', port=port, rel_speed=40)
60 print time.time() - t
61
62 m = s.add_monitor(SocketPlayerMonitor, 1)
63 s.add_persons(RandomWiggler, 1, monitor=m)
64 for p in [node for node in s.geo.way_nodes if "amenity" in node.tags and node.tags["amenity"] == "cafe"]:
65 c = Cafe(p.tags['name'], s)
66 p.worldobject = c
67 s.activate(c, c.serve(), 0)
68 s.run(until=1000000, real_time=True, monitor=True)
69 else:
70 s = Simulation(geo=osm.OSMModel('../data/minimap0.osm'), rel_speed=40)
71 for p in [node for node in s.geo.way_nodes if "amenity" in node.tags and node.tags["amenity"] == "cafe"]:
72 print p.id, p.lat, p.lon, s.geo.map_nodeid_osmnodeid[p.id]
73
74
75 if __name__ == '__main__':
76 if 'nodes' in sys.argv:
77 main(True)
78 else:
79 main()
80