Skip to content

Commit 6ff83c4

Browse files
hjh059mergify[bot]
authored andcommitted
RateLimiter: Don't update parameters before input checks #437 (#554)
(cherry picked from commit 6e947f1)
1 parent 689ec6f commit 6ff83c4

File tree

1 file changed

+36
-29
lines changed

1 file changed

+36
-29
lines changed

control_toolbox/include/control_toolbox/rate_limiter.hpp

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -171,68 +171,75 @@ void RateLimiter<T>::set_params(
171171
T min_first_derivative_pos, T max_first_derivative_neg, T min_second_derivative,
172172
T max_second_derivative)
173173
{
174-
min_value_ = min_value;
175-
max_value_ = max_value;
176-
min_first_derivative_neg_ = min_first_derivative_neg;
177-
max_first_derivative_pos_ = max_first_derivative_pos;
178-
min_first_derivative_pos_ = min_first_derivative_pos;
179-
max_first_derivative_neg_ = max_first_derivative_neg;
180-
min_second_derivative_ = min_second_derivative;
181-
max_second_derivative_ = max_second_derivative;
174+
auto tmp_has_value_limits = has_value_limits_;
175+
auto tmp_has_first_derivative_limits = has_first_derivative_limits_;
176+
auto tmp_has_second_derivative_limits = has_second_derivative_limits_;
182177

183-
if (std::isnan(max_value_))
178+
if (std::isnan(max_value))
184179
{
185-
has_value_limits_ = false;
180+
tmp_has_value_limits = false;
186181
}
187-
if (std::isnan(min_value_))
182+
if (std::isnan(min_value))
188183
{
189-
min_value_ = -max_value_;
184+
min_value = -max_value;
190185
}
191-
if (has_value_limits_ && min_value_ > max_value_)
186+
if (tmp_has_value_limits && min_value > max_value)
192187
{
193188
throw std::invalid_argument("Invalid value limits");
194189
}
195190

196-
if (std::isnan(max_first_derivative_pos_))
191+
if (std::isnan(max_first_derivative_pos))
197192
{
198-
has_first_derivative_limits_ = false;
193+
tmp_has_first_derivative_limits = false;
199194
}
200-
if (std::isnan(min_first_derivative_neg_))
195+
if (std::isnan(min_first_derivative_neg))
201196
{
202-
min_first_derivative_neg_ = -max_first_derivative_pos_;
197+
min_first_derivative_neg = -max_first_derivative_pos;
203198
}
204-
if (has_first_derivative_limits_ && min_first_derivative_neg_ > max_first_derivative_pos_)
199+
if (tmp_has_first_derivative_limits && min_first_derivative_neg > max_first_derivative_pos)
205200
{
206201
throw std::invalid_argument("Invalid first derivative limits");
207202
}
208-
if (has_first_derivative_limits_)
203+
if (tmp_has_first_derivative_limits)
209204
{
210-
if (std::isnan(max_first_derivative_neg_))
205+
if (std::isnan(max_first_derivative_neg))
211206
{
212-
max_first_derivative_neg_ = max_first_derivative_pos_;
207+
max_first_derivative_neg = max_first_derivative_pos;
213208
}
214-
if (std::isnan(min_first_derivative_pos_))
209+
if (std::isnan(min_first_derivative_pos))
215210
{
216-
min_first_derivative_pos_ = min_first_derivative_neg_;
211+
min_first_derivative_pos = min_first_derivative_neg;
217212
}
218-
if (has_first_derivative_limits_ && min_first_derivative_pos_ > max_first_derivative_neg_)
213+
if (tmp_has_first_derivative_limits && min_first_derivative_pos > max_first_derivative_neg)
219214
{
220215
throw std::invalid_argument("Invalid first derivative limits");
221216
}
222217
}
223218

224-
if (std::isnan(max_second_derivative_))
219+
if (std::isnan(max_second_derivative))
225220
{
226-
has_second_derivative_limits_ = false;
221+
tmp_has_second_derivative_limits = false;
227222
}
228-
if (std::isnan(min_second_derivative_))
223+
if (std::isnan(min_second_derivative))
229224
{
230-
min_second_derivative_ = -max_second_derivative_;
225+
min_second_derivative = -max_second_derivative;
231226
}
232-
if (has_second_derivative_limits_ && min_second_derivative_ > max_second_derivative_)
227+
if (tmp_has_second_derivative_limits && min_second_derivative > max_second_derivative)
233228
{
234229
throw std::invalid_argument("Invalid second derivative limits");
235230
}
231+
232+
min_value_ = min_value;
233+
max_value_ = max_value;
234+
min_first_derivative_neg_ = min_first_derivative_neg;
235+
max_first_derivative_pos_ = max_first_derivative_pos;
236+
min_first_derivative_pos_ = min_first_derivative_pos;
237+
max_first_derivative_neg_ = max_first_derivative_neg;
238+
min_second_derivative_ = min_second_derivative;
239+
max_second_derivative_ = max_second_derivative;
240+
has_value_limits_ = tmp_has_value_limits;
241+
has_first_derivative_limits_ = tmp_has_first_derivative_limits;
242+
has_second_derivative_limits_ = tmp_has_second_derivative_limits;
236243
}
237244

238245
template <typename T>

0 commit comments

Comments
 (0)