main.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import configparser
  2. from de2.elements import Port, Clock
  3. from pypdevs.simulator import Simulator
  4. config = configparser.ConfigParser()
  5. config.read('config.ini')
  6. tugging = config.getfloat('movement', 'velocity_mean_tugging'), config.getfloat('movement', 'velocity_std_tugging')
  7. sailing = config.getfloat('movement', 'velocity_mean_sailing'), config.getfloat('movement', 'velocity_std_sailing')
  8. vel_max = config.getfloat('movement', 'velocity_max')
  9. if config.getboolean('movement', 'use_eta'):
  10. tugging = sailing = vel_max = None
  11. timescale = config.getfloat('simulation', 'timescale')
  12. port = Port("PoAB", config.get('simulation', 'schedule_file'), tugging, sailing, vel_max)
  13. if config.getboolean('simulation', 'visualization') and timescale > 0:
  14. port.clock = port.addSubModel(Clock("clock"))
  15. port.connectPorts(port.clock.outp, port.sailer.update)
  16. sim = Simulator(port)
  17. if config.getboolean('simulation', 'verbose'):
  18. sim.setVerbose(None)
  19. end_time = config.getfloat('simulation', 'end_time')
  20. if end_time > 0:
  21. sim.setTerminationCondition(lambda t, m: t[0] > end_time or m.scheduler.state["index"] >= len(m.scheduler.ivef))
  22. else:
  23. sim.setTerminationCondition(lambda _, m: m.scheduler.state["index"] >= len(m.scheduler.ivef))
  24. if timescale > 0:
  25. sim.setRealTime(scale=timescale)
  26. if config.getboolean('simulation', 'visualization') and timescale > 0:
  27. from de2.tracer import Streamer
  28. import geoplotlib
  29. from mapper import PoABLayer
  30. streamer = Streamer()
  31. sim.setCustomTracer("de2.tracer", "TracerPort", [streamer])
  32. layer = PoABLayer(sim, streamer)
  33. geoplotlib.set_window_size(640, 760)
  34. geoplotlib.tiles_provider({
  35. 'url': lambda zoom, xtile, ytile: 'https://tile.openstreetmap.org/%d/%d/%d.png' % (zoom, xtile, ytile),
  36. 'tiles_dir': 'mytiles',
  37. 'attribution': 'Map tiles by OpenStreetMap Carto, under CC BY 3.0. Data @ OpenStreetMap contributors.'
  38. })
  39. geoplotlib.add_layer(layer)
  40. geoplotlib.show()
  41. else:
  42. sim.simulate()
  43. if config.getboolean('simulation', 'statistics'):
  44. sim.model.print_statistics()