Diagnostica › Filtro

Filtro — Metriche real-time

Posa stimata, covarianza, qualità del matching e determinismo del ciclo AMCL.

● live
aggiornato <1s fa

Sprint 9.A.5 + 9.A.5-bis + 9.B.4-c + 9.A.3-d + 9.B.6-c + 9.B.6-d.2 + 9.B.6-d.3-a/b/c. 7 widget live: posa + covarianza 3σ real-time, jitter, quality flags, residui + inlier ratio NDT (observe-mode), NEES window χ²(3 dof, 95 %) AMCL-vs-ground-truth, residui Mahalanobis ESKF + accept/reject lifetime, NEES paired ESKF-vs-AMCL. Header card ESKF: pulsante Reset filtro + chip 4-state lifecycle FSM (UNINIT / BOOTSTRAPPING / WARM / HEALTHY) sorgente /slox/eskf/health latched. NEES GT richiede slox_ground_truth (validation-only); l'ESKF è auto-incluso in slox.launch.py dalla slice -d.3-a.

Posa & covarianza 3σ
x = 1.833 m · y = -1.635 m · θ = 65.3°
● live posa + covarianza
map frame+X →3σ (real)posa stimata · q 0
L'ellisse 3σ è un placeholder: il publisher della covarianza 3×3 sarà aggiunto in Sprint 9.A.5-bis backend; oggi disegniamo un'ellisse derivata dal solo quality per fissare l'ingombro visivo.
Jitter filtro (AMCL inter-arrival)
p99 = 302.83 ms · fuori target

600 sample · finestra 128.6 s

● live
1 ms Bosch
2 ms SLOX
mean
214.32 ms
p95
300.15 ms
p99
302.83 ms
max
312.85 ms
Scala 0 – 3 ms. Soglie: SLOX p99 < 2 ms · Bosch ref < 1 ms.
Residui matching · inlier ratio (NDT)
convergente
● live · NDT observe-mode
inlier ratio (Mah² ≤ 5.99)

98 % (120 / 123)

0 % 70 % warn 90 % target 100 %
residui Mahalanobis (p50 / p95)

1.15 · 1.79

χ² 95 %
0 3.5
SOLVER

33 iter · convergente

COPERTURA SCAN

123 / 180 in mappa

SCORE NDT

-117.4

Sorgente: /slox/match_diagnostics @ ~5 Hz da slox_ndt_matcher (observe-mode; non altera la pose AMCL). Mahalanobis è unit-less (residui normalizzati dalla σ del filtro).
NEES window (χ² 95% 3-DoF)
in attesa /slox/ground_truth/pose
● in attesa · 9.A.3-b
Il nodo slox_ground_truth (Sprint 9.A.3-b) è un tool di validazione: NON viene avviato in produzione. La harness lo lancia con ros2 launch slox_ground_truth ground_truth.launch.py csv_path:=... + un log prismi della total station. Senza prismi rigidi e Leica TS/MS, NEES resta in attesa per design. NEES = eᵀ Σ⁻¹ e con e = (x_AMCL − x_GT, y, θ); Σ blocco diagonale 2-D xy ⨁ yaw da /slox/amcl_covariance (9.A.5-bis). Sorgente GT: /slox/ground_truth/pose da total station Leica (Sprint 9.A.3-b validation-only).
Stato ESKF · 7-D filter
x = 0.836 m · y = -2.156 m · θ = -82.3°

seq 502069 · init: true

● WARM · observe
Δt 0.02 s
transitions 2 · last 06:36 UTC
SCALE_L

1.0000 ± 0.0510

min 1.0000 … max 1.0000
● stabile
SCALE_R

1.0000 ± 0.0510

min 1.0000 … max 1.0000
● stabile
BIAS_GYRO

-3.5120 ± 0.0051 rad/s

min -3.5120 … max -3.4965
● divergente
TRACK_WIDTH

0.5000 ± 0.0107 m

min 0.5000 … max 0.5000
● stabile
Calibrazione online · ±σ da covariance[i·7+i], i ∈ {3,4,5,6} · sparkline window paired 300 / 300 sample @ 5 Hz ESKF (Sprint 9.B.3).
Residui Mahalanobis filtro (ESKF chi² gate)
Mah² = 351.39 / 14.16 χ² · rifiutato

df = 3 (full pose) · ultimo update vs /slox/pose_with_quality

● live · ESKF 9.B.6-b
Mah² (ultimo update vs χ² gate)

351.39 / 14.16 (χ² 99.7%)

χ² 95%
χ² 99.7%
0 14.16
ACCEPT RATE

1.0 % (4689 / 469003)

PREDICT (LIFETIME)

5019385 tick

ADAPTIVE Q

×1.00

LAST v / ω / Δt

0.00 m/s · 3.51 rad/s · 20 ms

ULTIMO DF

3 (full pose)

REJECTED (LIFETIME)

464314 chi² outlier

Sorgente: /slox/filter_state.last_update_* e counters lifetime. Verde a 7.82 (χ² 95%) è la soglia di guardia; oltre = candidate outlier.
NEES filtro-vs-AMCL (paired, χ² 95 % 3-DoF)
ESKF coerente con AMCL

Δ = (ESKF − AMCL) · Σ = P_ESKF + P_AMCL

● live · paired-NEES
in-band ratio (NEES ≤ 7.82)

99 % (99 / 100)

0 % 80 % warn 95 % target 100 %
NEES window (mean / p50 / p95)

2.25 · 1.88 · 4.64

χ²₃ 95%
0 15.0
FINESTRA

100 / 100 campioni

PEGGIORE

7.88

ULTIMA SEQ

502069

NEES = eᵀ (P_ESKF + P_AMCL)⁻¹ e con e = (px_ESKF − px_AMCL, py, wrap(θ)). Test di consistenza fra due stimatori indipendenti, NON un vero NEES (no ground truth). Sotto H0 ~ χ²(3).
Quality breakdown · flags PoseWithQuality
quality = 0 / 100 · seq 469005
● live
bit 0

VALID

posa accettata
bit 1

DEGRADED

quality sotto soglia
bit 2

MAPPING

AMCL attivo
bit 3

LIDAR

stream lidar nominale
bit 4

ODOM

stream odom nominale
bit 5

DEAD-RECK

feature starvation (9.B.10)
Sorgenti bit: bit 0–2 da quality_node, bit 3–4 da Sprint 7.2 sensor failsafe, bit 5 da Sprint 9.B.10 feature starvation.
Sorgente: IRosLiveStream (FilterJitter, PoseWithQuality, AmclCovariance, MatchDiagnostics, GroundTruthPose). Aggiornamento push, no polling.
Si è verificato un errore non gestito. Ricarica 🗙