Robot Principal 26
Documentation du Club Robot INSA Rennes 2026
Chargement...
Recherche...
Aucune correspondance
PositionController.h
1#ifndef __POSITIONCONTROLLER_H__
2#define __POSITIONCONTROLLER_H__
3
4#include "../lib/PeriodicProcess/PeriodicProcess.h"
5#include "Components/Odometry.h"
6
7
21{
22public:
27 PositionController() : m_linVelKp(1), m_angVelKp(1), m_linVelMax(1000), m_angVelMax(2 * M_PI){}
33 void setPosInput (const Position& posInput) {m_posInput = posInput;}
42 void setPosSetpoint(const Position& posSetpoint){m_posSetpoint = posSetpoint;}
51 void setThetaSetpoint(float theta){m_posSetpoint.theta = theta;}
59 float getLinVelSetpoint() const {return m_linVelSetpoint;}
67 float getAngVelSetpoint() const {return m_angVelSetpoint;}
77 void setVelTunings(float linVelKp, float angVelKp);
86 void setVelLimits(float linVelMax, float angVelMax);
95 void setPosThresholds(float linPosThreshold, float angPosThreshold);
104 void setMoveStrategy(AbstractMoveStrategy& moveStrategy);
113 bool getPositionReached();
118 float getLinVelKp() const {return m_linVelKp;}
123 float getAngVelKp() const {return m_angVelKp;}
128 float getLinVelMax() const {return m_linVelMax;}
133 float getAngVelMax() const {return m_angVelMax;}
139 float getLinPosThreshold() const {return m_linPosThreshold;}
145 float getAngPosThreshold() const {return m_angPosThreshold;}
146
152 Position getPosSetpoint() const {return m_posSetpoint;}
153
154private:
162 virtual void process(float timestep);
163 virtual void onProcessEnabling();
164
165 // IO
166 Position m_posInput;
167 Position m_posSetpoint;
168
169 float m_linVelSetpoint;
170 float m_angVelSetpoint;
171
172 // Engineering control tunings
173 float m_linVelKp;
174 float m_angVelKp;
175 float m_linVelMax;
176 float m_angVelMax;
177 float m_linPosThreshold;
178 float m_angPosThreshold;
179
180 // Strategy Design Pattern
181 AbstractMoveStrategy* m_moveStrategy;
182
183 friend class AbstractMoveStrategy;
184};
185
195{
196public:
197 virtual ~AbstractMoveStrategy() = default;
198
199protected:
208 virtual void computeVelSetpoints(float timestep) = 0;
217 virtual bool getPositionReached() = 0;
225 const Position& getPosInput() const {return m_context->m_posInput;}
230 const Position& getPosSetpoint() const {return m_context->m_posSetpoint;}
237 void setVelSetpoints(float linVelSetpoint, float angVelSetpoint){m_context->m_linVelSetpoint = linVelSetpoint; m_context->m_angVelSetpoint = angVelSetpoint;}
242 float getLinVelKp() const {return m_context->m_linVelKp;}
248 float getAngVelKp() const {return m_context->m_angVelKp;}
254 float getLinVelMax() const {return m_context->m_linVelMax;}
260 float getAngVelMax() const {return m_context->m_angVelMax;}
267 float getLinPosThreshold() const {
268
269 return m_context->m_linPosThreshold;}
270
276 float getAngPosThreshold() const {return m_context->m_angPosThreshold;}
277
278protected:
279
280 PositionController* m_context;
281
282 friend class PositionController;
283};
284
285#endif // __POSITIONCONTROLLER_H__
Interface de Stratégie de mouvement.
Definition PositionController.h:195
PositionController * m_context
Definition PositionController.h:280
float getAngVelKp() const
Retourne le coef proportionnel de vitesse angulaire.
Definition PositionController.h:248
virtual bool getPositionReached()=0
Indique si la position désirée est atteinte.
float getLinVelMax() const
Retourne vitesse linéaire max.
Definition PositionController.h:254
float getLinPosThreshold() const
Retourne la précision cartésienne à atteindre.
Definition PositionController.h:267
virtual void computeVelSetpoints(float timestep)=0
Calcul les nouvelles vitesses désirer.
float getAngVelMax() const
Retourne vitesse angulaire max.
Definition PositionController.h:260
void setVelSetpoints(float linVelSetpoint, float angVelSetpoint)
Charge une nouvelle vitesse pour le robot.
Definition PositionController.h:237
const Position & getPosSetpoint() const
Retourne la position à atteindre.
Definition PositionController.h:230
const Position & getPosInput() const
Retourne la position du robot.
Definition PositionController.h:225
float getLinVelKp() const
Retourne le coef proportionnel de vitesse linéaire.
Definition PositionController.h:242
float getAngPosThreshold() const
Retourne la précision angulaire à atteindre.
Definition PositionController.h:276
Classe à implémenter pour gérer les appels dans la loop.
Definition PeriodicProcess/PeriodicProcess.h:17
void setThetaSetpoint(float theta)
Charge l'angle à atteindre.
Definition PositionController.h:51
float getAngVelMax() const
Retourne la vitesse max angulaire.
Definition PositionController.h:133
float getLinVelMax() const
Retourne la vitesse max linéaire.
Definition PositionController.h:128
float getAngPosThreshold() const
Retourne la précision angulaire.
Definition PositionController.h:145
void setVelLimits(float linVelMax, float angVelMax)
Paramètre les vitesses max.
Definition PositionController.cpp:33
void setPosSetpoint(const Position &posSetpoint)
Charge la position à atteindre.
Definition PositionController.h:42
Position getPosSetpoint() const
Retourne la position cible du robot.
Definition PositionController.h:152
float getAngVelSetpoint() const
Retourne la vitesse angulaire à atteindre.
Definition PositionController.h:67
float getAngVelKp() const
Retourne le coef proportionnel de vitesse angulaire.
Definition PositionController.h:123
float getLinVelKp() const
Retourne le coef proportionnel de vitesse linéaire.
Definition PositionController.h:118
void setMoveStrategy(AbstractMoveStrategy &moveStrategy)
Charge une stratégie de mouvement.
Definition PositionController.cpp:4
PositionController()
Constructeur de PositionController Initialise les variables de PositionController à des valeurs neutr...
Definition PositionController.h:27
void setPosInput(const Position &posInput)
Charge les nouvelles positions du robot. Charge les nouvelles positions du robot pour les donner à un...
Definition PositionController.h:33
bool getPositionReached()
Indique si la position est atteinte.
Definition PositionController.cpp:21
float getLinVelSetpoint() const
Retourne la vitesse linéaire à atteindre.
Definition PositionController.h:59
void setPosThresholds(float linPosThreshold, float angPosThreshold)
Paramètre les précisions en position.
Definition PositionController.cpp:38
float getLinPosThreshold() const
Retourne la précision cartésienne.
Definition PositionController.h:139
void setVelTunings(float linVelKp, float angVelKp)
Paramètre les coéfficients linéaire.
Definition PositionController.cpp:28
Structure de position.
Definition Odometry.h:17