summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaller2005-04-28 22:28:39 +0000
committerhaller2005-04-28 22:28:39 +0000
commitac5749a03f51d6cd883f9991c3cf271b9aced847 (patch)
treead5fbd166a13dfceba49d1166422318660aa86ca
parent9b4d2709fc7ebd2285e5f5d0cb98d72e8d6e2d03 (diff)
Création d'un programme de test pour ai
Ajout d'une fonction wait dans la classe ai autres petites modification dans ai
-rw-r--r--2005/i/robert/src/ai/ai.hh9
-rw-r--r--2005/i/robert/src/ai/test_ai.cc163
2 files changed, 166 insertions, 6 deletions
diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh
index 5ce3bc2..68a99b9 100644
--- a/2005/i/robert/src/ai/ai.hh
+++ b/2005/i/robert/src/ai/ai.hh
@@ -53,24 +53,21 @@ class Ai
void stop (void);
/// Lance le robot.
void run (void);
- protected:
/// Lance le robot.
- void run0 (void);
- void run1 (void);
/// Attend.
void wait (int t);
// Attend le jack entré (false) ou sorti (true).
void waitJack (bool out);
/// Rejoint un point.
- void goTo (double x, double y);
+ void goTo (double x, double y, double a);
/// Recale contre une bordure.
void recale (void);
/// Mouvement basic.
- void basic (double v, double d);
+ void basic (double d);
/// Rotation.
void rotation (double a);
/// Monte(vrai) ou descend(faux) l'ascenceur
- void ascenceur (bool monte);
+ void ascenceur (stateAsc monte);
/// Désactive les ventouse
void ventouses (void);
/// Attend une mise à jour
diff --git a/2005/i/robert/src/ai/test_ai.cc b/2005/i/robert/src/ai/test_ai.cc
new file mode 100644
index 0000000..91077c0
--- /dev/null
+++ b/2005/i/robert/src/ai/test_ai.cc
@@ -0,0 +1,163 @@
+#ifndef test_asserv_hh
+#define test_asserv_hh
+// asserv.hh
+// robert - programme du robot 2005 {{{
+//
+// Copyright (C) 2005 Nicolas Haller
+//
+// Robot APB Team/Efrei 2005.
+// 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.
+//
+// }}}
+
+/// Affiche un memo de suntaxe.
+ void
+syntax (void)
+{
+ std::cout << "test_asserv - test la classe de protocol asserv.\n"
+ "Syntaxe : test_asserv <...>\n"
+ " s <cmd> <args...> envois une commande\n"
+ " w <ms> attend pendant un nombre de millisecondes\n"
+ " ? affiche cet écran d'aide\n"
+ << std::endl;
+}
+
+ int
+main (int argc, char **argv)
+{
+ try
+ {
+ int i;
+ if (argc < 2)
+ {
+ syntax ();
+ return 1;
+ }
+ Config config(argc, argv);
+ Ai ai(config);
+ i = 1;
+ while (i < argc)
+ {
+ switch (argv[i][0])
+ {
+ case 's':
+ {
+ switch(argv[++i][0])
+ {
+ case 'i':
+ ai.init();
+ break;
+ case 's':
+ ai.stop();
+ break;
+ case 'r':
+ ai.run();
+ break;
+ case 'j':
+ if(++i > argc)
+ throw std::runtime_error("syntax error");
+ if(argv[i][0] == 0)
+ {
+ std::cout << "Attente de l'entrée de Jack" << std::endl;
+ ai.waitJack(false);
+ }
+ else
+ {
+ std::cout << "Attente de la sortie de Jack" << std:endl;
+ ai.waitJack(true);
+ }
+ break;
+ case 'g':
+ if(++i + 2 > argc)
+ throw std::runtime_error("syntax error");
+ ai.goTo(strtod(argv[i], 0),
+ strtod(argv[i + 1], 0),
+ strtod(argv[i + 2], 0));
+ i += 2;
+ break;
+ case 'r':
+ ai.recale();
+ break;
+ case 'b':
+ if(++i > argc)
+ throw std::runtime_error("syntax error");
+ ai.basic(strtod(argv[i]));
+ break;
+ case 'r':
+ if(++i > argc)
+ throw std::runtime_error("syntax error");
+ ai.rotation(strtod(argv[i]));
+ break;
+ case 'a':
+ if(++i + 1 > argc)
+ throw std::runtime_error("syntax error");
+ switch(argv[i])
+ {
+ case '0':
+ ai.moveAsc(BAS);
+ break;
+ case '1':
+ ai.moveAsc(MILIEU);
+ break;
+ case '2':
+ ai.moveAsc(HAUT);
+ break;
+ }
+ break;
+ case 'v':
+ ai.ventouses();
+ break;
+ case 'U':
+ ai.update();
+ break;
+ }
+ break;
+ }
+ case 'w':
+ {
+ int stop, t;
+ if (i + 1 >= argc)
+ throw std::runtime_error ("syntax error");
+ stop = atoi (argv[++i]) + Timer::getProgramTime ();
+ t = Timer::getProgramTime ();
+ while (t < stop)
+ {
+ asserv.wait (stop - t);
+ t = Timer::getProgramTime ();
+ }
+ break;
+ }
+ case '?':
+ syntax ();
+ return 0;
+ default:
+ throw std::runtime_error ("syntax error");
+ }
+ i++;
+ }
+ }
+ catch (const std::exception &e)
+ {
+ std::cerr << e.what () << std::endl;
+ syntax ();
+ return 1;
+ }
+ return 0;
+}
+
+#endif // test_asserv.hh