|
@@ -0,0 +1,76 @@
|
|
|
|
|
+import matplotlib.pyplot as plt
|
|
|
|
|
+import numpy as np
|
|
|
|
|
+from target import Target
|
|
|
|
|
+from tracker import Tracker
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class Simsim:
|
|
|
|
|
+ def __init__(self) -> None:
|
|
|
|
|
+ self.trackers = []
|
|
|
|
|
+ self.edges = []
|
|
|
|
|
+ self.targets = []
|
|
|
|
|
+ self.map_size = [1000, 1000]
|
|
|
|
|
+ self.rate = 30
|
|
|
|
|
+
|
|
|
|
|
+ plt.figure(figsize=(8, 8))
|
|
|
|
|
+ plt.ion()
|
|
|
|
|
+ plt.axis('equal')
|
|
|
|
|
+
|
|
|
|
|
+ def add_tracker(self, name, position):
|
|
|
|
|
+ tracker = Tracker(name, len(self.trackers), position)
|
|
|
|
|
+ self.trackers.append(tracker)
|
|
|
|
|
+
|
|
|
|
|
+ def add_edges(self, edges):
|
|
|
|
|
+ self.edges.extend(edges)
|
|
|
|
|
+ for e in edges:
|
|
|
|
|
+ self.trackers[e[0]].neighbor.append(e[1])
|
|
|
|
|
+ self.trackers[e[1]].neighbor.append(e[0])
|
|
|
|
|
+
|
|
|
|
|
+ def add_target(self, name, position):
|
|
|
|
|
+ target = Target(name, len(self.targets), position)
|
|
|
|
|
+ self.targets.append(target)
|
|
|
|
|
+
|
|
|
|
|
+ def run(self):
|
|
|
|
|
+ while 1:
|
|
|
|
|
+ plt.cla()
|
|
|
|
|
+ plt.xlim(0, self.map_size[0])
|
|
|
|
|
+ plt.ylim(0, self.map_size[1])
|
|
|
|
|
+
|
|
|
|
|
+ for t in self.trackers:
|
|
|
|
|
+ plt.scatter(t.position[0], t.position[1],
|
|
|
|
|
+ marker='s', s=20, c='b')
|
|
|
|
|
+ plt.annotate(t.id, (t.position[0], t.position[1]+10))
|
|
|
|
|
+ # draw the camera coverage
|
|
|
|
|
+ circle = plt.Circle(
|
|
|
|
|
+ (t.position), t.sensor.coverage_radius, fill=False, color='grey', alpha=0.3)
|
|
|
|
|
+ plt.gcf().gca().add_artist(circle)
|
|
|
|
|
+ # draw the detections
|
|
|
|
|
+ dets = t.sensor.get_detection(self.targets)
|
|
|
|
|
+ for det in dets:
|
|
|
|
|
+ plt.gcf().gca().scatter(
|
|
|
|
|
+ det[0], det[1], marker='^', s=8) # , alpha=det[2]
|
|
|
|
|
+ t.run(self.rate)
|
|
|
|
|
+
|
|
|
|
|
+ for e in self.edges:
|
|
|
|
|
+ t0 = self.trackers[e[0]]
|
|
|
|
|
+ t1 = self.trackers[e[1]]
|
|
|
|
|
+ plt.plot([t0.position[0], t1.position[0]],
|
|
|
|
|
+ [t0.position[1], t1.position[1]],
|
|
|
|
|
+ linewidth=1, color='g', alpha=0.5)
|
|
|
|
|
+
|
|
|
|
|
+ plt.draw()
|
|
|
|
|
+ plt.pause(1/self.rate)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+s = Simsim()
|
|
|
|
|
+s.add_tracker('t', np.array([120.0, 180.0]))
|
|
|
|
|
+s.trackers[0].speed = np.array([10,10])
|
|
|
|
|
+s.add_tracker('t', np.array([220, 380]))
|
|
|
|
|
+s.trackers[1].speed = np.array([5,10])
|
|
|
|
|
+s.add_tracker('t', np.array([500, 380]))
|
|
|
|
|
+s.trackers[2].speed = np.array([-22,10])
|
|
|
|
|
+s.add_target('tgt', np.array([200, 300]))
|
|
|
|
|
+s.add_target('tgt', np.array([100, 300]))
|
|
|
|
|
+s.add_target('tgt', np.array([500, 300]))
|
|
|
|
|
+s.add_edges([[0, 1], [0, 2]])
|
|
|
|
|
+s.run()
|