Simsim.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from target import Target
  4. from tracker import Tracker
  5. class Simsim:
  6. def __init__(self) -> None:
  7. self.trackers = []
  8. self.edges = []
  9. self.targets = []
  10. self.map_size = [1000, 1000]
  11. self.rate = 30
  12. plt.figure(figsize=(8, 8))
  13. plt.ion()
  14. plt.axis('equal')
  15. def add_tracker(self, name, position):
  16. tracker = Tracker(name, len(self.trackers), position)
  17. self.trackers.append(tracker)
  18. def add_edges(self, edges):
  19. self.edges.extend(edges)
  20. for e in edges:
  21. self.trackers[e[0]].neighbor.append(e[1])
  22. self.trackers[e[1]].neighbor.append(e[0])
  23. def add_target(self, name, position):
  24. target = Target(name, len(self.targets), position)
  25. self.targets.append(target)
  26. def run(self):
  27. while 1:
  28. plt.cla()
  29. plt.xlim(0, self.map_size[0])
  30. plt.ylim(0, self.map_size[1])
  31. for t in self.trackers:
  32. plt.scatter(t.position[0], t.position[1],
  33. marker='s', s=20, c='b')
  34. plt.annotate(t.id, (t.position[0], t.position[1]+10))
  35. # draw the camera coverage
  36. circle = plt.Circle(
  37. (t.position), t.sensor.coverage_radius, fill=False, color='grey', alpha=0.3)
  38. plt.gcf().gca().add_artist(circle)
  39. # draw the detections
  40. dets = t.sensor.get_detection(self.targets)
  41. for det in dets:
  42. plt.gcf().gca().scatter(
  43. det[0], det[1], marker='^', s=8) # , alpha=det[2]
  44. t.run(self.rate)
  45. for e in self.edges:
  46. t0 = self.trackers[e[0]]
  47. t1 = self.trackers[e[1]]
  48. plt.plot([t0.position[0], t1.position[0]],
  49. [t0.position[1], t1.position[1]],
  50. linewidth=1, color='g', alpha=0.5)
  51. plt.draw()
  52. plt.pause(1/self.rate)
  53. s = Simsim()
  54. s.add_tracker('t', np.array([120.0, 180.0]))
  55. s.trackers[0].speed = np.array([10,10])
  56. s.add_tracker('t', np.array([220, 380]))
  57. s.trackers[1].speed = np.array([5,10])
  58. s.add_tracker('t', np.array([500, 380]))
  59. s.trackers[2].speed = np.array([-22,10])
  60. s.add_target('tgt', np.array([200, 300]))
  61. s.add_target('tgt', np.array([100, 300]))
  62. s.add_target('tgt', np.array([500, 300]))
  63. s.add_edges([[0, 1], [0, 2]])
  64. s.run()