User manual

RP6 ROBOT SYSTEM - 4. Programmierung des RP6
Beispiel 9: Exkursion - Endliche Automaten
Verzeichnis: <RP6Examples>\RP6BaseExamples\Example_05_Move_04_FSM\
Datei: RP6Base_Move_04_FSM.c
Das Programm erzeugt Ausgaben auf der seriellen Schnittstelle
Der Roboter bewegt sich in diesem Beispielprogramm nicht !
Für komplexere Programme reichen die einfachen Methoden die wir in den bisherigen
Beispielprogrammen verwendet haben nicht immer aus.
Beispielsweise für verhaltensgesteuerte Roboter braucht man endliche Automaten
(engl. Finite State Machines oder kurz FSMs) damit man das überhaupt realisieren
kann. Dieses Beispielprogramm zeigt einen einfachen endlichen Automaten, der sei-
nen Zustand ändert wenn man die Bumper drückt. Was das Programm genau tut,
sieht man am Besten, wenn man es einfach mal ausführt und je zweimal auf die Bum-
per drückt. Dabei sollte man sich die Ausgaben im Terminal und die Status LEDs an-
schauen und die Bumper zunächst langsam drücken und wieder loslassen!
Meistens werden endliche Automaten in C mit einem switch-case Konstrukt realisiert
(oder einem Haufen if-else-if-else Bedingungen... switch ist jedoch übersichtlicher).
Ein kleines Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "RP6RobotBaseLib.h"
#define STATE_START 0
#define STATE_1 1
#define STATE_2 2
#define STATE_3 3
uint8_t state = STATE_START;
void simple_stateMachine(void)
{
switch(state)
{
case STATE_START: writeString("\nSTART\n"); state = STATE_1;
break;
case STATE_1: writeString("Zustand 1\n"); state = STATE_2;
break;
case STATE_2: writeString("Zustand 2\n"); state = STATE_3;
break;
case STATE_3: writeString("Zustand 3\n"); state = STATE_START;
break;
}
}
int main(void)
{
initRobotBase();
while(true)
{
simple_stateMachine();
mSleep(500);
}
return 0;
}
- 117 -