Constant-velocity multi-target tracking#
The tracker supports 2D or 3D FLU state with Cartesian position and velocity:
Prediction#
For frame interval \(\Delta t\),
White acceleration noise is mapped with
Timestamps produce variable \(\Delta t\). Without timestamps, callers must supply a positive interval or the pipeline uses the model frame period.
Measurements#
Cartesian point or cluster centroids use a linear Kalman update. Radial velocity uses the nonlinear observation
and an EKF Jacobian. Near the origin, radial velocity is ignored because the direction is undefined.
Association#
Each track/measurement pair receives squared Mahalanobis distance
Pairs outside gatingThreshold are forbidden. Hungarian assignment solves the
remaining global nearest-neighbour problem. Unmatched measurements start tracks;
unmatched tracks coast.
Lifecycle#
tentative: born but belowconfirmationHits;confirmed: accumulated enough associated measurements;coasting: confirmed and currently missed;deleted: reacheddeletionMissesand appears once in the returned snapshot before removal.
tracker = rsp.MultiTargetTracker(
TrackingConfig(
enabled=True,
dimensions=3,
confirmationHits=3,
deletionMisses=5,
)
)
tracks = tracker.update(points, timestamp=frameTimestamp)
The tracker is stateful; call reset() between independent sequences. Its radial
velocity is a line-of-sight observation, not full Cartesian velocity. Reliable
tangential velocity emerges only from position evolution over time.