// qdai.cc // nono - programme du robot 2004. {{{ // // Copyright (C) 2004 Nicolas Schodet // // Robot APB Team/Efrei 2004. // Web: http://assos.efrei.fr/robot/ // Email: robot AT efrei DOT fr // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // }}} #include "qdai.h" #include "motor/movement_types.h" #include /// Initialise le robot. void QdAi::init (void) { /// Calibre la camera. v4l_.calibrate (); /// Asservi les moteurs. motor_.go (); } /// Arrète le robot. void QdAi::stop (void) { /// Attend l'arret complet de l'appareil. motor_.waitStopped (); } /// Lance le robot. int QdAi::run (void) { int state = 0; // Mises à jour. update (); // Automate. switch (state) { case 10: // Recherche de balle. { Movement *m = new MovementRoundCruise (0.1); motor_.setMovement (m); // Attendre de trouver une balle. } break; case 20: // Trackage de balle. { Goto *g = new GotoTrack (); Movement *m = new MovementGoto (g); motor_.setMovement (m); updateToEnd (); } break; case 30: // Goto zone d'essai. { // Goto près de la zone d'essais. { Goto *g = new GotoSimple (8 * 300, 450); Movement *m = new MovementGoto (g); motor_.setMovement (m); updateToEnd (); } // Rotation vers la zone d'essais. { Movement *m = new MovementRotation (0.0); motor_.setMovement (m); updateToEnd (); } // Goto la zone d'essais. { Goto *g = new GotoSimple (8 * 300 + 15, 450); Movement *m = new MovementGoto (g); motor_.setMovement (m); updateToEnd (); } } state = 40; break; case 40: // Essai. { // Lever la benne. // Sortir les balles. // Baisser la benne. } break; } } /// Mises à jour périodiques. void QdAi::update (void) { // Mise à jour moteur. motor_.waitOk (); // Mise à jour camera. } /// Mises à jour jusqu'à fin du mouvement en cours. void QdAi::updateToEnd (void) { while (!motor_.end ()) update (); }