9
9
10
10
*/
11
11
12
+ // WIP -> preliminary firmware
13
+
12
14
13
15
#include " Arduino_AlvikCarrier.h"
14
16
#include " sensor_line.h"
@@ -35,20 +37,24 @@ unsigned long timu=0;
35
37
36
38
37
39
float left, right, value;
40
+ float linear, angular;
38
41
uint8_t leds;
39
42
40
43
uint8_t sensor_id = 0 ;
41
44
42
45
43
46
uint8_t pid;
44
47
float kp, ki, kd;
48
+ float x, y, theta;
45
49
46
50
uint8_t servo_A, servo_B;
47
51
48
52
49
53
void setup (){
50
54
Serial.begin (115200 );
51
55
alvik.begin ();
56
+ alvik.disableIlluminator ();
57
+ alvik.setLeds (COLOR_ORANGE);
52
58
alvik.setLedBuiltin (HIGH);
53
59
line.begin ();
54
60
tof.begin ();
@@ -59,6 +65,7 @@ void setup(){
59
65
alvik.serial ->write (packeter.msg ,msg_size);
60
66
61
67
alvik.setLedBuiltin (LOW);
68
+ alvik.setLeds (COLOR_BLACK);
62
69
63
70
64
71
code=0 ;
@@ -77,20 +84,51 @@ void loop(){
77
84
switch (code){
78
85
case ' J' :
79
86
packeter.unpacketC2F (code,left,right);
87
+ alvik.disableKinematicsMovement ();
88
+ alvik.disablePositionControl ();
80
89
alvik.setRpm (left, right);
81
90
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
+
82
99
case ' W' :
83
100
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
+ }
86
115
}
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
+ }
90
129
}
91
-
92
130
break ;
93
-
131
+
94
132
case ' S' :
95
133
packeter.unpacketC2B (code,servo_A,servo_B);
96
134
alvik.setServoA (servo_A);
@@ -111,6 +149,23 @@ void loop(){
111
149
alvik.setKPidRight (kp,ki,kd);
112
150
}
113
151
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 ;
114
169
}
115
170
}
116
171
@@ -152,9 +207,33 @@ void loop(){
152
207
if (millis ()-tmotor>20 ){
153
208
tmotor=millis ();
154
209
alvik.updateMotors ();
210
+ alvik.updateKinematics ();
211
+ // joint speed
155
212
msg_size = packeter.packetC2F (' j' , alvik.getRpmLeft (),alvik.getRpmRight ());
156
213
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
+ }
158
237
}
159
238
160
239
if (millis ()-timu>10 ){
@@ -163,4 +242,4 @@ void loop(){
163
242
msg_size = packeter.packetC6F (' i' , alvik.getAccelerationX (), alvik.getAccelerationY (), alvik.getAccelerationZ (), alvik.getAngularVelocityX (), alvik.getAngularVelocityY (), alvik.getAngularVelocityZ ());
164
243
alvik.serial ->write (packeter.msg ,msg_size);
165
244
}
166
- }
245
+ }
0 commit comments