Example project

Dependencies:   PM2_Libary Eigen

Committer:
pmic
Date:
Tue May 10 14:11:06 2022 +0200
Revision:
39:f336caef17d9
Parent:
37:698d6b73b50c
Version without StateMachine

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pmic 37:698d6b73b50c 1 /*
pmic 37:698d6b73b50c 2 * Controller.h
pmic 37:698d6b73b50c 3 * Copyright (c) 2022, ZHAW
pmic 37:698d6b73b50c 4 * All rights reserved.
pmic 37:698d6b73b50c 5 */
pmic 37:698d6b73b50c 6
pmic 37:698d6b73b50c 7 #ifndef CONTROLLER_H_
pmic 37:698d6b73b50c 8 #define CONTROLLER_H_
pmic 37:698d6b73b50c 9
pmic 37:698d6b73b50c 10 #include <cstdlib>
pmic 37:698d6b73b50c 11 #include <mbed.h>
pmic 37:698d6b73b50c 12 #include "EncoderCounterROME2.h"
pmic 37:698d6b73b50c 13 #include "Motion.h"
pmic 37:698d6b73b50c 14 #include "LowpassFilter.h"
pmic 37:698d6b73b50c 15 #include "ThreadFlag.h"
pmic 37:698d6b73b50c 16
pmic 37:698d6b73b50c 17 /**
pmic 37:698d6b73b50c 18 * This class implements a controller that regulates the
pmic 37:698d6b73b50c 19 * speed of the two motors of the ROME2 mobile robot.
pmic 37:698d6b73b50c 20 */
pmic 37:698d6b73b50c 21 class Controller {
pmic 37:698d6b73b50c 22
pmic 37:698d6b73b50c 23 public:
pmic 37:698d6b73b50c 24
pmic 37:698d6b73b50c 25 Controller(PwmOut& pwmLeft, PwmOut& pwmRight, EncoderCounterROME2& counterLeft, EncoderCounterROME2& counterRight);
pmic 37:698d6b73b50c 26 virtual ~Controller();
pmic 37:698d6b73b50c 27 void setTranslationalVelocity(float velocity);
pmic 37:698d6b73b50c 28 void setRotationalVelocity(float velocity);
pmic 37:698d6b73b50c 29 float getActualTranslationalVelocity();
pmic 37:698d6b73b50c 30 float getActualRotationalVelocity();
pmic 37:698d6b73b50c 31
pmic 37:698d6b73b50c 32 private:
pmic 37:698d6b73b50c 33
pmic 37:698d6b73b50c 34 static const unsigned int STACK_SIZE = 4096; // stack size of thread, given in [bytes]
pmic 37:698d6b73b50c 35 static const float PERIOD; // period of control task, given in [s]
pmic 37:698d6b73b50c 36
pmic 37:698d6b73b50c 37 static const float M_PI; // the mathematical constant PI
pmic 37:698d6b73b50c 38 static const float WHEEL_DISTANCE; // distance between wheels, given in [m]
pmic 37:698d6b73b50c 39 static const float WHEEL_RADIUS; // radius of wheels, given in [m]
pmic 37:698d6b73b50c 40 static const float MAXIMUM_VELOCITY; // maximum wheel velocity, given in [rpm]
pmic 37:698d6b73b50c 41 static const float MAXIMUM_ACCELERATION; // maximum wheel acceleration, given in [rpm/s]
pmic 37:698d6b73b50c 42 static const float COUNTS_PER_TURN;
pmic 37:698d6b73b50c 43 static const float LOWPASS_FILTER_FREQUENCY;
pmic 37:698d6b73b50c 44 static const float KN;
pmic 37:698d6b73b50c 45 static const float KP;
pmic 37:698d6b73b50c 46 static const float MAX_VOLTAGE;
pmic 37:698d6b73b50c 47 static const float MIN_DUTY_CYCLE;
pmic 37:698d6b73b50c 48 static const float MAX_DUTY_CYCLE;
pmic 37:698d6b73b50c 49
pmic 37:698d6b73b50c 50 PwmOut& pwmLeft;
pmic 37:698d6b73b50c 51 PwmOut& pwmRight;
pmic 37:698d6b73b50c 52 EncoderCounterROME2& counterLeft;
pmic 37:698d6b73b50c 53 EncoderCounterROME2& counterRight;
pmic 37:698d6b73b50c 54 float translationalVelocity;
pmic 37:698d6b73b50c 55 float rotationalVelocity;
pmic 37:698d6b73b50c 56 float actualTranslationalVelocity;
pmic 37:698d6b73b50c 57 float actualRotationalVelocity;
pmic 37:698d6b73b50c 58 float desiredSpeedLeft;
pmic 37:698d6b73b50c 59 float desiredSpeedRight;
pmic 37:698d6b73b50c 60 float actualSpeedLeft;
pmic 37:698d6b73b50c 61 float actualSpeedRight;
pmic 37:698d6b73b50c 62 Motion motionLeft;
pmic 37:698d6b73b50c 63 Motion motionRight;
pmic 37:698d6b73b50c 64 short previousValueCounterLeft;
pmic 37:698d6b73b50c 65 short previousValueCounterRight;
pmic 37:698d6b73b50c 66 LowpassFilter speedLeftFilter;
pmic 37:698d6b73b50c 67 LowpassFilter speedRightFilter;
pmic 37:698d6b73b50c 68 ThreadFlag threadFlag;
pmic 37:698d6b73b50c 69 Thread thread;
pmic 37:698d6b73b50c 70 Ticker ticker;
pmic 37:698d6b73b50c 71
pmic 37:698d6b73b50c 72 void sendThreadFlag();
pmic 37:698d6b73b50c 73 void run();
pmic 37:698d6b73b50c 74 };
pmic 37:698d6b73b50c 75
pmic 37:698d6b73b50c 76 #endif /* CONTROLLER_H_ */