Aller au contenu

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).

Evaluation

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é

  1. Lancez l'évaluation avec la commande ci-dessus.
  2. Laissez la voiture faire plusieurs tours.
  3. Appuyez sur Ctrl+C pour arrêter et générer le rapport.
  4. 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).

Graphique

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.