Example project

Dependencies:   PM2_Libary Eigen

Controller.h

Committer:
pmic
Date:
2022-05-11
Revision:
41:7484471403aa
Parent:
37:698d6b73b50c

File content as of revision 41:7484471403aa:

/*
 * Controller.h
 * Copyright (c) 2022, ZHAW
 * All rights reserved.
 */

#ifndef CONTROLLER_H_
#define CONTROLLER_H_

#include <cstdlib>
#include <mbed.h>
#include "EncoderCounterROME2.h"
#include "Motion.h"
#include "LowpassFilter.h"
#include "ThreadFlag.h"

/**
 * This class implements a controller that regulates the
 * speed of the two motors of the ROME2 mobile robot.
 */
class Controller {
    
    public:
        
                Controller(PwmOut& pwmLeft, PwmOut& pwmRight, EncoderCounterROME2& counterLeft, EncoderCounterROME2& counterRight);
        virtual ~Controller();
        void    setTranslationalVelocity(float velocity);
        void    setRotationalVelocity(float velocity);
        float   getActualTranslationalVelocity();
        float   getActualRotationalVelocity();
        
    private:
        
        static const unsigned int   STACK_SIZE = 4096;  // stack size of thread, given in [bytes]
        static const float          PERIOD;             // period of control task, given in [s]
        
        static const float  M_PI;                       // the mathematical constant PI
        static const float  WHEEL_DISTANCE;             // distance between wheels, given in [m]
        static const float  WHEEL_RADIUS;               // radius of wheels, given in [m]
        static const float  MAXIMUM_VELOCITY;           // maximum wheel velocity, given in [rpm]
        static const float  MAXIMUM_ACCELERATION;       // maximum wheel acceleration, given in [rpm/s]
        static const float  COUNTS_PER_TURN;
        static const float  LOWPASS_FILTER_FREQUENCY;
        static const float  KN;
        static const float  KP;
        static const float  MAX_VOLTAGE;
        static const float  MIN_DUTY_CYCLE;
        static const float  MAX_DUTY_CYCLE;

        PwmOut&             pwmLeft;
        PwmOut&             pwmRight;
        EncoderCounterROME2&     counterLeft;
        EncoderCounterROME2&     counterRight;
        float               translationalVelocity;
        float               rotationalVelocity;
        float               actualTranslationalVelocity;
        float               actualRotationalVelocity;
        float               desiredSpeedLeft;
        float               desiredSpeedRight;
        float               actualSpeedLeft;
        float               actualSpeedRight;
        Motion              motionLeft;
        Motion              motionRight;
        short               previousValueCounterLeft;
        short               previousValueCounterRight;
        LowpassFilter       speedLeftFilter;
        LowpassFilter       speedRightFilter;
        ThreadFlag          threadFlag;
        Thread              thread;
        Ticker              ticker;
        
        void    sendThreadFlag();
        void    run();
};

#endif /* CONTROLLER_H_ */