gugus

Dependencies:   mbed

Committer:
Brignall
Date:
Fri May 18 12:18:21 2018 +0000
Revision:
0:1a0321f1ffbc
lala;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Brignall 0:1a0321f1ffbc 1 /*
Brignall 0:1a0321f1ffbc 2 * StateMachine.h
Brignall 0:1a0321f1ffbc 3 * Copyright (c) 2018, ZHAW
Brignall 0:1a0321f1ffbc 4 * All rights reserved.
Brignall 0:1a0321f1ffbc 5 */
Brignall 0:1a0321f1ffbc 6
Brignall 0:1a0321f1ffbc 7 #ifndef STATE_MACHINE_H_
Brignall 0:1a0321f1ffbc 8 #define STATE_MACHINE_H_
Brignall 0:1a0321f1ffbc 9
Brignall 0:1a0321f1ffbc 10 #include <cstdlib>
Brignall 0:1a0321f1ffbc 11 #include <deque>
Brignall 0:1a0321f1ffbc 12 #include <mbed.h>
Brignall 0:1a0321f1ffbc 13 #include "Controller.h"
Brignall 0:1a0321f1ffbc 14 #include "IRSensor.h"
Brignall 0:1a0321f1ffbc 15 #include "Task.h"
Brignall 0:1a0321f1ffbc 16 #include "TaskWait.h"
Brignall 0:1a0321f1ffbc 17 #include "TaskMove.h"
Brignall 0:1a0321f1ffbc 18 #include "TaskMoveTo.h"
Brignall 0:1a0321f1ffbc 19 #include "TaskMoveToWaypoint.h"
Brignall 0:1a0321f1ffbc 20
Brignall 0:1a0321f1ffbc 21 /**
Brignall 0:1a0321f1ffbc 22 * This class implements a simple state machine for a mobile robot.
Brignall 0:1a0321f1ffbc 23 * It allows to move the robot forward, and to turn left or right,
Brignall 0:1a0321f1ffbc 24 * depending on distance measurements, to avoid collisions with
Brignall 0:1a0321f1ffbc 25 * obstacles.
Brignall 0:1a0321f1ffbc 26 */
Brignall 0:1a0321f1ffbc 27 class StateMachine {
Brignall 0:1a0321f1ffbc 28
Brignall 0:1a0321f1ffbc 29 public:
Brignall 0:1a0321f1ffbc 30
Brignall 0:1a0321f1ffbc 31 static const int ROBOT_OFF = 0; // discrete states of this state machine
Brignall 0:1a0321f1ffbc 32 static const int PROCESSING_TASKS = 1;
Brignall 0:1a0321f1ffbc 33 static const int TURN_LEFT = 2;
Brignall 0:1a0321f1ffbc 34 static const int TURN_RIGHT = 3;
Brignall 0:1a0321f1ffbc 35 static const int SLOWING_DOWN = 4;
Brignall 0:1a0321f1ffbc 36
Brignall 0:1a0321f1ffbc 37 StateMachine(Controller& controller, DigitalOut& enableMotorDriver, DigitalOut& led0, DigitalOut& led1, DigitalOut& led2, DigitalOut& led3, DigitalOut& led4, DigitalOut& led5, DigitalIn& button, IRSensor& irSensor0, IRSensor& irSensor1, IRSensor& irSensor2, IRSensor& irSensor3, IRSensor& irSensor4, IRSensor& irSensor5);
Brignall 0:1a0321f1ffbc 38 virtual ~StateMachine();
Brignall 0:1a0321f1ffbc 39 int getState();
Brignall 0:1a0321f1ffbc 40
Brignall 0:1a0321f1ffbc 41 private:
Brignall 0:1a0321f1ffbc 42
Brignall 0:1a0321f1ffbc 43 static const float PERIOD; // period of task in [s]
Brignall 0:1a0321f1ffbc 44 static const float DISTANCE_THRESHOLD; // minimum allowed distance to obstacle in [m]
Brignall 0:1a0321f1ffbc 45 static const float TRANSLATIONAL_VELOCITY; // translational velocity in [m/s]
Brignall 0:1a0321f1ffbc 46 static const float ROTATIONAL_VELOCITY; // rotational velocity in [rad/s]
Brignall 0:1a0321f1ffbc 47
Brignall 0:1a0321f1ffbc 48 Controller& controller;
Brignall 0:1a0321f1ffbc 49 DigitalOut& enableMotorDriver;
Brignall 0:1a0321f1ffbc 50 DigitalOut& led0;
Brignall 0:1a0321f1ffbc 51 DigitalOut& led1;
Brignall 0:1a0321f1ffbc 52 DigitalOut& led2;
Brignall 0:1a0321f1ffbc 53 DigitalOut& led3;
Brignall 0:1a0321f1ffbc 54 DigitalOut& led4;
Brignall 0:1a0321f1ffbc 55 DigitalOut& led5;
Brignall 0:1a0321f1ffbc 56 DigitalIn& button;
Brignall 0:1a0321f1ffbc 57 IRSensor& irSensor0;
Brignall 0:1a0321f1ffbc 58 IRSensor& irSensor1;
Brignall 0:1a0321f1ffbc 59 IRSensor& irSensor2;
Brignall 0:1a0321f1ffbc 60 IRSensor& irSensor3;
Brignall 0:1a0321f1ffbc 61 IRSensor& irSensor4;
Brignall 0:1a0321f1ffbc 62 IRSensor& irSensor5;
Brignall 0:1a0321f1ffbc 63 int state;
Brignall 0:1a0321f1ffbc 64 int buttonNow;
Brignall 0:1a0321f1ffbc 65 int buttonBefore;
Brignall 0:1a0321f1ffbc 66 deque<Task*> taskList;
Brignall 0:1a0321f1ffbc 67 Ticker ticker;
Brignall 0:1a0321f1ffbc 68
Brignall 0:1a0321f1ffbc 69 void run();
Brignall 0:1a0321f1ffbc 70 };
Brignall 0:1a0321f1ffbc 71
Brignall 0:1a0321f1ffbc 72 #endif /* STATE_MACHINE_H_ */
Brignall 0:1a0321f1ffbc 73