Skip to content

Commit 0dfcc32

Browse files
committed
pbio/control: remove control_offset setting
This is no longer being used, so remove it.
1 parent e1d0042 commit 0dfcc32

File tree

4 files changed

+13
-26
lines changed

4 files changed

+13
-26
lines changed

lib/pbio/include/pbio/control.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ typedef struct _pbio_control_settings_t {
3737
int32_t pid_ki; /**< Integral position control constant */
3838
int32_t pid_kd; /**< Derivative position control constant (and proportional speed control constant) */
3939
int32_t max_control; /**< Upper limit on control output */
40-
int32_t control_offset; /**< Constant feedforward signal added in the reference direction */
4140
int32_t actuation_scale; /**< Number of "duty steps" per "%" user-specified raw actuation value */
4241
int32_t integral_range; /**< Region around the target count in which integral errors are accumulated */
4342
int32_t integral_rate; /**< Maximum rate at which the integrator is allowed to increase */
@@ -93,8 +92,8 @@ int32_t pbio_control_user_to_counts(pbio_control_settings_t *s, int32_t user);
9392
void pbio_control_settings_get_limits(pbio_control_settings_t *s, int32_t *speed, int32_t *acceleration, int32_t *actuation);
9493
pbio_error_t pbio_control_settings_set_limits(pbio_control_settings_t *ctl, int32_t speed, int32_t acceleration, int32_t actuation);
9594

96-
void pbio_control_settings_get_pid(pbio_control_settings_t *s, int32_t *pid_kp, int32_t *pid_ki, int32_t *pid_kd, int32_t *integral_range, int32_t *integral_rate, int32_t *control_offset);
97-
pbio_error_t pbio_control_settings_set_pid(pbio_control_settings_t *s, int32_t pid_kp, int32_t pid_ki, int32_t pid_kd, int32_t integral_range, int32_t integral_rate, int32_t control_offset);
95+
void pbio_control_settings_get_pid(pbio_control_settings_t *s, int32_t *pid_kp, int32_t *pid_ki, int32_t *pid_kd, int32_t *integral_range, int32_t *integral_rate);
96+
pbio_error_t pbio_control_settings_set_pid(pbio_control_settings_t *s, int32_t pid_kp, int32_t pid_ki, int32_t pid_kd, int32_t integral_range, int32_t integral_rate);
9897

9998
void pbio_control_settings_get_target_tolerances(pbio_control_settings_t *s, int32_t *speed, int32_t *position);
10099
pbio_error_t pbio_control_settings_set_target_tolerances(pbio_control_settings_t *s, int32_t speed, int32_t position);

lib/pbio/src/control.c

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -336,38 +336,30 @@ pbio_error_t pbio_control_settings_set_limits(pbio_control_settings_t *s, int32_
336336
if (speed < 1 || acceleration < 1 || actuation < 1) {
337337
return PBIO_ERROR_INVALID_ARG;
338338
}
339-
if (actuation * s->actuation_scale <= s->control_offset) {
340-
return PBIO_ERROR_INVALID_OP;
341-
}
342339
s->max_rate = pbio_control_user_to_counts(s, speed);
343340
s->abs_acceleration = pbio_control_user_to_counts(s, acceleration);
344341
s->max_control = actuation * s->actuation_scale;
345342
return PBIO_SUCCESS;
346343
}
347344

348-
void pbio_control_settings_get_pid(pbio_control_settings_t *s, int32_t *pid_kp, int32_t *pid_ki, int32_t *pid_kd, int32_t *integral_range, int32_t *integral_rate, int32_t *control_offset) {
345+
void pbio_control_settings_get_pid(pbio_control_settings_t *s, int32_t *pid_kp, int32_t *pid_ki, int32_t *pid_kd, int32_t *integral_range, int32_t *integral_rate) {
349346
*pid_kp = s->pid_kp;
350347
*pid_ki = s->pid_ki;
351348
*pid_kd = s->pid_kd;
352349
*integral_range = pbio_control_counts_to_user(s, s->integral_range);
353350
*integral_rate = pbio_control_counts_to_user(s, s->integral_rate);
354-
*control_offset = s->control_offset / s->actuation_scale;
355351
}
356352

357-
pbio_error_t pbio_control_settings_set_pid(pbio_control_settings_t *s, int32_t pid_kp, int32_t pid_ki, int32_t pid_kd, int32_t integral_range, int32_t integral_rate, int32_t control_offset) {
358-
if (pid_kp < 0 || pid_ki < 0 || pid_kd < 0 || integral_range < 0 || integral_rate < 0 || control_offset < 0) {
353+
pbio_error_t pbio_control_settings_set_pid(pbio_control_settings_t *s, int32_t pid_kp, int32_t pid_ki, int32_t pid_kd, int32_t integral_range, int32_t integral_rate) {
354+
if (pid_kp < 0 || pid_ki < 0 || pid_kd < 0 || integral_range < 0 || integral_rate < 0) {
359355
return PBIO_ERROR_INVALID_ARG;
360356
}
361-
if (control_offset * s->actuation_scale >= s->max_control) {
362-
return PBIO_ERROR_INVALID_OP;
363-
}
364357

365358
s->pid_kp = pid_kp;
366359
s->pid_ki = pid_ki;
367360
s->pid_kd = pid_kd;
368361
s->integral_range = pbio_control_user_to_counts(s, integral_range);
369362
s->integral_rate = pbio_control_user_to_counts(s, integral_rate);
370-
s->control_offset = control_offset * s->actuation_scale;
371363
return PBIO_SUCCESS;
372364
}
373365

lib/pbio/src/drivebase.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@ static pbio_error_t drivebase_adopt_settings(pbio_control_settings_t *s_distance
3636
s_distance->stall_time = min(s_left->stall_time, s_right->stall_time);
3737

3838
// We require that actuation scale and offsets are the same for either motor, and use as-is for drivebase
39-
if (s_left->actuation_scale != s_right->actuation_scale || s_left->control_offset != s_right->control_offset) {
39+
if (s_left->actuation_scale != s_right->actuation_scale) {
4040
return PBIO_ERROR_INVALID_ARG;
4141
}
4242
s_distance->actuation_scale = s_left->actuation_scale;
43-
s_distance->control_offset = s_left->control_offset;
4443

4544
// Copy rate estimator usage, required to be the same on both motors
4645
if (s_left->use_estimated_rate != s_right->use_estimated_rate || s_left->use_estimated_count != s_right->use_estimated_count) {

pybricks/common/pb_type_control.c

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,25 +94,23 @@ STATIC mp_obj_t common_Control_pid(size_t n_args, const mp_obj_t *pos_args, mp_m
9494
PB_ARG_DEFAULT_NONE(ki),
9595
PB_ARG_DEFAULT_NONE(kd),
9696
PB_ARG_DEFAULT_NONE(integral_range),
97-
PB_ARG_DEFAULT_NONE(integral_rate),
98-
PB_ARG_DEFAULT_NONE(feed_forward));
97+
PB_ARG_DEFAULT_NONE(integral_rate));
9998

10099
// Read current values
101100
int32_t kp, ki, kd;
102-
int32_t integral_range, integral_rate, feed_forward;
103-
pbio_control_settings_get_pid(&self->control->settings, &kp, &ki, &kd, &integral_range, &integral_rate, &feed_forward);
101+
int32_t integral_range, integral_rate;
102+
pbio_control_settings_get_pid(&self->control->settings, &kp, &ki, &kd, &integral_range, &integral_rate);
104103

105104
// If all given values are none, return current values
106105
if (kp_in == mp_const_none && ki_in == mp_const_none && kd_in == mp_const_none &&
107-
integral_range_in == mp_const_none && integral_rate_in == mp_const_none && feed_forward_in == mp_const_none) {
108-
mp_obj_t ret[6];
106+
integral_range_in == mp_const_none && integral_rate_in == mp_const_none) {
107+
mp_obj_t ret[5];
109108
ret[0] = mp_obj_new_int(kp);
110109
ret[1] = mp_obj_new_int(ki);
111110
ret[2] = mp_obj_new_int(kd);
112111
ret[3] = mp_obj_new_int(integral_range);
113112
ret[4] = mp_obj_new_int(integral_rate);
114-
ret[5] = mp_obj_new_int(feed_forward);
115-
return mp_obj_new_tuple(6, ret);
113+
return mp_obj_new_tuple(5, ret);
116114
}
117115

118116
// Assert control is not active
@@ -124,9 +122,8 @@ STATIC mp_obj_t common_Control_pid(size_t n_args, const mp_obj_t *pos_args, mp_m
124122
kd = pb_obj_get_default_int(kd_in, kd);
125123
integral_range = pb_obj_get_default_int(integral_range_in, integral_range);
126124
integral_rate = pb_obj_get_default_int(integral_rate_in, integral_rate);
127-
feed_forward = pb_obj_get_default_int(feed_forward_in, feed_forward);
128125

129-
pb_assert(pbio_control_settings_set_pid(&self->control->settings, kp, ki, kd, integral_range, integral_rate, feed_forward));
126+
pb_assert(pbio_control_settings_set_pid(&self->control->settings, kp, ki, kd, integral_range, integral_rate));
130127

131128
return mp_const_none;
132129
}

0 commit comments

Comments
 (0)