99
1010*/
1111
12+ // WIP -> preliminary firmware
13+
1214
1315#include " Arduino_AlvikCarrier.h"
1416#include " sensor_line.h"
@@ -35,20 +37,24 @@ unsigned long timu=0;
3537
3638
3739float left, right, value;
40+ float linear, angular;
3841uint8_t leds;
3942
4043uint8_t sensor_id = 0 ;
4144
4245
4346uint8_t pid;
4447float kp, ki, kd;
48+ float x, y, theta;
4549
4650uint8_t servo_A, servo_B;
4751
4852
4953void setup (){
5054 Serial.begin (115200 );
5155 alvik.begin ();
56+ alvik.disableIlluminator ();
57+ alvik.setLeds (COLOR_ORANGE);
5258 alvik.setLedBuiltin (HIGH);
5359 line.begin ();
5460 tof.begin ();
@@ -59,6 +65,7 @@ void setup(){
5965 alvik.serial ->write (packeter.msg ,msg_size);
6066
6167 alvik.setLedBuiltin (LOW);
68+ alvik.setLeds (COLOR_BLACK);
6269
6370
6471 code=0 ;
@@ -77,20 +84,51 @@ void loop(){
7784 switch (code){
7885 case ' J' :
7986 packeter.unpacketC2F (code,left,right);
87+ alvik.disableKinematicsMovement ();
88+ alvik.disablePositionControl ();
8089 alvik.setRpm (left, right);
8190 break ;
91+
92+ case ' V' :
93+ packeter.unpacketC2F (code,linear,angular);
94+ alvik.disableKinematicsMovement ();
95+ alvik.disablePositionControl ();
96+ alvik.drive (linear,angular);
97+ break ;
98+
8299 case ' W' :
83100 packeter.unpacketC2B1F (code,label,control_type,value);
84- if ((label == ' L' ) && (control_type == ' V' )) {
85- alvik.motor_control_left ->setRPM (value);
101+ alvik.disableKinematicsMovement ();
102+ if (label==' L' ){
103+ switch (control_type){
104+ case ' V' :
105+ alvik.disablePositionControlLeft ();
106+ alvik.setRpmLeft (value);
107+ break ;
108+ case ' P' :
109+ alvik.setPositionLeft (value);
110+ break ;
111+ case ' Z' :
112+ alvik.resetPositionLeft (value);
113+ break ;
114+ }
86115 }
87- else if ((label == ' R' ) && (control_type == ' V' ))
88- {
89- alvik.motor_control_right ->setRPM (value);
116+ if (label==' R' ){
117+ switch (control_type){
118+ case ' V' :
119+ alvik.disablePositionControlRight ();
120+ alvik.setRpmRight (value);
121+ break ;
122+ case ' P' :
123+ alvik.setPositionRight (value);
124+ break ;
125+ case ' Z' :
126+ alvik.resetPositionRight (value);
127+ break ;
128+ }
90129 }
91-
92130 break ;
93-
131+
94132 case ' S' :
95133 packeter.unpacketC2B (code,servo_A,servo_B);
96134 alvik.setServoA (servo_A);
@@ -111,6 +149,23 @@ void loop(){
111149 alvik.setKPidRight (kp,ki,kd);
112150 }
113151 break ;
152+
153+ case ' R' :
154+ packeter.unpacketC1F (code, value);
155+ alvik.disablePositionControl ();
156+ alvik.rotate (value);
157+ break ;
158+
159+ case ' G' :
160+ packeter.unpacketC1F (code, value);
161+ alvik.disablePositionControl ();
162+ alvik.move (value);
163+ break ;
164+
165+ case ' Z' :
166+ packeter.unpacketC3F (code, x, y, theta);
167+ alvik.resetPose (x, y, theta);
168+ break ;
114169 }
115170 }
116171
@@ -152,9 +207,33 @@ void loop(){
152207 if (millis ()-tmotor>20 ){
153208 tmotor=millis ();
154209 alvik.updateMotors ();
210+ alvik.updateKinematics ();
211+ // joint speed
155212 msg_size = packeter.packetC2F (' j' , alvik.getRpmLeft (),alvik.getRpmRight ());
156213 alvik.serial ->write (packeter.msg ,msg_size);
157-
214+ // joint position
215+ msg_size = packeter.packetC2F (' w' , alvik.getPositionLeft (),alvik.getPositionRight ());
216+ alvik.serial ->write (packeter.msg , msg_size);
217+ // robot speed
218+ msg_size = packeter.packetC2F (' v' , alvik.getLinearVelocity (), alvik.getAngularVelocity ());
219+ alvik.serial ->write (packeter.msg , msg_size);
220+ // pose
221+ msg_size = packeter.packetC3F (' s' , alvik.getX (), alvik.getY (), alvik.getTheta ());
222+ alvik.serial ->write (packeter.msg , msg_size);
223+
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();
234+ }
235+
236+ }
158237 }
159238
160239 if (millis ()-timu>10 ){
@@ -163,4 +242,4 @@ void loop(){
163242 msg_size = packeter.packetC6F (' i' , alvik.getAccelerationX (), alvik.getAccelerationY (), alvik.getAccelerationZ (), alvik.getAngularVelocityX (), alvik.getAngularVelocityY (), alvik.getAngularVelocityZ ());
164243 alvik.serial ->write (packeter.msg ,msg_size);
165244 }
166- }
245+ }
0 commit comments