Stanley controller - vaul-ulaval/vaul-wiki GitHub Wiki

➡️ Lien vers le code

En bref

Le stanley controller est un algorithme de contrôle qui vise à minimiser l'erreur latérale et l'erreur de direction du véhicule par rapport à la ligne de course.

Les mathématiques

Les mathématiques sont expliqués dans cet article.

Implémentation du VAUL

Choix de design

Le stanley controller du VAUL dépend de 2 noeuds:

  1. Le waypoint_publisher_node qui s'occupe de charger la liste de waypoints en mémoire et la publier sur un topic.

  2. Le stanley_controller qui contient la logique de contrôle.

Utilisation du stanley controller

Pour utiliser le stanley controller, il est nécessaire de faire une carte de l'environnement. Par la suite, on peut générer une raceline pour le robot à l'aide du gui de génération de racelines. Finalement, on peut utiliser l'algorithme pour suivre cette raceline.

➡️ Protocole de déploiement

Documentation des fonctions

transform_waypoint

Permet de transformer un waypoint d'un système de coordonnée à un autre.

compute_cross_track_error

Calcule l'erreur latérale. Utilise cette méthode.

get_steering

Permet de calculer l'angle de braquage selon l'algorithme.

smooth_start_velocity_limiter

Permet de limiter la vitesse lorsqu'on démarre le véhicule à un endroit où la vitesse serait normalement élevé. Peut être ajusté à l'aide des paramètres smooth_start_threshold et smooth_start_factor.

get_velocity

Récupère la vitesse de la ligne de course à la position du robot et la multiplie par le velocity_percentage.

pub_drive

Publie une commande de vitesse et d'angle de direction sur le topic drive.

odom_callback

Permet la mise à jour de la vitesse et de la direction mesuré du robot.

closest_waypoint_to_car_cb

C'est la fonction qui est appelée à chaque fois que la position du robot change. C'est ici qu'on calcule le steering_angle et la vitesse à envoyer comme commande au robot.

pi_2_pi

Permet de normaliser un angle entre PI et -PI.

visualize_steering

Visualise l'angle de braquage dans Rviz et foxglove.

update_parameters

Mets à jour périodiquement tous les paramètres du noeud.