Phase 4 : Évaluation
On a entraîné un modèle, on l'a déployé... mais est-ce qu'il conduit vraiment bien ? 🤔 Cette page documente le système d'évaluation automatique qui mesure les performances de l'Autopilot.
Le Moment de Vérité
C'est ici qu'on découvre si notre IA sait vraiment conduire ou si elle finit dans le décor.
1. Vue d'Ensemble
Le système d'évaluation mesure deux métriques clés : * Distance Parcourue : Combien de mètres a fait la voiture sur le circuit. * Déviation (CTE) : À quelle distance de la ligne idéale elle roule (min/max/moyenne).

Le flux d'évaluation fonctionne en parallèle du pilotage : pendant que l'Autopilot conduit, traveled_distance mesure les mètres parcourus et scorer analyse la déviation via dist_to_path. Le nœud evaluator collecte toutes ces données pour afficher un graphique temps réel (Matplotlib) et générer un rapport final à la fermeture.
2. Nœud traveled_distance.py
Ce nœud calcule la distance parcourue le long du circuit.
I. Fonctionnement
| Étape | Action |
|---|---|
| 1 | Récupère la position de la voiture via TF |
| 2 | Projette cette position sur la ligne centrale du circuit |
| 3 | Calcule la progression (0% = départ, 100% = tour complet) |
| 4 | Accumule la distance parcourue en mètres |
Le nœud gère intelligemment le passage de la ligne d'arrivée (transition 99% → 1%).
II. Topics ROS
| ⬅️ Entrées | Type | Description |
|---|---|---|
/road_path |
Path |
Tracé central du circuit |
| ➡️ Sorties | Type | Description |
|---|---|---|
/traveled_distance |
Float64 |
Distance totale parcourue (m) |
/closest_point |
Marker |
Marqueur de debug (RViz) |
III. Paramètres
| Paramètre | Type | Description |
|---|---|---|
base_frame |
string |
Repère de la voiture (prius) |
3. Nœud scorer.py
Ce nœud calcule les statistiques d'une série temporelle (ici, la déviation).
I. Fonctionnement
| Statistique | Formule | Signification |
|---|---|---|
min |
Plus petite valeur reçue | Meilleur moment (plus proche de la ligne) |
max |
Plus grande valeur reçue | Pire moment (plus loin de la ligne) |
avg |
Somme / Nombre | Performance moyenne globale |
II. Topics ROS
| ⬅️ Entrées | Type | Description |
|---|---|---|
/serie |
Float64 |
Série de valeurs à analyser |
| ➡️ Sorties | Type | Description |
|---|---|---|
/min |
Float64 |
Minimum de la série |
/max |
Float64 |
Maximum de la série |
/avg |
Float64 |
Moyenne de la série |
Utilisation
Dans le launcher d'évaluation, /serie est remappé vers /dist_to_path pour analyser la déviation de la voiture.
4. Nœud evaluator.py
Ce nœud est le chef d'orchestre final. Il collecte toutes les métriques et génère un rapport complet.
I. Fonctionnement
| Étape | Action |
|---|---|
| 1 | S'abonne à /traveled_distance et /dist_to_path |
| 2 | Enregistre chaque point (distance, CTE) dans des listes |
| 3 | Affiche un graphique temps réel (Matplotlib) |
| 4 | À la fermeture (Ctrl+C), calcule les stats et sauvegarde |
II. Topics ROS
| ⬅️ Entrées | Type | Description |
|---|---|---|
/traveled_distance/data |
Float64 |
Distance parcourue |
/dist_to_path/data |
Float64 |
Déviation CTE actuelle |
III. Paramètres
| Paramètre | Type | Description |
|---|---|---|
circuit_name |
string |
Nom du circuit (pour organiser les logs) |
IV. Fichiers Générés
À la fermeture du nœud, deux fichiers sont créés dans iliar_solution/logs/<circuit>/ :
| Fichier | Contenu |
|---|---|
attempt_YYYY-MM-DD_HH-MM-SS_report.txt |
Rapport texte : distance, min/max/avg CTE, variance, écart-type |
attempt_YYYY-MM-DD_HH-MM-SS_plot.png |
Graphique : CTE en fonction de la distance parcourue |
5. Système de Contrôle
L'évaluation utilise le même système de contrôle que le déploiement :
| Nœud | Rôle |
|---|---|
command_mux |
Arbitre Teleop/Autopilot |
teleop_command |
Joystick → /teleop/*_cmd |
autopilot |
ONNX → /autopilot/*_cmd |
Le command_mux permet de reprendre le contrôle manuellement pendant l'évaluation si besoin.
6. Launcher evaluation
Ce launcher orchestre l'évaluation complète avec métriques.
I. Nœuds Lancés
| # | Nœud | Rôle |
|---|---|---|
| 1 | simulation.launch.xml |
Gazebo (monde + physique) |
| 2 | spawn_car.launch.xml |
Fait apparaître la voiture |
| 3 | rviz2 |
Visualisation (config evaluation.rviz) |
| 4 | path_publisher |
Publie le tracé central /road_path |
| 5 | path_dilater (x4) |
Génère les voies : /lanes/track, /lanes/left_2, /lanes/right_1, /lanes/right_2 |
| 6 | dist_to_path |
Calcule la déviation CTE |
| 7 | scorer |
Calcule min/max/avg de la déviation |
| 8 | traveled_distance |
Mesure la distance parcourue |
| 9 | command_mux |
Arbitre Teleop/Autopilot |
| 10 | teleop_command |
Joystick → /teleop/*_cmd |
| 11 | autopilot |
ONNX → /autopilot/*_cmd |
| 12 | evaluator |
Graphique temps réel + rapport final |
II. Arguments du Launch
| Argument | Type | Défaut | Description |
|---|---|---|---|
circuit |
string |
circuit3.sdf |
Fichier monde Gazebo (circuit1, circuit2, circuit3...) |
spawn_car |
bool |
true |
Faire apparaître la voiture (mettre false si déjà spawné) |
onnx_filename |
string |
models/PilotNetResNet.onnx |
Chemin vers le modèle ONNX à évaluer |
III. Exemples de Commandes
Lancement par défaut (Circuit 3 + Modèle par défaut) :
ros2 launch iliar_solution evaluation.launch.xml
Évaluer sur un autre circuit :
ros2 launch iliar_solution evaluation.launch.xml circuit:=circuit1.sdf
ros2 launch iliar_solution evaluation.launch.xml circuit:=circuit2.sdf
Évaluer un modèle ONNX custom :
ros2 launch iliar_solution evaluation.launch.xml onnx_filename:=/chemin/absolu/vers/MonModel.onnx
Commande complète (circuit + modèle) :
ros2 launch iliar_solution evaluation.launch.xml circuit:=circuit2.sdf onnx_filename:=/home/user/models/Transformer_v2.onnx
Sans spawn de voiture (debug / déjà spawn) :
ros2 launch iliar_solution evaluation.launch.xml spawn_car:=false
Workflow Recommandé
- Lancez l'évaluation avec la commande ci-dessus.
- Laissez la voiture faire plusieurs tours.
- Appuyez sur Ctrl+C pour arrêter et générer le rapport.
- Consultez les fichiers dans
iliar_solution/logs/<circuit>/.
7. Interprétation des Résultats
I. Lecture Topics ROS
Pendant l'évaluation, vous pouvez consulter les métriques en direct :
# Distance totale parcourue (m)
ros2 topic echo /traveled_distance
# Déviation actuelle par rapport à la ligne idéale (m)
ros2 topic echo /dist_to_path
# Statistiques cumulées
ros2 topic echo /min # Déviation minimale
ros2 topic echo /max # Déviation maximale
ros2 topic echo /avg # Déviation moyenne
II. Rapport Final (Fichier .txt)
À la fermeture (Ctrl+C), l'evaluator génère un rapport dans iliar_solution/logs/<circuit>/.
Exemple de rapport :
=== RAPPORT D'EVALUATION ===
Date: 2026-01-25_02-00-56
Circuit: circuit3.sdf
----------------------------
Distance Totale Parcourue: 227.92 m
Nombre d'echantillons: 1965
----------------------------
CTE Min: -1.2788 m
CTE Max: 0.7468 m
CTE Moyenne: -0.1178 m
CTE Variance: 0.329963 m^2
CTE Ecart-type: 0.5744 m
----------------------------
III. Comprendre les Métriques
| Métrique | Signification | Interprétation |
|---|---|---|
| Distance Parcourue | Mètres parcourus sur le circuit | Plus c'est grand, plus le modèle tient longtemps sans sortir |
| CTE Min | Déviation minimale (valeur négative = gauche) | Meilleur moment : le modèle était très centré |
| CTE Max | Déviation maximale (valeur positive = droite) | Pire moment : risque de sortie si > 3m |
| CTE Moyenne | Performance globale | Proche de 0 = bon centrage |
| Écart-type | Stabilité du pilotage | Faible = trajectoire régulière, élevé = oscillations |
IV. Grille d'Évaluation
| Métrique | 🟢 Excellent | 🟡 Acceptable | 🔴 Mauvais |
|---|---|---|---|
| Distance Parcourue | > 1000m (plusieurs tours) | 200-1000m | < 200m (sortie rapide) |
| CTE Moyenne | < 0.3m | 0.3m - 1.0m | > 1.0m |
| CTE Max | < 1.5m | 1.5m - 3.0m | > 3.0m (hors piste) |
| Écart-type | < 0.4m | 0.4m - 0.8m | > 0.8m (instable) |
V. Graphique Généré
Le fichier attempt_*_plot.png affiche la déviation (CTE) en fonction de la distance parcourue.
La zone verte représente la plage idéale (±2.5m).

Analyse du Graphique
- Courbe plate proche de 0 → Bon modèle, trajectoire stable.
- Oscillations → Le modèle surréagit aux virages.
- Dérive progressive → Biais dans l'entraînement (plus de virages d'un côté).
- Pic soudain → Virage raté ou obstacle.