CRINSA-team2025 V1
Documentation du Club Robot INSA Rennes 2025
Chargement...
Recherche...
Aucune correspondance
PositionController.h
1#ifndef __POSITIONCONTROLLER_H__
2#define __POSITIONCONTROLLER_H__
3
4#include "PeriodicProcess.h"
5#include "Odometry.h"
6
7
19{
20public:
25 PositionController() : m_linVelKp(1), m_angVelKp(1), m_linVelMax(1000), m_angVelMax(2 * M_PI){}
31 void setPosInput (const Position& posInput) {m_posInput = posInput;}
40 void setPosSetpoint(const Position& posSetpoint){m_posSetpoint = posSetpoint;}
49 void setThetaSetpoint(float theta){m_posSetpoint.theta = theta;}
57 float getLinVelSetpoint() const {return m_linVelSetpoint;}
65 float getAngVelSetpoint() const {return m_angVelSetpoint;}
75 void setVelTunings(float linVelKp, float angVelKp);
84 void setVelLimits(float linVelMax, float angVelMax);
93 void setPosThresholds(float linPosThreshold, float angPosThreshold);
102 void setMoveStrategy(AbstractMoveStrategy& moveStrategy);
111 bool getPositionReached();
116 float getLinVelKp() const {return m_linVelKp;}
121 float getAngVelKp() const {return m_angVelKp;}
126 float getLinVelMax() const {return m_linVelMax;}
131 float getAngVelMax() const {return m_angVelMax;}
137 float getLinPosThreshold() const {return m_linPosThreshold;}
143 float getAngPosThreshold() const {return m_angPosThreshold;}
144
150 Position getPosSetpoint() const {return m_posSetpoint;}
151
152private:
160 virtual void process(float timestep);
161 virtual void onProcessEnabling();
162
163 // IO
164 Position m_posInput;
165 Position m_posSetpoint;
166
167 float m_linVelSetpoint;
168 float m_angVelSetpoint;
169
170 // Engineering control tunings
171 float m_linVelKp;
172 float m_angVelKp;
173 float m_linVelMax;
174 float m_angVelMax;
175 float m_linPosThreshold;
176 float m_angPosThreshold;
177
178 // Strategy Design Pattern
179 AbstractMoveStrategy* m_moveStrategy;
180
181 friend class AbstractMoveStrategy;
182};
183
190{
191protected:
200 virtual void computeVelSetpoints(float timestep) = 0;
209 virtual bool getPositionReached() = 0;
217 const Position& getPosInput() const {return m_context->m_posInput;}
222 const Position& getPosSetpoint() const {return m_context->m_posSetpoint;}
229 void setVelSetpoints(float linVelSetpoint, float angVelSetpoint){m_context->m_linVelSetpoint = linVelSetpoint; m_context->m_angVelSetpoint = angVelSetpoint;}
234 float getLinVelKp() const {return m_context->m_linVelKp;}
240 float getAngVelKp() const {return m_context->m_angVelKp;}
246 float getLinVelMax() const {return m_context->m_linVelMax;}
252 float getAngVelMax() const {return m_context->m_angVelMax;}
259 float getLinPosThreshold() const {
260
261 return m_context->m_linPosThreshold;}
262
268 float getAngPosThreshold() const {return m_context->m_angPosThreshold;}
269
270protected:
271
272 PositionController* m_context;
273
274 friend class PositionController;
275};
276
277#endif // __POSITIONCONTROLLER_H__
Interface de Stratégie de mouvement.
Definition PositionController.h:190
PositionController * m_context
Definition PositionController.h:272
float getAngVelKp() const
Retourne le coef proportionnel de vitesse angulaire.
Definition PositionController.h:240
virtual bool getPositionReached()=0
Indique si la position désirée est atteinte.
float getLinVelMax() const
Retourne vitesse linéaire max.
Definition PositionController.h:246
float getLinPosThreshold() const
Retourne la précision cartésienne à atteindre.
Definition PositionController.h:259
virtual void computeVelSetpoints(float timestep)=0
Calcul les nouvelles vitesses désirer.
float getAngVelMax() const
Retourne vitesse angulaire max.
Definition PositionController.h:252
void setVelSetpoints(float linVelSetpoint, float angVelSetpoint)
Charge une nouvelle vitesse pour le robot.
Definition PositionController.h:229
const Position & getPosSetpoint() const
Retourne la position à atteindre.
Definition PositionController.h:222
const Position & getPosInput() const
Retourne la position du robot.
Definition PositionController.h:217
float getLinVelKp() const
Retourne le coef proportionnel de vitesse linéaire.
Definition PositionController.h:234
float getAngPosThreshold() const
Retourne la précision angulaire à atteindre.
Definition PositionController.h:268
Classe à implémenter pour gérer les appels dans la loop.
Definition PeriodicProcess.h:16
void setThetaSetpoint(float theta)
Charge l'angle à atteindre.
Definition PositionController.h:49
float getAngVelMax() const
Retourne la vitesse max angulaire.
Definition PositionController.h:131
float getLinVelMax() const
Retourne la vitesse max linéaire.
Definition PositionController.h:126
float getAngPosThreshold() const
Retourne la précision angulaire.
Definition PositionController.h:143
void setVelLimits(float linVelMax, float angVelMax)
Paramètre les vitesses max.
Definition PositionController.cpp:35
void setPosSetpoint(const Position &posSetpoint)
Charge la position à atteindre.
Definition PositionController.h:40
Position getPosSetpoint() const
Retourne la position cible du robot.
Definition PositionController.h:150
float getAngVelSetpoint() const
Retourne la vitesse angulaire à atteindre.
Definition PositionController.h:65
float getAngVelKp() const
Retourne le coef proportionnel de vitesse angulaire.
Definition PositionController.h:121
float getLinVelKp() const
Retourne le coef proportionnel de vitesse linéaire.
Definition PositionController.h:116
void setMoveStrategy(AbstractMoveStrategy &moveStrategy)
Charge une stratégie de mouvement.
Definition PositionController.cpp:6
PositionController()
Constructeur de PositionController Initialise les variables de PositionController à des valeurs neutr...
Definition PositionController.h:25
void setPosInput(const Position &posInput)
Charge les nouvelles positions du robot. Charge les nouvelles positions du robot pour les donner à un...
Definition PositionController.h:31
bool getPositionReached()
Indique si la position est atteinte.
Definition PositionController.cpp:23
float getLinVelSetpoint() const
Retourne la vitesse linéaire à atteindre.
Definition PositionController.h:57
void setPosThresholds(float linPosThreshold, float angPosThreshold)
Paramètre les précisions en position.
Definition PositionController.cpp:40
float getLinPosThreshold() const
Retourne la précision cartésienne.
Definition PositionController.h:137
void setVelTunings(float linVelKp, float angVelKp)
Paramètre les coéfficients linéaire.
Definition PositionController.cpp:30
Structure de position.
Definition Odometry.h:14