From bef1e49b09f1c86399e07c82c3e768748b3ade35 Mon Sep 17 00:00:00 2001 From: Maxime Date: Mon, 26 May 2025 18:44:37 +0200 Subject: [PATCH] pidS fonctionnelS pour de la ligne droite --- Core/Src/modelec.cpp | 19 +++++++++++++++++-- Core/Src/pidPosition.cpp | 2 +- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Core/Src/modelec.cpp b/Core/Src/modelec.cpp index 6c74b83..efb90e6 100644 --- a/Core/Src/modelec.cpp +++ b/Core/Src/modelec.cpp @@ -62,8 +62,8 @@ void determinationCoefPosition(Point objectifPoint, Point pointActuel, PidPositi pid.setConsignePositionFinale(objectifPoint); - //std::array vitesse = pid.updateNouvelOrdreVitesse(pointActuel, vitGauche, vitDroit); - std::array vitesse = {0.05,0.05}; + std::array vitesse = pid.updateNouvelOrdreVitesse(pointActuel, vitGauche, vitDroit); + //std::array vitesse = {0.05,0.05}; char debug_msg[128]; sprintf(debug_msg, "[CONS] G: %.3f m/s | D: %.3f m/s\r\n", vitesse[0], vitesse[1]); @@ -121,6 +121,19 @@ void ModelecOdometrySetup(void **out_pid, void **out_pidG, void **out_pidD) { //motor.accelerer(300); *out_pid = new PidPosition( + 0.8, // kp — un poil plus agressif, il pousse plus vers la cible + 0.0, // ki — toujours off pour éviter du dépassement imprévu + 0.015, // kd — un peu moins de freinage anticipé + + 0.5, // kpTheta — peut rester soft pour éviter les oscillations d’orientation + 0.0, // kiTheta + 0.15, // kdTheta — un peu moins de frein sur la rotation + Point() + ); + + /* + + *out_pid = new PidPosition( 0.6, // kp — réduit pour adoucir la réaction 0.0, // ki — on évite encore pour l’instant 0.03, // kd — un peu de dérivée pour stabiliser @@ -131,6 +144,8 @@ void ModelecOdometrySetup(void **out_pid, void **out_pidG, void **out_pidD) { Point() ); + */ + //*out_pid = new PidPosition(1.2,0.02,0.8,0, 0, 0, Point()); *out_pidG = new PidVitesse(0.2, 0.0, 0.01, 0); *out_pidD = new PidVitesse(0.2, 0.0, 0.01, 0); diff --git a/Core/Src/pidPosition.cpp b/Core/Src/pidPosition.cpp index 4776a8a..5fc5e80 100644 --- a/Core/Src/pidPosition.cpp +++ b/Core/Src/pidPosition.cpp @@ -196,7 +196,7 @@ std::array PidPosition::updateNouvelOrdreVitesse(Point pointActuel, f sprintf(log, "[SET] VITESSE SORTIE DE PID POS | G: %.3f m/s | D: %.3f m/s\r\n", vitesseGauche, vitesseDroite); CDC_Transmit_FS((uint8_t*)log, strlen(log)); - if (fabs(erreurAvant) < 0.05 && fabs(erreurLat) < 0.05 && fabs(erreurPosition.getTheta()) < 0.5) { + if (fabs(erreurAvant) < 0.005 && fabs(erreurLat) < 0.005 && fabs(erreurPosition.getTheta()) < 0.5) { sprintf(log, "[PID] OBJECTIF ATTEINT — Robot à l'arrêt\r\n"); CDC_Transmit_FS((uint8_t*)log, strlen(log)); return {0.0, 0.0};