summaryrefslogtreecommitdiffstats
path: root/source/ct-Bot/include/bot-logic/behaviour_olympic.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/ct-Bot/include/bot-logic/behaviour_olympic.h')
-rw-r--r--source/ct-Bot/include/bot-logic/behaviour_olympic.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/source/ct-Bot/include/bot-logic/behaviour_olympic.h b/source/ct-Bot/include/bot-logic/behaviour_olympic.h
new file mode 100644
index 0000000..84059e5
--- /dev/null
+++ b/source/ct-Bot/include/bot-logic/behaviour_olympic.h
@@ -0,0 +1,93 @@
+/*
+ * c't-Bot
+ *
+ * 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.
+ *
+ */
+
+/*! @file behaviour_olympic.h
+ * @brief Bot sucht saeulen und faehrt dann slalom
+ *
+ * @author Benjamin Benz (bbe@heise.de)
+ * @date 03.11.06
+*/
+
+#ifndef BEHAVIOUR_OLYMPIC_H_
+#define BEHAVIOUR_OLYMPIC_H_
+
+#include "bot-logic/bot-logik.h"
+#ifdef BEHAVIOUR_OLYMPIC_AVAILABLE
+
+/*!
+ * Das Verhalten setzt sich aus 3 Teilverhalten zusammen:
+ * Nach Licht suchen, auf das Licht zufahren, im Licht Slalom fahren. */
+void bot_olympic_behaviour(Behaviour_t *data);
+
+/*!
+ * Das Verhalten laesst den Roboter den Raum durchsuchen.
+ * Das Verhalten hat mehrere unterschiedlich Zustaende:
+ * 1. Zu einer Wand oder einem anderen Hindernis fahren.
+ * 2. Zu einer Seite drehen, bis der Bot parallel zur Wand ist.
+ * Es macht vielleicht Sinn, den Maussensor auszulesen, um eine Drehung um
+ * einen bestimmten Winkel zu realisieren. Allerdings muesste dafuer auch der
+ * Winkel des Bots zur Wand bekannt sein.
+ * 3. Eine feste Strecke parallel zur Wand vorwaerts fahren.
+ * Da bot_glance_behaviour abwechselnd zu beiden Seiten schaut, ist es fuer die Aufgabe,
+ * einer Wand auf einer Seite des Bots zu folgen, nur bedingt gewachsen und muss
+ * evtl. erweitert werden.
+ * 4. Senkrecht zur Wand drehen.
+ * Siehe 2.
+ * 5. Einen Bogen fahren, bis der Bot wieder auf ein Hindernis stoesst.
+ * Dann das Ganze von vorne beginnen, nur in die andere Richtung und mit einem
+ * weiteren Bogen. So erforscht der Bot einigermassen systematisch den Raum.
+ *
+ * Da das Verhalten jeweils nach 10ms neu aufgerufen wird, muss der Bot sich
+ * 'merken', in welchem Zustand er sich gerade befindet.
+ * */
+void bot_explore_behaviour(Behaviour_t *data);
+
+/*!
+ * Das Verhalten laesst den Bot einen Slalom fahren.
+ * @see bot_do_slalom()
+ * */
+void bot_do_slalom_behaviour(Behaviour_t *data);
+
+
+/*!
+ * Das Verhalten laesst den Bot zwischen einer Reihe beleuchteter Saeulen Slalom fahren.
+ * Das Verhalten ist wie bot_explore() in eine Anzahl von Teilschritten unterteilt.
+ * 1. Vor die aktuelle Saeule stellen, so dass sie zentral vor dem Bot und ungefaehr
+ * COL_CLOSEST (100 mm) entfernt ist.
+ * 2. 90 Grad nach rechts drehen.
+ * 3. In einem relativ engen Bogen 20 cm weit fahren.
+ * 4. Auf der rechten Seite des Bot nach einem Objekt suchen, dass
+ * a) im rechten Sektor des Bot liegt, also zwischen -45 Grad und -135 Grad zur Fahrtrichtung liegt,
+ * b) beleuchtet und
+ * c) nicht zu weit entfernt ist.
+ * Wenn es dieses Objekt gibt, wird es zur aktuellen Saeule und der Bot faehrt jetzt Slalom links.
+ * 5. Sonst zurueck drehen, 90 Grad drehen und Slalom rechts fahren.
+ * In diesem Schritt kann der Bot das Verhalten auch abbrechen, falls er gar kein Objekt mehr findet.
+ */
+void bot_do_slalom(Behaviour_t *caller);
+
+/*!
+ * Initialisiert das Olympische Verhalten
+ * @param prio_main Prioritaet des Olympischen Verhalten (typ. 100)
+ * @param prio_helper Prioritaet der Hilfsfunktionen (typ. 52)
+ * @param active ACTIVE wenn es sofort starten soll, sonst INACTIVE
+ */
+void bot_olympic_init(int8 prio_main,int8 prio_helper, int8 active);
+#endif
+#endif /*BEHAVIOUR_OLYMPIC_H_*/