# Description des packages ## race_path_follower ### race_node.py Node permettant à la voiture de suivre une trajectoire définie par des points dans un fichier `tracks.yaml`. Le robot démarre à partir de `p0`, puis navigue vers les points `p1`, `p2`, `p3`, etc. #### Fonctionnement général 1. Le node charge les points depuis un fichier `tracks.yaml`. 2. Il récupère la trajectoire active avec `active_track`. 3. Il initialise la pose du robot avec `p0`. 4. Il attend que Nav2 soit prêt. 5. Il attend que l’utilisateur tape `d` puis `Entrer` dans le terminal. 6. Il envoie successivement chaque point objectif à Nav2 avec `goToPose`. 7. En cas d’échec, il tente une récupération avec une marche arrière. 8. Il recommence jusqu’à atteindre le nombre de tours demandé. #### Paramètres ROS | Paramètre | Description | Valeur par défaut | | -------------- | --------------------------------------- | ----------------- | | `laps` | Nombre de tours à effectuer | `1` | | `max_retries` | Nombre maximum d’essais de recovery par objectif | `30` | | `tracks_file` | Chemin vers le fichier des trajectoires | `tracks.yaml` | | `active_track` | Nom de la trajectoire à utiliser | `""` | Si `active_track` est vide, le node utilise la valeur définie dans `tracks.yaml`. #### Remarques importantes * `p0` est uniquement la pose initiale. * La voiture ne navigue que vers `p1`, `p2`, `p3`, etc. * Si un objectif échoue, le node tente une récupération puis réessaie. * Si le nombre maximum d’essais est atteint, le point est ignoré et le node passe au suivant. * Le node utilise `BasicNavigator` de `nav2_simple_commander`. #### Bug present - Lors des transitions entre les points, la voiture fait une ligne droite le temps de calculer la nouvelle trajectoire. - Parfois la voiture tourne trop vite ou rentre dans un mur trop rapidement ce qui met sa position dans un mur ce qui empèche nav2 de plannifier une nouvelle trajectoire. Pour contrer le probleme on a une fonction run_recovery() qui lance l'action backup() de nav2 qui recule de 30cm (pour activer AMCL) sauf qu'elle aussi est bloquer par le même probleme ("start occupied" dans les logs). ![Stuck_in_angle](images/Stuck_in_wall.png)