15#include "WheelMotor.h"
16#include "Components/Codewheel.h"
17#include "Components/Odometry.h"
18#include "Controller/PID.h"
20#include "Controller/PositionController.h"
21#include "MoveStrategy/PurePursuit.h"
36#define SLOWDOWN_FACTOR 0.5
37#define SLOWDOWN_DISTANCE 0
38#define ALIGN_DISTANCE 130
56 const float LEFTWHEEL_RADIUS;
57 const float LEFTWHEEL_CONSTANT;
58 const float LEFTWHEEL_MAXPWM;
59 const float RIGHTWHEEL_RADIUS;
60 const float RIGHTWHEEL_CONSTANT;
61 const float RIGHTWHEEL_MAXPWM;
62 const long LEFTCODEWHEEL_COUNTSPERREV;
63 const long RIGHTCODEWHEEL_COUNTSPERREV;
64 const float LEFTCODEWHEEL_RADIUS;
65 const float RIGHTCODEWHEEL_RADIUS;
67 const float ODOMETRY_AXLETRACK;
68 const float ODOMETRY_SLIPPAGE;
70 const float VELOCITYCONTROL_AXLETRACK;
71 const float VELOCITYCONTROL_MAXLINACC;
72 const float VELOCITYCONTROL_MAXLINDEC;
73 const float VELOCITYCONTROL_MAXANGACC;
74 const float VELOCITYCONTROL_MAXANGDEC;
75 const bool VELOCITYCONTROL_SPINSHUTDOWN;
78 const float LINVELPID_KP;
79 const float LINVELPID_KI;
80 const float LINVELPID_KD;
82 const float LINVELPID_MINOUTPUT;
83 const float LINVELPID_MAXOUTPUT;
86 const float ANGVELPID_KP;
87 const float ANGVELPID_KI;
88 const float ANGVELPID_KD;
90 const float ANGVELPID_MINOUTPUT;
91 const float ANGVELPID_MAXOUTPUT;
94 const float POSITIONCONTROL_LINVELKP;
95 const float POSITIONCONTROL_ANGVELKP;
97 const float POSITIONCONTROL_LINVELMAX;
98 const float POSITIONCONTROL_ANGVELMAX;
99 const float POSITIONCONTROL_LINPOSTHRESHOLD;
100 const float POSITIONCONTROL_ANGPOSTHRESHOLD;
101 const float PUREPURSUIT_LOOKAHEAD;
102 const float PUREPURSUIT_LOOKAHEADBIS;
105 const float ODOMETRY_TIMESTEP;
106 const float PID_CONTROLLERS_TIMESTEP;
107 const float POSITIONCONTROL_TIMESTEP;
110 const int LEFT_MOTOR_EN;
111 const int LEFT_MOTOR_PWM;
112 const int LEFT_MOTOR_DIR;
113 const int RIGHT_MOTOR_EN;
114 const int RIGHT_MOTOR_PWM;
115 const int RIGHT_MOTOR_DIR;
116 const int DRIVER_RESET;
117 const int DRIVER_FAULT;
126 std::unique_ptr<WheelMotor> leftWheel;
127 std::unique_ptr<WheelMotor> rightWheel;
129 std::unique_ptr<Codewheel> leftCodewheel;
130 std::unique_ptr<Codewheel> rightCodewheel;
132 std::unique_ptr<Odometry> odometry;
134 std::unique_ptr<VelocityController> velocityControl;
135 std::unique_ptr<PositionController> positionControl;
153 std::unique_ptr<DRV8844> driver,
154 std::unique_ptr<WheelMotor> leftWheel,
155 std::unique_ptr<WheelMotor> rightWheel,
156 std::unique_ptr<Codewheel> leftCodewheel,
157 std::unique_ptr<Codewheel> rightCodewheel,
158 std::unique_ptr<Odometry> odometry,
159 std::unique_ptr<VelocityController> velocityControl,
160 std::unique_ptr<PositionController> positionControl,
161 std::unique_ptr<PID> linVelPID,
162 std::unique_ptr<PID> angVelPID,
164 const std::function<
void()>& halSetup
168 [[noreturn]]
void run(
WheeledBase* wheeledBase,
const std::function<
void()>& delayFunc);
175 WBPID_LEFTWHEEL_RADIUS_ID,
176 WBPID_LEFTWHEEL_CONSTANT_ID,
177 WBPID_LEFTWHEEL_MAXPWM_ID,
178 WBPID_RIGHTWHEEL_RADIUS_ID,
179 WBPID_RIGHTWHEEL_CONSTANT_ID,
180 WBPID_RIGHTWHEEL_MAXPWM_ID,
181 WBPID_LEFTCODEWHEEL_RADIUS_ID,
182 WBPID_LEFTCODEWHEEL_COUNTSPERREV_ID,
183 WBPID_RIGHTCODEWHEEL_RADIUS_ID,
184 WBPID_RIGHTCODEWHEEL_COUNTSPERREV_ID,
185 WBPID_ODOMETRY_AXLETRACK_ID,
186 WBPID_ODOMETRY_SLIPPAGE_ID,
187 WBPID_VELOCITYCONTROL_AXLETRACK_ID,
188 WBPID_VELOCITYCONTROL_MAXLINACC_ID,
189 WBPID_VELOCITYCONTROL_MAXLINDEC_ID,
190 WBPID_VELOCITYCONTROL_MAXANGACC_ID,
191 WBPID_VELOCITYCONTROL_MAXANGDEC_ID,
192 WBPID_VELOCITYCONTROL_SPINSHUTDOWN_ID,
193 WBPID_LINVELPID_KP_ID,
194 WBPID_LINVELPID_KI_ID,
195 WBPID_LINVELPID_KD_ID,
196 WBPID_LINVELPID_MINOUTPUT_ID,
197 WBPID_LINVELPID_MAXOUTPUT_ID,
198 WBPID_ANGVELPID_KP_ID,
199 WBPID_ANGVELPID_KI_ID,
200 WBPID_ANGVELPID_KD_ID,
201 WBPID_ANGVELPID_MINOUTPUT_ID,
202 WBPID_ANGVELPID_MAXOUTPUT_ID,
203 WBPID_POSITIONCONTROL_LINVELKP_ID,
204 WBPID_POSITIONCONTROL_ANGVELKP_ID,
205 WBPID_POSITIONCONTROL_LINVELMAX_ID,
206 WBPID_POSITIONCONTROL_ANGVELMAX_ID,
207 WBPID_POSITIONCONTROL_LINPOSTHRESHOLD_ID,
208 WBPID_POSITIONCONTROL_ANGPOSTHRESHOLD_ID,
209 WBPID_PUREPURSUIT_LOOKAHED_ID,
210 WBPID_PUREPURSUIT_LOOKAHEADBIS_ID
Implémentation d'AbstractMoveStrategy qui fait tourner le robot sur lui-même.
Contrôleur de vitesse pour un robot à base différentielle.
Log pour la sortie console avec des couleurs et éventuellement la sortie LCD.
Definition Logger/Logger.h:49
Trajectoire courbe le long d'une ligne brisée.
Definition PurePursuit.h:18
Direction
Sens de déplacement pour le robot.
Definition PurePursuit.h:35
Rotation du robot sans translations.
Definition TurnOnTheSpot.h:16
Fonctions de convénience pour faire les déplacements facilement.
void disable(const WheeledBase *wheeledBase)
Désactive la base roulante.
Definition Wheeledbase.cpp:107
WBParameterID
Des identifiants permettant d'accéder à la plupart des paramètres de la base roulante.
Definition Wheeledbase.h:174
void resetPurepursuit(WheeledBase *wheeledBase, PurePursuit *purePursuit)
Réinitialise le purepursuit.
Definition Wheeledbase.cpp:233
void getVelocitiesWanted(const WheeledBase *wheeledBase, float *linOutput, float *angOutput, bool spin=true)
Récupère les vitesses linéaire et angulaire souhaitées.
Definition Wheeledbase.cpp:607
void gotoDelta(WheeledBase *wheeledBase, PurePursuit *purePursuit, float dx, float dy, bool bloquant=true)
Déplace la base roulante d'une certaine distance dans le référentiel du robot.
void printParams(const WheeledBase *wheeledBase, const PurePursuit *purePursuit)
Affiche les paramètres de la base roulante.
Definition Wheeledbase.cpp:854
void gotoWaypointsArray(WheeledBase *wheeledBase, PurePursuit *purePursuit, Position *positions[], bool alignFirst=true, PurePursuit::Direction dir=PurePursuit::NONE, int nb_waypoints=1)
Suit une liste de waypoint en utilisant purepursuit mais sans les varargs.
Definition Wheeledbase.cpp:460
void gotoFunct(WheeledBase *wheeledBase, PurePursuit *purePursuit, TurnOnTheSpot *turnOnTheSpot, Position *pos, void *duringMovingFunct, void *approachFunct, bool alignFirst=true, PurePursuit::Direction dir=PurePursuit::NONE, float finalAngle=MAXFLOAT)
Honnêtement aucune idée de ce que fait cette fonction.
Definition Wheeledbase.cpp:530
void gotoWaypoints(WheeledBase *wheeledBase, PurePursuit *purePursuit, bool alignFirst=true, PurePursuit::Direction dir=PurePursuit::NONE, int nb_waypoints=1,...)
Suit une liste de waypoint en utilisant purepursuit.
Definition Wheeledbase.cpp:388
void wbGoto(WheeledBase *wheeledBase, PurePursuit *purePursuit, Position *pos, bool alignFirst=true, PurePursuit::Direction dir=PurePursuit::NONE, bool bloquant=true)
Va à un point en utilisant purepursuit.
Definition Wheeledbase.cpp:319
float getParameterValue(const WheeledBase *wheeledBase, const PurePursuit *purePursuit, WBParameterID paramID)
Récupère la valeur d'un paramètre de la base roulante.
Definition Wheeledbase.cpp:742
void getCodewheelsCounters(WheeledBase *wheeledBase, float *leftCodewheelCounter, float *rightCodewheelCounter)
Récupère les compteurs des roues codeuses.
Definition Wheeledbase.cpp:222
void startTurnonthespotDir(const WheeledBase *wheeledBase, TurnOnTheSpot *turnOnTheSpot, TurnOnTheSpot::Direction dir, float theta)
démarre turn on the spot mais avec moins de magie dans la direction de rotation
Definition Wheeledbase.cpp:288
void setVelocities(WheeledBase *wheeledBase, float linVelSetpoint, float angVelSetpoint)
Fixe une vitesse linéaire et angulaire pour la base roulante.
Definition Wheeledbase.cpp:227
void setParameterValue(WheeledBase *wheeledBase, PurePursuit *purePursuit, WBParameterID paramID, float value)
Met un paramètre de la base roulante à jour.
Definition Wheeledbase.cpp:633
void startTurnonthespot(WheeledBase *wheeledBase, TurnOnTheSpot *turnOnTheSpot, bool dir, float theta)
démarre turn on the spot
Definition Wheeledbase.cpp:269
auto wb_logger
Le logger pour la base roulante.
Definition Wheeledbase.h:213
void getVelocities(const WheeledBase *wheeledBase, float *linVel, float *angVel)
Récupère les vitesses linéaire et angulaire actuelles.
Definition Wheeledbase.cpp:628
void setOpenloopVelocities(WheeledBase *wheeledBase, float leftWheelVel, float rightWheelVel)
Définit les vitesses en boucle ouverte pour les roues.
Definition Wheeledbase.cpp:215
void startPurepursuit(WheeledBase *wheeledBase, PurePursuit *purePursuit, PurePursuit::Direction direction, float finalAngle)
Démarre le purepursuit.
Definition Wheeledbase.cpp:238
void setPosition(WheeledBase *wheeledBase, const Position *pos)
Met à jour la position de l'odométrie.
Definition Wheeledbase.cpp:619
void purepursuit(WheeledBase *wheeledBase, PurePursuit *purePursuit, const Position **waypoints, uint16_t nb_waypoints, PurePursuit::Direction dir, float finalAngle)
Démarre purepursuit ? honnêtement jsp trop.
Definition Wheeledbase.cpp:307
uint8_t positionReached(const WheeledBase *wheeledBase)
Est-ce que la position est atteinte ?
Definition Wheeledbase.cpp:298
const Position * getPosition(const WheeledBase *wheeledBase)
Récupère la position de l'odométrie.
Definition Wheeledbase.cpp:623
void addPurepursuitWaypoint(PurePursuit *purePursuit, float x, float y)
Ajoute un waypoint au purepursuit.
Definition Wheeledbase.cpp:264
Structure de position.
Definition Odometry.h:17
Défini un certain nombre de constantes et paramètres pour la wheeledbase.
Definition Wheeledbase.h:55
Représente les divers composants de la base roulante.
Definition Wheeledbase.h:125
WheeledBase(std::unique_ptr< DRV8844 > driver, std::unique_ptr< WheelMotor > leftWheel, std::unique_ptr< WheelMotor > rightWheel, std::unique_ptr< Codewheel > leftCodewheel, std::unique_ptr< Codewheel > rightCodewheel, std::unique_ptr< Odometry > odometry, std::unique_ptr< VelocityController > velocityControl, std::unique_ptr< PositionController > positionControl, std::unique_ptr< PID > linVelPID, std::unique_ptr< PID > angVelPID, WBConstants ¶m, const std::function< void()> &halSetup)
Definition Wheeledbase.cpp:12