Skip to content

Commit 825a692

Browse files
committed
Make the motor controller a lot more aggressive
This way it goes much faster and doesn't stall nearly as often. It probably could use more tuning, but it appears to work reasonably for both the large motors EV3/NXT and the medium motor.
1 parent b1e2123 commit 825a692

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

src/Primitives/Mindstorms/Motor.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ void Motor::drive_to_target(int32_t input_speed) {
121121
float max_speed = (float) input_speed; // Degrees per second
122122
float target_speed = max_speed; // Degrees per second
123123

124-
PID speed_pid(1.0f, 0.05f, 0.2f);
125-
PID position_pid(2.5f, 0.004f, 0.09f);
124+
PID speed_pid(20.0f, 0.05f, 0.4f);
125+
PID position_pid(50.0f, 0.02f, 0.1f);
126126

127127
while (true) {
128128
// Control speed.
@@ -140,11 +140,11 @@ void Motor::drive_to_target(int32_t input_speed) {
140140
output = position_pid.update(error);
141141
target_speed = clamp(output, -max_speed, max_speed);
142142

143-
printf("position error = %f, speed = %f\n", error, encoder_speed);
143+
printf("position error = %f, speed = %f target_speed = %f\n", error, encoder_speed, target_speed);
144144

145145
//printf("error = %f, speed = %f, integral = %f, derivative = %f, encoder_speed = %f\n", error, speed, integral, derivative, encoder_speed);
146146

147-
if (error == 0.0f && position_pid.prev_error == 0.0f) {
147+
if (error == 0.0f && position_pid.prev_error == 0.0f) { // && encoder_speed == 0.0f
148148
break;
149149
}
150150
}

0 commit comments

Comments
 (0)