@@ -28,12 +28,15 @@ uint8_t code;
2828uint8_t label;
2929uint8_t control_type;
3030uint8_t msg_size;
31-
31+ uint8_t ack_required=0 ;
32+ bool ack_check=false ;
33+ uint8_t ack_code=0 ;
3234
3335unsigned long tmotor=0 ;
3436unsigned long tsend=0 ;
3537unsigned long tsensor=0 ;
3638unsigned long timu=0 ;
39+ unsigned long tack=0 ;
3740
3841
3942float left, right, value;
@@ -73,6 +76,7 @@ void setup(){
7376 tsend=millis ();
7477 tsensor=millis ();
7578 timu=millis ();
79+ tack=millis ();
7680}
7781
7882void loop (){
@@ -154,21 +158,33 @@ void loop(){
154158 packeter.unpacketC1F (code, value);
155159 alvik.disablePositionControl ();
156160 alvik.rotate (value);
161+ ack_required=MOVEMENT_ROTATE;
162+ ack_check=true ;
157163 break ;
158164
159165 case ' G' :
160166 packeter.unpacketC1F (code, value);
161167 alvik.disablePositionControl ();
162168 alvik.move (value);
169+ ack_required=MOVEMENT_MOVE;
170+ ack_check=true ;
163171 break ;
164172
165173 case ' Z' :
166174 packeter.unpacketC3F (code, x, y, theta);
167175 alvik.resetPose (x, y, theta);
168176 break ;
177+
178+ case ' X' :
179+ packeter.unpacketC1B (code, ack_code);
180+ if (ack_code == ' K' ) {
181+ ack_check = false ;
182+ }
183+ break ;
169184 }
170185 }
171186
187+ // sensors publish
172188 if (millis ()-tsensor>10 ){
173189 tsensor=millis ();
174190 switch (sensor_id){
@@ -204,6 +220,7 @@ void loop(){
204220 }
205221 }
206222
223+ // motors update & publish
207224 if (millis ()-tmotor>20 ){
208225 tmotor=millis ();
209226 alvik.updateMotors ();
@@ -218,24 +235,28 @@ void loop(){
218235 msg_size = packeter.packetC2F (' v' , alvik.getLinearVelocity (), alvik.getAngularVelocity ());
219236 alvik.serial ->write (packeter.msg , msg_size);
220237 // 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 ());
222239 alvik.serial ->write (packeter.msg , msg_size);
240+ }
223241
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' );
234251 }
235-
236252 }
253+ else {
254+ msg_size = packeter.packetC1B (' x' , 0 );
255+ }
256+ alvik.serial ->write (packeter.msg , msg_size);
237257 }
238258
259+ // imu update
239260 if (millis ()-timu>10 ){
240261 timu=millis ();
241262 alvik.updateImu ();
0 commit comments