@@ -113,8 +113,8 @@ void check_set_parameters(
113113 ASSERT_EQ (gains.p_gain_ , P);
114114 ASSERT_EQ (gains.i_gain_ , I);
115115 ASSERT_EQ (gains.d_gain_ , D);
116- ASSERT_EQ (gains.i_max_ , I_MAX);
117- ASSERT_EQ (gains.i_min_ , I_MIN);
116+ ASSERT_EQ (gains.antiwindup_strat_ . i_max , I_MAX);
117+ ASSERT_EQ (gains.antiwindup_strat_ . i_min , I_MIN);
118118 ASSERT_EQ (gains.u_max_ , U_MAX);
119119 ASSERT_EQ (gains.u_min_ , U_MIN);
120120 ASSERT_EQ (gains.antiwindup_strat_ .tracking_time_constant , TRK_TC);
@@ -156,7 +156,10 @@ TEST(PidParametersTest, InitPidTestBadParameter)
156156 ANTIWINDUP_STRAT.tracking_time_constant = TRK_TC;
157157 ANTIWINDUP_STRAT.legacy_antiwindup = false ;
158158
159- ASSERT_NO_THROW (pid.initialize_from_args (P, I, D, U_MAX_BAD, U_MIN_BAD, ANTIWINDUP_STRAT, false ));
159+ bool ret;
160+ ASSERT_NO_THROW (
161+ ret = pid.initialize_from_args (P, I, D, U_MAX_BAD, U_MIN_BAD, ANTIWINDUP_STRAT, false ));
162+ ASSERT_FALSE (ret);
160163
161164 rclcpp::Parameter param;
162165
@@ -178,13 +181,30 @@ TEST(PidParametersTest, InitPidTestBadParameter)
178181 ASSERT_EQ (gains.p_gain_ , 0.0 );
179182 ASSERT_EQ (gains.i_gain_ , 0.0 );
180183 ASSERT_EQ (gains.d_gain_ , 0.0 );
181- ASSERT_EQ (gains.i_max_ , std::numeric_limits<double >::infinity ());
182- ASSERT_EQ (gains.i_min_ , -std::numeric_limits<double >::infinity ());
184+ ASSERT_EQ (gains.antiwindup_strat_ . i_max , std::numeric_limits<double >::infinity ());
185+ ASSERT_EQ (gains.antiwindup_strat_ . i_min , -std::numeric_limits<double >::infinity ());
183186 ASSERT_EQ (gains.u_max_ , std::numeric_limits<double >::infinity ());
184187 ASSERT_EQ (gains.u_min_ , -std::numeric_limits<double >::infinity ());
185188 ASSERT_EQ (gains.antiwindup_strat_ .tracking_time_constant , 0.0 );
189+ <<<<<<< HEAD
186190 ASSERT_FALSE (gains.antiwindup_ );
187191 ASSERT_EQ (gains.antiwindup_strat_ , AntiWindupStrategy::LEGACY);
192+ =======
193+ ASSERT_EQ (gains.antiwindup_strat_ , AntiWindupStrategy::NONE);
194+
195+ // Try other invalid combinations
196+ ANTIWINDUP_STRAT.i_max = 10 .;
197+ ANTIWINDUP_STRAT.i_min = 5 .;
198+ ASSERT_NO_THROW (
199+ ret = pid.initialize_from_args (P, I, D, U_MAX_BAD, U_MIN_BAD, ANTIWINDUP_STRAT, false ));
200+ ASSERT_FALSE (ret);
201+
202+ ANTIWINDUP_STRAT.i_max = -5 .;
203+ ANTIWINDUP_STRAT.i_min = 10 .;
204+ ASSERT_NO_THROW (
205+ ret = pid.initialize_from_args (P, I, D, U_MAX_BAD, U_MIN_BAD, ANTIWINDUP_STRAT, false ));
206+ ASSERT_FALSE (ret);
207+ >>>>>>> 84a0c5c (Improve PID parameter validation (#510 ))
188208}
189209
190210TEST (PidParametersTest, InitPid_param_prefix_only)
@@ -303,8 +323,8 @@ TEST(PidParametersTest, SetParametersTest)
303323 ASSERT_EQ (gains.p_gain_ , P);
304324 ASSERT_EQ (gains.i_gain_ , I);
305325 ASSERT_EQ (gains.d_gain_ , D);
306- ASSERT_EQ (gains.i_max_ , I_MAX);
307- ASSERT_EQ (gains.i_min_ , I_MIN);
326+ ASSERT_EQ (gains.antiwindup_strat_ . i_max , I_MAX);
327+ ASSERT_EQ (gains.antiwindup_strat_ . i_min , I_MIN);
308328 ASSERT_EQ (gains.u_max_ , U_MAX);
309329 ASSERT_EQ (gains.u_min_ , U_MIN);
310330 ASSERT_EQ (gains.antiwindup_strat_ .tracking_time_constant , TRK_TC);
@@ -383,8 +403,8 @@ TEST(PidParametersTest, SetBadParametersTest)
383403 ASSERT_EQ (gains.p_gain_ , P);
384404 ASSERT_EQ (gains.i_gain_ , I);
385405 ASSERT_EQ (gains.d_gain_ , D);
386- ASSERT_EQ (gains.i_max_ , I_MAX);
387- ASSERT_EQ (gains.i_min_ , I_MIN);
406+ ASSERT_EQ (gains.antiwindup_strat_ . i_max , I_MAX);
407+ ASSERT_EQ (gains.antiwindup_strat_ . i_min , I_MIN);
388408 ASSERT_EQ (gains.u_max_ , std::numeric_limits<double >::infinity ());
389409 ASSERT_EQ (gains.u_min_ , -std::numeric_limits<double >::infinity ());
390410 ASSERT_EQ (gains.antiwindup_strat_ .tracking_time_constant , TRK_TC);
@@ -406,8 +426,8 @@ TEST(PidParametersTest, SetBadParametersTest)
406426 ASSERT_EQ (gains.p_gain_ , P);
407427 ASSERT_EQ (gains.i_gain_ , I);
408428 ASSERT_EQ (gains.d_gain_ , D);
409- ASSERT_EQ (gains.i_max_ , I_MAX);
410- ASSERT_EQ (gains.i_min_ , I_MIN);
429+ ASSERT_EQ (gains.antiwindup_strat_ . i_max , I_MAX);
430+ ASSERT_EQ (gains.antiwindup_strat_ . i_min , I_MIN);
411431 ASSERT_EQ (gains.u_max_ , std::numeric_limits<double >::infinity ());
412432 ASSERT_EQ (gains.u_min_ , -std::numeric_limits<double >::infinity ());
413433 ASSERT_EQ (gains.antiwindup_strat_ .tracking_time_constant , TRK_TC);
@@ -426,8 +446,8 @@ TEST(PidParametersTest, SetBadParametersTest)
426446 ASSERT_EQ (updated_gains.p_gain_ , P);
427447 ASSERT_EQ (updated_gains.i_gain_ , I);
428448 ASSERT_EQ (updated_gains.d_gain_ , D);
429- ASSERT_EQ (updated_gains.i_max_ , I_MAX);
430- ASSERT_EQ (updated_gains.i_min_ , I_MIN);
449+ ASSERT_EQ (updated_gains.antiwindup_strat_ . i_max , I_MAX);
450+ ASSERT_EQ (updated_gains.antiwindup_strat_ . i_min , I_MIN);
431451 ASSERT_EQ (updated_gains.u_max_ , U_MAX);
432452 ASSERT_EQ (updated_gains.u_min_ , U_MIN);
433453 ASSERT_EQ (updated_gains.antiwindup_strat_ .tracking_time_constant , TRK_TC);
0 commit comments