Skip to content

Commit e808fdc

Browse files
feat(pid_longitudinal_controller): update trajectory_adaptive; add debug_values, adopt rate limit fillter (#9656)
Signed-off-by: yuki-takagi-66 <yuki.takagi@tier4.jp>
1 parent 219b8ca commit e808fdc

File tree

3 files changed

+29
-12
lines changed

3 files changed

+29
-12
lines changed

control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/debug_values.hpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ class DebugValues
3434
NEAREST_VEL = 4,
3535
NEAREST_ACC = 5,
3636
SHIFT = 6,
37-
PITCH_LPF_RAD = 7,
37+
PITCH_USING_RAD = 7,
3838
PITCH_RAW_RAD = 8,
39-
PITCH_LPF_DEG = 9,
39+
PITCH_USING_DEG = 9,
4040
PITCH_RAW_DEG = 10,
4141
ERROR_VEL = 11,
4242
ERROR_VEL_FILTERED = 12,
@@ -61,6 +61,8 @@ class DebugValues
6161
ERROR_ACC = 31,
6262
ERROR_ACC_FILTERED = 32,
6363
ACC_CMD_ACC_FB_APPLIED = 33,
64+
PITCH_LPF_RAD = 34,
65+
PITCH_LPF_DEG = 35,
6466

6567
SIZE // this is the number of enum elements
6668
};

control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
216216
std::shared_ptr<LowpassFilter1d> m_lpf_pitch{nullptr};
217217
double m_max_pitch_rad;
218218
double m_min_pitch_rad;
219+
std::optional<double> m_previous_slope_angle{std::nullopt};
219220

220221
// ego nearest index search
221222
double m_ego_nearest_dist_threshold;
@@ -411,11 +412,14 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
411412

412413
/**
413414
* @brief update variables for debugging about pitch
414-
* @param [in] pitch current pitch of the vehicle (filtered)
415-
* @param [in] traj_pitch current trajectory pitch
416-
* @param [in] raw_pitch current raw pitch of the vehicle (unfiltered)
415+
* @param [in] pitch_using
416+
* @param [in] traj_pitch
417+
* @param [in] localization_pitch
418+
* @param [in] localization_pitch_lpf
417419
*/
418-
void updatePitchDebugValues(const double pitch, const double traj_pitch, const double raw_pitch);
420+
void updatePitchDebugValues(
421+
const double pitch_using, const double traj_pitch, const double localization_pitch,
422+
const double localization_pitch_lpf);
419423

420424
/**
421425
* @brief update variables for velocity and acceleration

control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp

+17-6
Original file line numberDiff line numberDiff line change
@@ -584,13 +584,21 @@ PidLongitudinalController::ControlData PidLongitudinalController::getControlData
584584
} else {
585585
control_data.slope_angle = m_lpf_pitch->filter(raw_pitch);
586586
}
587+
if (m_previous_slope_angle.has_value()) {
588+
constexpr double gravity_const = 9.8;
589+
control_data.slope_angle = std::clamp(
590+
control_data.slope_angle,
591+
m_previous_slope_angle.value() + m_min_jerk * control_data.dt / gravity_const,
592+
m_previous_slope_angle.value() + m_max_jerk * control_data.dt / gravity_const);
593+
}
587594
} else {
588595
RCLCPP_ERROR_THROTTLE(
589596
logger_, *clock_, 3000, "Slope source is not valid. Using raw_pitch option as default");
590597
control_data.slope_angle = m_lpf_pitch->filter(raw_pitch);
591598
}
592599

593-
updatePitchDebugValues(control_data.slope_angle, traj_pitch, raw_pitch);
600+
m_previous_slope_angle = control_data.slope_angle;
601+
updatePitchDebugValues(control_data.slope_angle, traj_pitch, raw_pitch, m_lpf_pitch->getValue());
594602

595603
return control_data;
596604
}
@@ -1189,13 +1197,16 @@ double PidLongitudinalController::applyVelocityFeedback(const ControlData & cont
11891197
}
11901198

11911199
void PidLongitudinalController::updatePitchDebugValues(
1192-
const double pitch, const double traj_pitch, const double raw_pitch)
1200+
const double pitch_using, const double traj_pitch, const double localization_pitch,
1201+
const double localization_pitch_lpf)
11931202
{
11941203
const double to_degrees = (180.0 / static_cast<double>(M_PI));
1195-
m_debug_values.setValues(DebugValues::TYPE::PITCH_LPF_RAD, pitch);
1196-
m_debug_values.setValues(DebugValues::TYPE::PITCH_LPF_DEG, pitch * to_degrees);
1197-
m_debug_values.setValues(DebugValues::TYPE::PITCH_RAW_RAD, raw_pitch);
1198-
m_debug_values.setValues(DebugValues::TYPE::PITCH_RAW_DEG, raw_pitch * to_degrees);
1204+
m_debug_values.setValues(DebugValues::TYPE::PITCH_USING_RAD, pitch_using);
1205+
m_debug_values.setValues(DebugValues::TYPE::PITCH_USING_DEG, pitch_using * to_degrees);
1206+
m_debug_values.setValues(DebugValues::TYPE::PITCH_LPF_RAD, localization_pitch_lpf);
1207+
m_debug_values.setValues(DebugValues::TYPE::PITCH_LPF_DEG, localization_pitch_lpf * to_degrees);
1208+
m_debug_values.setValues(DebugValues::TYPE::PITCH_RAW_RAD, localization_pitch);
1209+
m_debug_values.setValues(DebugValues::TYPE::PITCH_RAW_DEG, localization_pitch * to_degrees);
11991210
m_debug_values.setValues(DebugValues::TYPE::PITCH_RAW_TRAJ_RAD, traj_pitch);
12001211
m_debug_values.setValues(DebugValues::TYPE::PITCH_RAW_TRAJ_DEG, traj_pitch * to_degrees);
12011212
}

0 commit comments

Comments
 (0)