From d1a249e0d5d31cae6ad0117f66818e0d76736a18 Mon Sep 17 00:00:00 2001 From: Samuel Date: Tue, 28 Mar 2023 23:02:58 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20d=C3=A9tection=20?= =?UTF-8?q?de=20fin=20de=20trajet=20pour=20les=20courbes=20de=20b=C3=A9zie?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Trajet.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Trajet.c b/Trajet.c index 65365fa..cc98d2b 100644 --- a/Trajet.c +++ b/Trajet.c @@ -5,6 +5,7 @@ #include "Asser_Position.h" double Trajet_calcul_vitesse(double temps_s); +int Trajet_terminee(double abscisse); double abscisse; // Position entre 0 et 1 sur la trajectoire double position_mm; // Position en mm sur la trajectoire @@ -65,13 +66,30 @@ enum etat_trajet_t Trajet_avance(double pas_de_temps_s){ position_consigne=position; Asser_Position(position); - if(abscisse >= 1 ){ + if(Trajet_terminee(abscisse)){ trajet_etat = TRAJET_TERMINE; } return trajet_etat; } +/// @brief Savoir si un trajet est terminé est trivial sauf pour les courbes de Bézier +/// où les approximations font que l'abscisse peut ne pas atteindre 1. +/// @param abscisse : abscisse sur la trajectoire +/// @return 1 si le trajet est terminé, 0 sinon +int Trajet_terminee(double abscisse){ + if(trajet_trajectoire.type != TRAJECTOIRE_BEZIER){ + if(abscisse >= 1 ){ + return 1; + } + }else{ + if(abscisse >= 0.99 ){ + return 1; + } + } + return 0; +} + /// @brief Envoie la consigne de position calculée par le module trajet. Principalement pour le débug/réglage asservissement. struct position_t Trajet_get_consigne(){ return position_consigne;