Correction de bug : dans certains cas, le calcul de déplacement sur une courbe de bézier restait bloqué dans une boucle.

This commit is contained in:
Samuel 2026-05-08 23:47:51 +02:00
parent a506ece7ce
commit 366329ccdf
2 changed files with 7 additions and 4 deletions

View File

@ -7,6 +7,7 @@
#include "math.h" #include "math.h"
#define PRECISION_ABSCISSE 0.001f #define PRECISION_ABSCISSE 0.001f
#define NB_MAX_ITERATIONS 3
void Trajectoire_circulaire(struct trajectoire_t * trajectoire, float centre_x, float centre_y, float angle_debut_rad, void Trajectoire_circulaire(struct trajectoire_t * trajectoire, float centre_x, float centre_y, float angle_debut_rad,
@ -178,10 +179,12 @@ float Trajectoire_avance(struct trajectoire_t * trajectoire, double abscisse, do
// Sur les trajectoires de bézier, il peut être nécessaire d'affiner // Sur les trajectoires de bézier, il peut être nécessaire d'affiner
// Les cas où l'algorythme diverge ne devraient pas se produire car distance_cm << longeur_trajectoire. // Les cas où l'algorythme diverge ne devraient pas se produire car distance_cm << longeur_trajectoire.
erreur_relative = 1 - delta_mm / distance_mm; erreur_relative = 1 - delta_mm / distance_mm;
while(fabs(erreur_relative) > PRECISION_ABSCISSE){ int nb_iteration=0;
while(fabs(erreur_relative) > PRECISION_ABSCISSE && nb_iteration < NB_MAX_ITERATIONS){
delta_abscisse = delta_abscisse * distance_mm / delta_mm; delta_abscisse = delta_abscisse * distance_mm / delta_mm;
delta_mm = distance_points(Trajectoire_get_point(trajectoire, abscisse).point_xy, Trajectoire_get_point(trajectoire, abscisse + delta_abscisse).point_xy ); delta_mm = distance_points(Trajectoire_get_point(trajectoire, abscisse).point_xy, Trajectoire_get_point(trajectoire, abscisse + delta_abscisse).point_xy );
erreur_relative = 1 - delta_mm / distance_mm; erreur_relative = 1 - delta_mm / distance_mm;
nb_iteration++;
} }
return abscisse + delta_abscisse; return abscisse + delta_abscisse;

View File

@ -1,7 +1,7 @@
// Changer le define en fonction qu'on soit sur les PAMIs ou sur le robot principal // Changer le define en fonction qu'on soit sur les PAMIs ou sur le robot principal
#define ROBOT_PROPULSION_2026 //#define ROBOT_PROPULSION_2026
//#define ROBOT_TYPE_PAMI #define ROBOT_TYPE_PAMI
#ifndef ROBOT_PROPULSION_2026 #ifndef ROBOT_PROPULSION_2026
#ifndef ROBOT_TYPE_PAMI #ifndef ROBOT_TYPE_PAMI