From 1d6fa32f84b92e6dab641beb918cbb809ce1265b Mon Sep 17 00:00:00 2001 From: dufourj Date: Fri, 6 May 2005 14:37:10 +0000 Subject: Config rc : amélioriation des paramêtres asserv (accel/kp) diminution des stats Ai : amélioriation de l'algo de parcour du fond (vitesse/tempo) Asserv : correction des setter invalides (setMaxSpeed/setAccel) --- 2005/i/robert/runtime/rc/config | 6 +-- 2005/i/robert/src/ai/ai.cc | 90 ++++++++++++++++++++++++++++++-------- 2005/i/robert/src/ai/ai.hh | 1 + 2005/i/robert/src/asserv/asserv.cc | 6 +-- 2005/i/robert/src/proto/proto.cc | 1 + 5 files changed, 79 insertions(+), 25 deletions(-) (limited to '2005') diff --git a/2005/i/robert/runtime/rc/config b/2005/i/robert/runtime/rc/config index 9c7f686..041572a 100644 --- a/2005/i/robert/runtime/rc/config +++ b/2005/i/robert/runtime/rc/config @@ -3,8 +3,8 @@ asserv.tty = "/dev/ttyS1" asserv.footing = 0xE3F asserv.epsilon = 200.00 # Aprés homolgation, passage de 64 à 96 -asserv.accel = 96 #faut que ca fasse 8 dans l'AVR -asserv.kp = 0x0FFF +asserv.accel = 50 #faut que ca fasse 8 dans l'AVR +asserv.kp = 0x1700 # 0x0FFF -> 0x0B00 asserv.ki = 0x0040 asserv.kd = 0x0FFF asserv.eSat = 1023 # p E w @@ -32,7 +32,7 @@ es.ascAccBas = 1 es.pVentouses = 3 -es.pStatTele = 8 +es.pStatTele = 1 es.teleSeuil = 1 motor.pStatPosition = 8 diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc index adce36a..dc6ba18 100644 --- a/2005/i/robert/src/ai/ai.cc +++ b/2005/i/robert/src/ai/ai.cc @@ -53,10 +53,11 @@ Ai::~Ai (void) // On réinitialise init (); // On sync - do { - update (); + do + { + scheduler_.schedule(500, true); } - while (motor_.sync ()); + while (!sync ()); } /// Initialise le robot @@ -167,6 +168,27 @@ Ai::initTest (void) init(); // Reset la PWM à zéro si on a fait de la merde en le posant sur la table resetPwm (); + + // On change la vitesse max pour reculer + std::cout << "On change la vitesse à 2" << std::endl; + setMaxSpeed (20, -1); + setAccel (30); + // Taper la boule + std::cout << "On recule à fond de 460mm" << std::endl; + basic(-300); + std::cout << "Arret d'urgence" << std::endl; + //setAccel (0); + //stop (); + // On restaure la vitesse + temporisation (400); + init (); + std::cout << "On restaure la vitesse à 8" << std::endl; + setAccel (96); + setMaxSpeed (8, -1); + std::cout << "On avance pour voir" << std::endl; + basic(+300); + + /* std::cout << "On tourne -> -PI/2" << std::endl; rotation(-M_PI/2); // On recule dans le mur @@ -187,9 +209,32 @@ Ai::initTest (void) // On lance le timer de début de match std::cout << "Lancmeent du match" << std::endl; Timer::startRound(); - /*** Fin de l'init du match ***/ + // *** Fin de l'init du match *** // - parcourtFond (); + // On avance pour pouvoir aller vers la boule parallèlement au socle + std::cout << "On avance de 540mm" << std::endl; + basic(540); // 600 - 60 + // On se place derrière les quilles en arrière + std::cout << "GoTo 925,-1150 -> Pi" << std::endl; + goTo(925, -1150, M_PI); + // On change la vitesse max pour reculer + std::cout << "On change la vitesse à 2" << std::endl; + setMaxSpeed (20, -1); + setAccel (96); + // Taper la boule + std::cout << "On recule à fond de 460mm" << std::endl; + basic(-460); + std::cout << "Arret d'urgence" << std::endl; + setAccel (0); + stop (); + // On restaure la vitesse + std::cout << "On restaure la vitesse à 8" << std::endl; + setAccel (96); + setMaxSpeed (8, -1); + std::cout << "On avance pour voir" << std::endl; + basic(-300); + */ + } @@ -200,8 +245,9 @@ Ai::parcourtFond (void) /*** Préplacement ***/ std::cout << "Placement dans la ligne - goTo 170" << std::endl; goTo (200, motor_.getY (), - M_PI / 2); + // XXX 1 degré -> 0.017 std::cout << "On avance de 30 cm" << std::endl; - basic (300); + basic (800); /*** Fin du préplacement ***/ /*** Boucle de parcours de la ligne de fond ***/ @@ -210,13 +256,13 @@ Ai::parcourtFond (void) std::cout << "On lève" << std::endl; ascenceur (true); std::cout << "Vitesse lente de rotation 2" << std::endl; - setMaxSpeed (-1, 2); + setMaxSpeed (-1, 1); std::cout << "Tourne un peu" << std::endl; rotation (M_PI); std::cout << "Fini le tour" << std::endl; rotation (M_PI / 2); std::cout << "On attend" << std::endl; - temporisation (1000); + temporisation (3000); std::cout << "On lache" << std::endl; ventouses (); std::cout << "On attend" << std::endl; @@ -232,7 +278,7 @@ Ai::parcourtFond (void) std::cout << "On avance de 100" << std::endl; basic (200); } - std::cout << "Fini" << std::endl; + std::cout << "Fini : " << Timer::getRoundTime () << std::endl; } @@ -256,24 +302,24 @@ Ai::protectQuillePont (void) basic(540); // 600 - 60 // On se place derrière les quilles en arrière std::cout << "GoTo 870,-675 -> Pi" << std::endl; - goTo(1225, -1125, M_PI); + goTo(1225, -1200, M_PI); // On change la vitesse max pour reculer std::cout << "On change la vitesse à 2" << std::endl; - motor_.setMaxSpeed (2, -1); + setMaxSpeed (2, -1); // Taper la boule std::cout << "On recule lentement de 200mm" << std::endl; - basic(-200); + basic(-140); // On restaure la vitesse std::cout << "On restaure la vitesse à 8" << std::endl; - motor_.setMaxSpeed (8, -1); + setMaxSpeed (8, -1); // On attend un peu pour protéger std::cout << "On temporise" << std::endl; - temporisation (1500); // 15000 XXX A changer + temporisation (2500); // 15000 XXX A changer // XXX à finir // On se barre des quilles basic (200); // On retourne à l'origine - goTo (450, -300, M_PI); + goTo (600, -300, M_PI); // On avance légèrement goTo (250, motor_.getY (), -M_PI / 2); // XXX Faire un fuck the wall en Y @@ -393,12 +439,11 @@ void Ai::ventouses (void) /// XXX Temps bool Ai::update (void) { scheduler_.schedule(500, true); - // Gestion des cas critiques - /// XXX + bool retour = sync (); // On vérifie que le match n'est pas fini if (Timer::getRoundTime () > roundDuration_) throw std::runtime_error ("Fin de match, merci d'avoir participé !"); - return sync (); + return retour; } /// Synchronise les données avec motor et es. @@ -465,7 +510,7 @@ void Ai::initMatch (void) Timer::startRound(); // On temporise pour laisser Taz sortir std::cout << "Attente du 15 secondes" << std::endl; - temporisation(15000); + temporisation(21000); } void @@ -475,3 +520,10 @@ Ai::setMaxSpeed (int l, int r) while (!update ()); } +void +Ai::setAccel (int a) +{ + motor_.setAccel (a); + while (!update ()); +} + diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh index 969bc16..b563410 100644 --- a/2005/i/robert/src/ai/ai.hh +++ b/2005/i/robert/src/ai/ai.hh @@ -94,6 +94,7 @@ class Ai // test void initTest (void); void setMaxSpeed (int l, int r); + void setAccel (int a); void runProtectFond (void); void parcourtFond (void); }; diff --git a/2005/i/robert/src/asserv/asserv.cc b/2005/i/robert/src/asserv/asserv.cc index 8b60a27..082f39b 100644 --- a/2005/i/robert/src/asserv/asserv.cc +++ b/2005/i/robert/src/asserv/asserv.cc @@ -308,10 +308,10 @@ void Asserv::setDSample (int dSample) void Asserv::setAccel(int accel) { - accel_ = accel_; + accel_ = accel; //log_ ("setAccel") << "avConv" << accel; // envoie vers l'AVR - proto_.send('p',"bb", 'a', accel); + proto_.send('p',"bb", 'a', accel_); } /// Renvoie l'accélération en unité international (mm/s²) @@ -326,7 +326,7 @@ void Asserv::setMaxSpeed(int maxSLin, int maxSRot) maxSLin_ = (maxSLin > 0 ? maxSLin : maxSLin_); maxSRot_ = (maxSRot > 0 ? maxSRot : maxSRot_); // Envoie à l'AVR - proto_.send('p',"bbb", 'm', maxSLin, maxSRot); + proto_.send('p',"bbb", 'm', maxSLin_, maxSRot_); } int Asserv::getMaxLSpeed(void) diff --git a/2005/i/robert/src/proto/proto.cc b/2005/i/robert/src/proto/proto.cc index 177f5c3..a7ada32 100644 --- a/2005/i/robert/src/proto/proto.cc +++ b/2005/i/robert/src/proto/proto.cc @@ -241,6 +241,7 @@ Proto::getFrame(void) currentFrame_.command = receivedChar; revState_ = 2; } + // On vérifie que le match n'est pas fini break; case 2: d = hex2digit (receivedChar); -- cgit v1.2.3