use ados_protocol::framebus::Detection;
#[derive(Debug, Clone, Copy)]
pub struct TrackerConfig {
pub min_iou: f32,
pub max_center_dist_diag: f32,
pub gate_sigma: f32,
pub min_confidence: f32,
pub confirm_hits: u32,
pub max_coast_frames: u32,
pub measurement_noise: f32,
pub process_noise: f32,
pub max_velocity: f32,
pub min_appearance: f32,
pub ambiguous_margin: f32,
pub template_lr: f32,
pub score_weights: ScoreWeights,
}
#[derive(Debug, Clone, Copy)]
pub struct ScoreWeights {
pub appearance: f32,
pub motion: f32,
pub confidence: f32,
}
impl Default for ScoreWeights {
fn default() -> Self {
Self {
appearance: 0.6,
motion: 0.3,
confidence: 0.1,
}
}
}
impl Default for TrackerConfig {
fn default() -> Self {
Self {
min_iou: 0.1,
max_center_dist_diag: 1.5,
gate_sigma: 3.0,
min_confidence: 0.0,
confirm_hits: 2,
max_coast_frames: 8,
measurement_noise: 4.0,
process_noise: 1.0,
max_velocity: 40.0,
min_appearance: 0.5,
ambiguous_margin: 0.08,
template_lr: 0.1,
score_weights: ScoreWeights::default(),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TrackState {
Idle,
Tentative,
Confirmed,
Coasting,
}
#[derive(Debug, Clone)]
pub struct TrackUpdate {
pub state: TrackState,
pub detection: Option<Detection>,
pub track_id: Option<u64>,
pub measured: bool,
pub needs_redesignation: bool,
pub operator_designated: bool,
}