Skip to content

Commit ef06bb8

Browse files
committed
change back to enable_integration
Signed-off-by: Zhe Shen <lucidshenzhe@gmail.com>
1 parent 59c45ec commit ef06bb8

File tree

4 files changed

+16
-17
lines changed

4 files changed

+16
-17
lines changed

control/pid_longitudinal_controller/include/pid_longitudinal_controller/pid.hpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ class PIDController
3030
* @brief calculate the output of this PID
3131
* @param [in] error previous error
3232
* @param [in] dt time step [s]
33-
* @param [in] erase_integral if true, will erase the calculated integral (P (proportional) and I
33+
* @param [in] is_integrated if false, will erase the calculated integral (P (proportional) and I
3434
* (integral))
3535
* @param [out] pid_contributions values of the proportional, integral, and derivative components
3636
* @return PID output
3737
* @throw std::runtime_error if gains or limits have not been set
3838
*/
3939
double calculate(
40-
const double error, const double dt, const bool erase_integral,
40+
const double error, const double dt, const bool is_integrated,
4141
std::vector<double> & pid_contributions);
4242
/**
4343
* @brief set the coefficients for the P (proportional) I (integral) D (derivative) terms

control/pid_longitudinal_controller/src/pid.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ PIDController::PIDController()
3232
}
3333

3434
double PIDController::calculate(
35-
const double error, const double dt, const bool erase_integral,
35+
const double error, const double dt, const bool enable_integration,
3636
std::vector<double> & pid_contributions)
3737
{
3838
if (!m_is_gains_set || !m_is_limits_set) {
@@ -41,14 +41,15 @@ double PIDController::calculate(
4141

4242
const auto & p = m_params;
4343

44-
m_virtual_displacement_error = erase_integral ? 0.0 : m_virtual_displacement_error + error * dt;
44+
m_virtual_displacement_error =
45+
enable_integration ? m_virtual_displacement_error + error * dt : 0.0;
4546

4647
double ret_p = p.kp * m_virtual_displacement_error;
4748
ret_p = std::min(std::max(ret_p, p.min_ret_p), p.max_ret_p);
4849

4950
m_virtual_displacement_error_integral =
50-
erase_integral ? 0.0
51-
: m_virtual_displacement_error_integral + m_virtual_displacement_error * dt;
51+
enable_integration ? m_virtual_displacement_error_integral + m_virtual_displacement_error * dt
52+
: 0.0;
5253

5354
const double ret_i =
5455
std::min(std::max(p.ki * m_virtual_displacement_error_integral, p.min_ret_i), p.max_ret_i);

control/pid_longitudinal_controller/src/pid_longitudinal_controller.cpp

+1-3
Original file line numberDiff line numberDiff line change
@@ -1095,13 +1095,11 @@ double PidLongitudinalController::applyVelocityFeedback(const ControlData & cont
10951095
(vehicle_is_moving || (m_enable_integration_at_low_speed && vehicle_is_stuck)) &&
10961096
is_under_control;
10971097

1098-
const bool erase_integral = !enable_integration;
1099-
11001098
const double error_vel_filtered = m_lpf_vel_error->filter(diff_vel);
11011099

11021100
std::vector<double> pid_contributions(3);
11031101
const double pid_acc =
1104-
m_pid_vel.calculate(error_vel_filtered, control_data.dt, erase_integral, pid_contributions);
1102+
m_pid_vel.calculate(error_vel_filtered, control_data.dt, enable_integration, pid_contributions);
11051103

11061104
// Feedforward scaling:
11071105
// This is for the coordinate conversion where feedforward is applied, from Time to Arclength.

control/pid_longitudinal_controller/test/test_pid.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@ TEST(TestPID, calculate_pid_output)
2424
const double dt = 1.0;
2525
double target = 10.0;
2626
double current = 0.0;
27-
bool erase_integral = true;
27+
bool enable_integration = false;
2828

2929
PIDController pid;
3030

3131
// Cannot calculate before initializing gains and limits
32-
EXPECT_THROW(pid.calculate(0.0, dt, erase_integral, contributions), std::runtime_error);
32+
EXPECT_THROW(pid.calculate(0.0, dt, enable_integration, contributions), std::runtime_error);
3333

3434
pid.setGains(1.0, 1.0, 1.0);
3535
pid.setLimits(10.0, 0.0, 10.0, 0.0, 10.0, 0.0, 10.0, 0.0);
3636
double error = target - current;
3737
while (current != target) {
38-
current = pid.calculate(error, dt, erase_integral, contributions);
38+
current = pid.calculate(error, dt, enable_integration, contributions);
3939
EXPECT_EQ(contributions[0], 0.0); // integral is erased
4040
EXPECT_EQ(contributions[1], 0.0); // double integral is erased
4141
EXPECT_EQ(contributions[2], error);
@@ -45,22 +45,22 @@ TEST(TestPID, calculate_pid_output)
4545

4646
pid.setGains(100.0, 100.0, 100.0);
4747
pid.setLimits(10.0, -10.0, 10.0, -10.0, 10.0, -10.0, 10.0, -10.0);
48-
erase_integral = false;
48+
enable_integration = true;
4949

5050
// High errors to force each component to its upper limit
51-
EXPECT_EQ(pid.calculate(0.0, dt, erase_integral, contributions), 0.0);
51+
EXPECT_EQ(pid.calculate(0.0, dt, enable_integration, contributions), 0.0);
5252
for (double error = 100.0; error < 1000.0; error += 100.0) {
53-
EXPECT_EQ(pid.calculate(error, dt, erase_integral, contributions), 10.0);
53+
EXPECT_EQ(pid.calculate(error, dt, enable_integration, contributions), 10.0);
5454
EXPECT_EQ(contributions[0], 10.0); // integral is not erased
5555
EXPECT_EQ(contributions[1], 10.0); // double integral is not erased
5656
EXPECT_EQ(contributions[2], 10.0);
5757
}
5858
pid.reset();
5959

6060
// Low errors to force each component to its lower limit
61-
EXPECT_EQ(pid.calculate(0.0, dt, erase_integral, contributions), 0.0);
61+
EXPECT_EQ(pid.calculate(0.0, dt, enable_integration, contributions), 0.0);
6262
for (double error = -100.0; error > -1000.0; error -= 100.0) {
63-
EXPECT_EQ(pid.calculate(error, dt, erase_integral, contributions), -10.0);
63+
EXPECT_EQ(pid.calculate(error, dt, enable_integration, contributions), -10.0);
6464
EXPECT_EQ(contributions[0], -10.0); // integral is not erased
6565
EXPECT_EQ(contributions[1], -10.0); // double integral is not erased
6666
EXPECT_EQ(contributions[2], -10.0);

0 commit comments

Comments
 (0)