resampler=resampler) # Create a particle initiator from stonesoup.initiator.simple import GaussianParticleInitiator, SinglePointInitiator single_point_initiator = SinglePointInitiator( GaussianState([[0], [-40], [2000], [0], [8000], [0]], np.diag([10000, 1000, 10000, 1000, 10000, 1000])), None) initiator = GaussianParticleInitiator(number_particles=500, initiator=single_point_initiator) hypothesiser = DistanceHypothesiser(predictor, updater, measure=Mahalanobis(), missed_distance=np.inf) data_associator = GNNWith2DAssignment(hypothesiser) from stonesoup.deleter.time import UpdateTimeStepsDeleter deleter = UpdateTimeStepsDeleter(time_steps_since_update=10) # Create a Kalman single-target tracker tracker = SingleTargetTracker( initiator=initiator, deleter=deleter, detector=sim, data_associator=data_associator, updater=updater ) # %% # The final step is to iterate our tracker over the simulation and plot out the results. Because we have a bearing # only sensor it does not make sense to plot out the detections without animating the resulting plot. This # animation shows the sensor platform (blue) moving towards the true target position (red). The estimated target # position is shown in black, radar detections are shown in yellow while the bearing only imager detections are
# %% # Track Initiation # **************** # For initialising tracks we will use a :class:`~.MultiMeasurementInitiator`, which allows our # tracker to tentatively initiate tracks from unassociated measurements, and hold them within the # initiator until they have survived for at least 10 frames. We also define a # :class:`~.UpdateTimeStepsDeleter` deleter to be used by the initiator to delete tentative tracks # that have not been associated to a measurement in the last 3 frames. from stonesoup.types.state import GaussianState from stonesoup.types.array import CovarianceMatrix, StateVector from stonesoup.initiator.simple import MultiMeasurementInitiator from stonesoup.deleter.time import UpdateTimeStepsDeleter prior_state = GaussianState(StateVector(np.zeros((6,1))), CovarianceMatrix(np.diag([100**2, 30**2, 100**2, 30**2, 100**2, 100**2]))) deleter_init = UpdateTimeStepsDeleter(time_steps_since_update=3) initiator = MultiMeasurementInitiator(prior_state, measurement_model, deleter_init, data_associator, updater, min_points=10) # %% # Track Deletion # ************** # For confirmed tracks we used again a :class:`~.UpdateTimeStepsDeleter`, but this time configured # to delete tracks after they have not bee associated to a measurement in the last 15 frames. deleter = UpdateTimeStepsDeleter(time_steps_since_update=15) # %% # .. note:: # # For more information on the above classes and how they operate you can refer to the Stone # `Initiators & Deleters <https://stonesoup.readthedocs.io/en/latest/auto_tutorials/09_Initiators_&_Deleters.html>`_ # tutorial.