Skip to content

Commit 492987c

Browse files
committed
Speed can now also be negative
1 parent c4a09e7 commit 492987c

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

src/Primitives/Mindstorms/Motor.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,19 @@ struct PID {
113113
}
114114
};
115115

116-
void Motor::drive_to_target(int32_t max_speed) {
116+
void Motor::drive_to_target(int32_t _s) {
117117
printf("drift = %d\n", abs(get_drift()));
118118

119119
// ev3 has rpm of 160-170
120120
// so maximum around a 1000 degrees per second
121-
float target_speed = 250.0f; // Degrees per second
121+
float max_speed = 250.0f; // Degrees per second
122+
float target_speed = max_speed; // Degrees per second
122123

123124
PID pid(1.0f, 0.05f, 0.2f);
125+
PID position_pid(1.0f, 0.05f, 0.2f);
124126

125127
while (true) {
128+
// Control speed.
126129
float encoder_speed = encoder->get_speed();
127130
float error = target_speed - encoder_speed;
128131

@@ -132,6 +135,11 @@ void Motor::drive_to_target(int32_t max_speed) {
132135
float normalized_speed = speed / 10000.0f;
133136
set_speed(normalized_speed);
134137

138+
// Control position.
139+
/*error = static_cast<float>(get_drift());
140+
output = position_pid.update(error);
141+
target_speed = clamp(output, -max_speed, -max_speed);*/
142+
135143
//printf("error = %f, speed = %f, integral = %f, derivative = %f, encoder_speed = %f\n", error, speed, integral, derivative, encoder_speed);
136144
}
137145
halt();

src/Primitives/Mindstorms/Motor.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,18 @@ class MotorEncoder {
2424
if (rising) {
2525
if (pin5) {
2626
encoder->angle++;
27+
encoder->ticks++;
2728
} else {
2829
encoder->angle--;
30+
encoder->ticks--;
2931
}
3032
} else {
3133
if (pin5) {
3234
encoder->angle--;
35+
encoder->ticks--;
3336
} else {
3437
encoder->angle++;
38+
encoder->ticks++;
3539
}
3640
}
3741
int64_t t = k_uptime_get();
@@ -40,7 +44,7 @@ class MotorEncoder {
4044
//encoder->speed = 0.2f * encoder->speed + 0.8f * (1.0f / (t - encoder->last_update));
4145
//printf("measured speed after = %f\n", encoder->speed);
4246
encoder->last_update = t;
43-
encoder->ticks++;
47+
//encoder->ticks++;
4448
}
4549

4650
public:

0 commit comments

Comments
 (0)