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 = 2.031 m · y = 1.552 m · θ = 15.6°
● 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 = 307.08 ms · fuori target

600 sample · finestra 128.4 s

● live
1 ms Bosch
2 ms SLOX
mean
213.98 ms
p95
301.29 ms
p99
307.08 ms
max
309.76 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 % (145 / 148)

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

1.42 · 2.14

χ² 95 %
0 3.5
SOLVER

32 iter · non conv.

COPERTURA SCAN

148 / 180 in mappa

SCORE NDT

-140.1

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.035 m · y = -0.042 m · θ = -12.6°

seq 1187355 · init: true

● WARM · observe
Δt 0.02 s
transitions 2 · last 12:04 UTC
SCALE_L

1.0000 ± 0.0524

min 1.0000 … max 1.0000
● stabile
SCALE_R

1.0000 ± 0.0524

min 1.0000 … max 1.0000
● stabile
BIAS_GYRO

6.0874 ± 0.0051 rad/s

min 6.0871 … max 6.0969
● stabile
TRACK_WIDTH

0.5000 ± 0.0116 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² = 218.07 / 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)

218.07 / 14.16 (χ² 99.7%)

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

1.4 % (15474 / 1109384)

PREDICT (LIFETIME)

11869507 tick

ADAPTIVE Q

×1.00

LAST v / ω / Δt

0.00 m/s · -6.09 rad/s · 20 ms

ULTIMO DF

3 (full pose)

REJECTED (LIFETIME)

1093910 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 incoerente con AMCL

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

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

52 % (52 / 100)

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

27.09 · 6.71 · 45.27

χ²₃ 95%
0 15.0
FINESTRA

100 / 100 campioni

PEGGIORE

901.77

ULTIMA SEQ

1187355

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 1109397
● 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 🗙