@@ -82,8 +82,8 @@ struct AntiWindupStrategy
8282
8383 AntiWindupStrategy ()
8484 : type(UNDEFINED),
85- i_min (std::numeric_limits<double >::quiet_NaN ()),
86- i_max(std::numeric_limits<double >::quiet_NaN ()),
85+ i_min (- std::numeric_limits<double >::infinity ()),
86+ i_max(std::numeric_limits<double >::infinity ()),
8787 legacy_antiwindup(false ),
8888 tracking_time_constant(0.0 ),
8989 error_deadband(std::numeric_limits<double >::epsilon())
@@ -135,20 +135,11 @@ struct AntiWindupStrategy
135135 " AntiWindupStrategy 'back_calculation' requires a valid positive tracking time constant "
136136 " (tracking_time_constant)" );
137137 }
138- if (type == LEGACY && (( i_min > i_max) || ! std::isfinite (i_min) || ! std::isfinite (i_max)) )
138+ if (i_min >= i_max)
139139 {
140140 throw std::invalid_argument (
141141 fmt::format (
142- " AntiWindupStrategy 'legacy' requires i_min < i_max and to be finite (i_min: {}, i_max: "
143- " {})" ,
144- i_min, i_max));
145- }
146- if (type != LEGACY && (std::isfinite (i_min) || std::isfinite (i_max)))
147- {
148- std::cout << " Warning: The i_min and i_max are only valid for the deprecated LEGACY "
149- " antiwindup strategy. Please use the AntiWindupStrategy::set_type() method to "
150- " set the type of antiwindup strategy you want to use."
151- << std::endl;
142+ " PID requires i_min < i_max if limits are finite (i_min: {}, i_max: {})" , i_min, i_max));
152143 }
153144 if (
154145 type != NONE && type != UNDEFINED && type != LEGACY && type != BACK_CALCULATION &&
@@ -182,8 +173,8 @@ struct AntiWindupStrategy
182173 }
183174
184175 Value type = UNDEFINED;
185- double i_min = std::numeric_limits<double >::quiet_NaN (); /* *< Minimum allowable integral term. */
186- double i_max = std::numeric_limits<double >::quiet_NaN (); /* *< Maximum allowable integral term. */
176+ double i_min = - std::numeric_limits<double >::infinity (); /* *< Minimum allowable integral term. */
177+ double i_max = std::numeric_limits<double >::infinity (); /* *< Maximum allowable integral term. */
187178
188179 bool legacy_antiwindup = false ; /* *< Use legacy anti-windup strategy. */
189180
@@ -430,8 +421,10 @@ class Pid
430421 double p_gain_ = 0.0 ; /* *< Proportional gain. */
431422 double i_gain_ = 0.0 ; /* *< Integral gain. */
432423 double d_gain_ = 0.0 ; /* *< Derivative gain. */
433- double i_max_ = 0.0 ; /* *< Maximum allowable integral term. */
434- double i_min_ = 0.0 ; /* *< Minimum allowable integral term. */
424+ double i_max_ =
425+ std::numeric_limits<double >::infinity(); /* *< Maximum allowable integral term. */
426+ double i_min_ =
427+ -std::numeric_limits<double >::infinity(); /* *< Minimum allowable integral term. */
435428 double u_max_ = std::numeric_limits<double >::infinity(); /* *< Maximum allowable output. */
436429 double u_min_ = -std::numeric_limits<double >::infinity(); /* *< Minimum allowable output. */
437430 bool antiwindup_ = false ; /* *< Anti-windup. */
@@ -456,8 +449,9 @@ class Pid
456449 */
457450 [[deprecated(" Use constructor with AntiWindupStrategy only." )]]
458451 Pid (
459- double p = 0.0 , double i = 0.0 , double d = 0.0 , double i_max = 0.0 , double i_min = -0.0 ,
460- bool antiwindup = false );
452+ double p = 0.0 , double i = 0.0 , double d = 0.0 ,
453+ double i_max = std::numeric_limits<double >::infinity(),
454+ double i_min = -std::numeric_limits<double>::infinity(), bool antiwindup = false);
461455
462456 /* !
463457 * \brief Constructor, initialize Pid-gains and term limits.
0 commit comments