@@ -28,12 +28,15 @@ uint8_t code;
28
28
uint8_t label;
29
29
uint8_t control_type;
30
30
uint8_t msg_size;
31
-
31
+ uint8_t ack_required=0 ;
32
+ bool ack_check=false ;
33
+ uint8_t ack_code=0 ;
32
34
33
35
unsigned long tmotor=0 ;
34
36
unsigned long tsend=0 ;
35
37
unsigned long tsensor=0 ;
36
38
unsigned long timu=0 ;
39
+ unsigned long tack=0 ;
37
40
38
41
39
42
float left, right, value;
@@ -73,6 +76,7 @@ void setup(){
73
76
tsend=millis ();
74
77
tsensor=millis ();
75
78
timu=millis ();
79
+ tack=millis ();
76
80
}
77
81
78
82
void loop (){
@@ -154,21 +158,33 @@ void loop(){
154
158
packeter.unpacketC1F (code, value);
155
159
alvik.disablePositionControl ();
156
160
alvik.rotate (value);
161
+ ack_required=MOVEMENT_ROTATE;
162
+ ack_check=true ;
157
163
break ;
158
164
159
165
case ' G' :
160
166
packeter.unpacketC1F (code, value);
161
167
alvik.disablePositionControl ();
162
168
alvik.move (value);
169
+ ack_required=MOVEMENT_MOVE;
170
+ ack_check=true ;
163
171
break ;
164
172
165
173
case ' Z' :
166
174
packeter.unpacketC3F (code, x, y, theta);
167
175
alvik.resetPose (x, y, theta);
168
176
break ;
177
+
178
+ case ' X' :
179
+ packeter.unpacketC1B (code, ack_code);
180
+ if (ack_code == ' K' ) {
181
+ ack_check = false ;
182
+ }
183
+ break ;
169
184
}
170
185
}
171
186
187
+ // sensors publish
172
188
if (millis ()-tsensor>10 ){
173
189
tsensor=millis ();
174
190
switch (sensor_id){
@@ -204,6 +220,7 @@ void loop(){
204
220
}
205
221
}
206
222
223
+ // motors update & publish
207
224
if (millis ()-tmotor>20 ){
208
225
tmotor=millis ();
209
226
alvik.updateMotors ();
@@ -218,24 +235,28 @@ void loop(){
218
235
msg_size = packeter.packetC2F (' v' , alvik.getLinearVelocity (), alvik.getAngularVelocity ());
219
236
alvik.serial ->write (packeter.msg , msg_size);
220
237
// pose
221
- msg_size = packeter.packetC3F (' s ' , alvik.getX (), alvik.getY (), alvik.getTheta ());
238
+ msg_size = packeter.packetC3F (' z ' , alvik.getX (), alvik.getY (), alvik.getTheta ());
222
239
alvik.serial ->write (packeter.msg , msg_size);
240
+ }
223
241
224
- if (alvik.getKinematicsMovement ()!=MOVEMENT_DISABLED){
225
- if (alvik.isTargetReached ()){
226
- if (alvik.getKinematicsMovement ()==MOVEMENT_ROTATE){
227
- msg_size = packeter.packetC1B (' x' , ' R' );
228
- }
229
- if (alvik.getKinematicsMovement ()==MOVEMENT_MOVE){
230
- msg_size = packeter.packetC1B (' x' , ' M' );
231
- }
232
- alvik.serial ->write (packeter.msg , msg_size);
233
- // alvik.disableKinematicsMovement();
242
+ // acknowledge
243
+ if (millis ()-tack > 100 ){
244
+ tack = millis ();
245
+ if (ack_check && alvik.isTargetReached ()){
246
+ if (ack_required == MOVEMENT_ROTATE){
247
+ msg_size = packeter.packetC1B (' x' , ' R' );
248
+ }
249
+ if (ack_required == MOVEMENT_MOVE){
250
+ msg_size = packeter.packetC1B (' x' , ' M' );
234
251
}
235
-
236
252
}
253
+ else {
254
+ msg_size = packeter.packetC1B (' x' , 0 );
255
+ }
256
+ alvik.serial ->write (packeter.msg , msg_size);
237
257
}
238
258
259
+ // imu update
239
260
if (millis ()-timu>10 ){
240
261
timu=millis ();
241
262
alvik.updateImu ();
0 commit comments