
Example project
Dependencies: PM2_Libary Eigen
Controller.h@39:f336caef17d9, 2022-05-10 (annotated)
- 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?
User | Revision | Line number | New 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_ */ |