From cddf406dd5aec16ed013b2d4827fe778ea7cd4a6 Mon Sep 17 00:00:00 2001 From: schodet Date: Sun, 2 May 2004 04:34:28 +0000 Subject: Add: Quick & Dirty AI. --- 2004/i/nono/src/qdai/Makefile.defs | 6 ++ 2004/i/nono/src/qdai/qdai.cc | 128 +++++++++++++++++++++++++++++++++++++ 2004/i/nono/src/qdai/qdai.h | 48 ++++++++++++++ 3 files changed, 182 insertions(+) create mode 100644 2004/i/nono/src/qdai/Makefile.defs create mode 100644 2004/i/nono/src/qdai/qdai.cc create mode 100644 2004/i/nono/src/qdai/qdai.h diff --git a/2004/i/nono/src/qdai/Makefile.defs b/2004/i/nono/src/qdai/Makefile.defs new file mode 100644 index 0000000..13d7277 --- /dev/null +++ b/2004/i/nono/src/qdai/Makefile.defs @@ -0,0 +1,6 @@ +TARGETS += qdai +qdai_SOURCES = qdai.cc config.a date.a erreur.a image.a logger.o motor.o \ + ovision.o serial.o utils.o video4linux.o + +qdai: $(qdai_SOURCES:%.cc=%.o) + diff --git a/2004/i/nono/src/qdai/qdai.cc b/2004/i/nono/src/qdai/qdai.cc new file mode 100644 index 0000000..afffd97 --- /dev/null +++ b/2004/i/nono/src/qdai/qdai.cc @@ -0,0 +1,128 @@ +// 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 (); +} + diff --git a/2004/i/nono/src/qdai/qdai.h b/2004/i/nono/src/qdai/qdai.h new file mode 100644 index 0000000..9384aa5 --- /dev/null +++ b/2004/i/nono/src/qdai/qdai.h @@ -0,0 +1,48 @@ +#ifndef qdai_h +#define qdai_h +// qdai.h +// 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 "motor/motor.h" +#include "video4linux/video4linux.h" + +/// Quick & Dirty Ai. +class QdAi +{ + Motor motor_; + Video4Linux v4l_; + public: + /// Initialise le robot. + void init (void); + /// Arrète le robot. + void stop (void); + /// Lance le robot. + int run (void); + /// Mises à jour périodiques. + void update (void); + /// Mises à jour jusqu'à fin du mouvement en cours. + void updateToEnd (void); +}; + +#endif // qdai_h -- cgit v1.2.3