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:
-
Le waypoint_publisher_node qui s'occupe de charger la liste de waypoints en mémoire et la publier sur un topic.
-
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.