| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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()
|