Librairie visant à asservir un robot à 2 roues 2 encodeurs utilisant un pont en H L298

Dependents:   asservissement_robot2

Asservissement.h

Committer:
hamaint
Date:
2019-03-20
Revision:
0:3827dab9a2eb

File content as of revision 0:3827dab9a2eb:

/**
 * @author Thomas Hamain
 *
 * @section DESCRIPTION
 *  [EMPTY]
 *
 */

#ifndef ASSERVISSEMENT_H
#define ASSERVISSEMENT_H

# define M_PI           3.14159265358979323846

/**
 * Includes
 */
#include "mbed.h"
#include "QEI.h"
#include "L298.h"
#include "math.h"

/**
 * Class [EMPTY] on parle en mm
 */
class Asservissement
{
public:

    typedef enum AUTORISATION {

        OUI,
        NON

    }AUTORISATION;

    typedef enum PID {

        LINEIQUE,
        ANGULAIRE

    } PID;
    /**
     * Constructeur.
     * [EMPTY]
     *
     * @param [EMPTY]
     */
    Asservissement(L298 pontH, QEI encodA, QEI encodB, double freq_asserv);


    double calculPID(double erreur,PID type);


    void move(double dist, double or_deg);
    
    void move(AUTORISATION rep);


    void setPID(PID type, double P, double I, double D);


    void setDimensions(int dist_roues, int dimA, int dimB, int ticA, int ticB);


    void setDimensions(int dist_roues, int dim, int tic);


    void setCalculateur(double lim_vitesseA, double lim_vitesseB, double accA, double accB, double deccA, double deccB);


    void setCalculateur(double lim_vitesse, double acc, double decc);

    //[FONCTION] un truc qui defini les trajectoire
    // doit inclure une option permettant de choir l'acceleration + decceleration
    // et une vitesse limite
    // il devra avoir un espece d'interrupt timer et poser un flag pour que la
    // boucle dans le move() s'arrete si besoin faudra y penser

    //[FONCTION] un truc pour calibrer automatiquement
    //IDEE DE FONCTIONNEMENT, 2 boucles, boucle 1 change de coefficient, boucle 2
    //demande à l'utilisateur de combien il veut incrémenter le coefficient










    //Fonctions de set get
    //PID Lineique
    double getPl()
    {
        return _Pl;
    }
    void setPl(double n)
    {
        _Pl=n;
    }

    double getIl()
    {
        return _Il;
    }
    void setIl(double n)
    {
        _Il=n;
    }

    double getDl()
    {
        return _Dl;
    }
    void setDl(double n)
    {
        _Dl=n;
    }

    //PID Angulaire
    double getPa()
    {
        return _Pa;
    }
    void setPla(double n)
    {
        _Pa=n;
    }

    double getIa()
    {
        return _Ia;
    }
    void setIa(double n)
    {
        _Ia=n;
    }

    double getDa()
    {
        return _Da;
    }
    void setDa(double n)
    {
        _Da=n;
    }

    //echantillonnage
    double getfreq_correction()
    {
        return _freq_correction;
    }
    void setfreq_correction(double n)
    {
        _freq_correction=n;
    }

    //dimensions du système
    double getdist_roues()
    {
        return _dist_roues;
    }
    void setdist_roues(double n)
    {
        _dist_roues=n;
    }

    double getdimA()
    {
        return _dimA;
    }
    void setdimA(double n)
    {
        _dimA=n;
    }

    double getdimB()
    {
        return _dimB;
    }
    void setdimB(double n)
    {
        _dimB=n;
    }

    double getticA()
    {
        return _ticA;
    }
    void setticA(double n)
    {
        _ticA=n;
    }

    double getticB()
    {
        return _ticA;
    }
    void setticB(double n)
    {
        _ticA=n;
    }

    //valeurs pour le calculateur de trajectoires
    double getlim_vitesseA()
    {
        return _lim_vitesseA;
    }
    void setlim_vitesseA(double n)
    {
        _lim_vitesseA=n;
    }

    double getlim_vitesseB()
    {
        return _lim_vitesseB;
    }
    void setlim_vitesseB(double n)
    {
        _lim_vitesseB=n;
    }

    double get_accA()
    {
        return _accA;
    }
    void set_accA(double n)
    {
        _accA=n;
    }

    double get_accB()
    {
        return _accB;
    }
    void setP_accB(double n)
    {
        _accB=n;
    }

    double getdeccA()
    {
        return _deccA;
    }
    void setdeccA(double n)
    {
        _deccA=n;
    }

    double getdeccB()
    {
        return _deccB;
    }
    void setdeccB(double n)
    {
        _deccB=n;
    }


private:

    //variables importantes
    L298 _pontH;
    QEI _encodA;
    QEI _encodB;
    double _dist;
    double _or_deg;

    //coeffs pour PID lineique
    double _Pl; //0.01
    double _Il; //0.0001
    double _Dl;

    //coeffs pour PID angulaire
    double _Pa; //0.01
    double _Ia; //0.0001
    double _Da;

    //echantillonnage #BOZ
    double _freq_correction; //0.01

    //probablement ballec
    //double _err_statique;
    //double LIMITE_TEMPS 3/FREQ_CORRECTION (3sec)

    //dimensions du système
    int _dist_roues; //distance entre les roues 270
    int _dimA; //dimension roue a 70
    int _dimB; //dimension roue a 70
    int _ticA; //nombre de tic par tour encodeur a (il faudra faire des calculs lors de la déclaration parce que ca correspond pas vraiment par rapport a la datasheet) 1200
    int _ticB; //nombre de tic par tour encodeur b 1200
    double _resA; //mm/tic calculé par (double)DIMENSION_ROUE_A*3.14/(double)TIC_PAR_TOUR_A
    double _resB;

    //valeurs pour le calculateur de trajectoires (valeurs symétriques)
    //valeurs modifiées par calculateur de trajectoires
    double _lim_vitesseA; //limites de vitesse A et B
    double _lim_vitesseB;
    double _accA; //acceleration pour A et B (pas étudié)
    double _accB;
    double _deccA; //decceleration pour A et B (pas étudié)
    double _deccB;




};



#endif /* ASSERVISSEMENT_H */