CRINSA-team2025 V1
Documentation du Club Robot INSA Rennes 2025
Chargement...
Recherche...
Aucune correspondance
Wheeledbase.h
1//
2// Created by boris on 28/10/2024.
3//
4
5#ifndef WHEELEDBASE_H
6#define WHEELEDBASE_H
7
8#include "WheelMotor.h"
9#include "Codewheel.h"
10#include "Odometry.h"
11#include "PID.h"
12#include "VelocityController.h"
13#include "PositionController.h"
14#include "PurePursuit.h"
15#include "TurnOnTheSpot.h"
16#include "mathutils.h"
17#include <math.h>
18
19#include "DRV8844.h"
20#include "Logger.h"
21
22// Parameters identifiers
23
24#define LEFTWHEEL_RADIUS_ID 0x10
25#define LEFTWHEEL_CONSTANT_ID 0x11
26#define LEFTWHEEL_MAXPWM_ID 0x12
27#define RIGHTWHEEL_RADIUS_ID 0x20
28#define RIGHTWHEEL_CONSTANT_ID 0x21
29#define RIGHTWHEEL_MAXPWM_ID 0x22
30#define LEFTCODEWHEEL_RADIUS_ID 0x40
31#define LEFTCODEWHEEL_COUNTSPERREV_ID 0x41
32#define RIGHTCODEWHEEL_RADIUS_ID 0x50
33#define RIGHTCODEWHEEL_COUNTSPERREV_ID 0x51
34#define ODOMETRY_AXLETRACK_ID 0x60
35#define ODOMETRY_SLIPPAGE_ID 0x61
36#define VELOCITYCONTROL_AXLETRACK_ID 0x80
37#define VELOCITYCONTROL_MAXLINACC_ID 0x81
38#define VELOCITYCONTROL_MAXLINDEC_ID 0x82
39#define VELOCITYCONTROL_MAXANGACC_ID 0x83
40#define VELOCITYCONTROL_MAXANGDEC_ID 0x84
41#define VELOCITYCONTROL_SPINSHUTDOWN_ID 0x85
42#define LINVELPID_KP_ID 0xA0
43#define LINVELPID_KI_ID 0xA1
44#define LINVELPID_KD_ID 0xA2
45#define LINVELPID_MINOUTPUT_ID 0xA3
46#define LINVELPID_MAXOUTPUT_ID 0xA4
47#define ANGVELPID_KP_ID 0xB0
48#define ANGVELPID_KI_ID 0xB1
49#define ANGVELPID_KD_ID 0xB2
50#define ANGVELPID_MINOUTPUT_ID 0xB3
51#define ANGVELPID_MAXOUTPUT_ID 0xB4
52#define POSITIONCONTROL_LINVELKP_ID 0xD0
53#define POSITIONCONTROL_ANGVELKP_ID 0xD1
54#define POSITIONCONTROL_LINVELMAX_ID 0xD2
55#define POSITIONCONTROL_ANGVELMAX_ID 0xD3
56#define POSITIONCONTROL_LINPOSTHRESHOLD_ID 0xD4
57#define POSITIONCONTROL_ANGPOSTHRESHOLD_ID 0xD5
58#define PUREPURSUIT_LOOKAHED_ID 0xE0
59#define PUREPURSUIT_LOOKAHEADBIS_ID 0xE2
60
61//define the distance and the deceleration at the end of goto
62#define SLOWDOWN_FACTOR 0.5
63#define SLOWDOWN_DISTANCE 0
64#define ALIGN_DISTANCE 130
65
66
68{
69 const float LEFTWHEEL_RADIUS;
70 const float LEFTWHEEL_CONSTANT;
71 const float LEFTWHEEL_MAXPWM;
72 const float RIGHTWHEEL_RADIUS;
73 const float RIGHTWHEEL_CONSTANT;
74 const float RIGHTWHEEL_MAXPWM;
75 const long LEFTCODEWHEEL_COUNTSPERREV;
76 const long RIGHTCODEWHEEL_COUNTSPERREV;
77 const float LEFTCODEWHEEL_RADIUS;
78 const float RIGHTCODEWHEEL_RADIUS;
79
80 const float ODOMETRY_AXLETRACK;
81 const float ODOMETRY_SLIPPAGE;
82
83 const float VELOCITYCONTROL_AXLETRACK;
84 const float VELOCITYCONTROL_MAXLINACC;
85 const float VELOCITYCONTROL_MAXLINDEC;
86 const float VELOCITYCONTROL_MAXANGACC;
87 const float VELOCITYCONTROL_MAXANGDEC;
88 const bool VELOCITYCONTROL_SPINSHUTDOWN;
89
90 /*---- LINEAR VELOCITIES PID ----*/
91 const float LINVELPID_KP;
92 const float LINVELPID_KI;
93 const float LINVELPID_KD;
94
95 const float LINVELPID_MINOUTPUT;
96 const float LINVELPID_MAXOUTPUT;
97
98 /*---- ANGULAR VELOCITIES PID ----*/
99 const float ANGVELPID_KP;
100 const float ANGVELPID_KI;
101 const float ANGVELPID_KD;
102
103 const float ANGVELPID_MINOUTPUT;
104 const float ANGVELPID_MAXOUTPUT;
105
106 /*---- POSITION PID ----*/
107 const float POSITIONCONTROL_LINVELKP;
108 const float POSITIONCONTROL_ANGVELKP;
109
110 const float POSITIONCONTROL_LINVELMAX;
111 const float POSITIONCONTROL_ANGVELMAX;
112 const float POSITIONCONTROL_LINPOSTHRESHOLD;
113 const float POSITIONCONTROL_ANGPOSTHRESHOLD;
114 const float PUREPURSUIT_LOOKAHEAD;
115 const float PUREPURSUIT_LOOKAHEADBIS;
116
117 // Timesteps
118 const float ODOMETRY_TIMESTEP;
119 const float PID_CONTROLLERS_TIMESTEP;
120 const float POSITIONCONTROL_TIMESTEP;
121
122 // DC motors driver
123 const int LEFT_MOTOR_EN;
124 const int LEFT_MOTOR_PWM;
125 const int LEFT_MOTOR_DIR;
126 const int RIGHT_MOTOR_EN;
127 const int RIGHT_MOTOR_PWM;
128 const int RIGHT_MOTOR_DIR;
129 const int DRIVER_RESET;
130 const int DRIVER_FAULT;
131};
132
133// Global variables
134extern DRV8844 driver;
135extern WheelMotor leftWheel;
136extern WheelMotor rightWheel;
137
138extern Codewheel leftCodewheel;
139extern Codewheel rightCodewheel;
140
141extern Odometry odometry;
142
143extern VelocityController velocityControl;
144
145extern PID linVelPID;
146extern PID angVelPID;
147
148extern PositionController positionControl;
149
150extern PurePursuit purePursuit;
151extern TurnOnTheSpot turnOnTheSpot;
152
153inline Logger wb_logger = Logger("WHEELEDBASE");
154
155namespace Wheeledbase {
156 // Instructions prototypes
157 void DISABLE();
158
159 void GOTO_DELTA(float dx, float dy, bool bloquant=true); //bloquant: do we pass at the next step after ?
160
161 void TURNTO_DELTA(float dtheta, bool bloquant=true);
162
163 //void TENTATIVE_POUR_PLUSTARD();
164
165 void SET_OPENLOOP_VELOCITIES(float leftWheelVel, float rightWheelVel);
166
167 void GET_CODEWHEELS_COUNTERS(float *leftCodewheelCounter, float *rightCodewheelCounter);
168
169 void SET_VELOCITIES(float linVelSetpoint, float angVelSetpoint);
170
171 void RESET_PUREPURSUIT();
172
173 void ADD_PUREPURSUIT_WAYPOINT(float x, float y);
174
175 void START_PUREPURSUIT(int8_t direction, float finalAngle);
176
177 void START_TURNONTHESPOT(bool dir, float theta);
178
179 void START_TURNONTHESPOT_DIR(bool dir, float theta);
180
181 void PUREPURSUIT(const Position** waypoints, uint16_t nb_waypoints, char dir, float finalAngle);
182
183 void GOTO(Position* pos, bool alignFirst=true, int8_t dir=PurePursuit::NONE,bool bloquant=true);
184
185 void GOTO_WAYPOINTS(bool alignFirst=true, int8_t dir=PurePursuit::NONE, int nb_waypoints=1, ...);
186
187 void GOTO_WAYPOINTS_ARRAY(Position* positions[], bool alignFirst=true, int8_t dir=PurePursuit::NONE, int nb_waypoints=1);
188
189 void GOTO_FUNCT(Position* pos, void* duringMovingFunct, void* approachFunct, bool alignFirst=true, int8_t dir=PurePursuit::NONE, float finalAngle=MAXFLOAT);
190
191 uint8_t POSITION_REACHED();
192
193 void GET_VELOCITIES_WANTED(float *linOutput, float *angOutput, bool spin=true);
194
195 void SET_POSITION(Position* pos);
196
197 const Position* GET_POSITION();
198
199 void GET_VELOCITIES(float *linVel, float *angVel);
200
201 void SET_PARAMETER_VALUE(byte paramID, float value);
202
203 float GET_PARAMETER_VALUE(byte paramID);
204
205 void PRINT_PARAMS();
206};
207
208
209
210#endif //WHEELEDBASE_H
Fait la passerelle entre les roues codeuses et le stm32.
Definition Codewheel.h:16
Definition Logger.h:32
Calcule la position en temps réel du robot.
Definition Odometry.h:71
Classe d'asservissement.
Definition PID.h:13
Classe support des objets AbstractMoveStrategy.
Definition PositionController.h:19
Trajectoire courbe le long d'une ligne brisée.
Definition PurePursuit.h:20
Rotation du robot sans translations.
Definition TurnOnTheSpot.h:14
Objet de controle de la vitesse.
Definition VelocityController.h:22
Structure de position.
Definition Odometry.h:14
Definition Wheeledbase.h:68