Skip to content

Commit e871695

Browse files
first commit
Signed-off-by: Yuki Takagi <yuki.takagi@tier4.jp>
1 parent e670841 commit e871695

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

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

+4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ class DebugValues
5858
STOP_DIST = 28,
5959
FF_SCALE = 29,
6060
ACC_CMD_FF = 30,
61+
ERROR_ACC = 31,
62+
ERROR_ACC_FILTERED = 32,
63+
ACC_CMD_ACC_FB_APPLIED = 33,
64+
6165
SIZE // this is the number of enum elements
6266
};
6367

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

+6-2
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
168168

169169
// drive
170170
PIDController m_pid_vel;
171-
std::shared_ptr<LowpassFilter1d> m_lpf_vel_error{nullptr};
171+
std::unique_ptr<LowpassFilter1d> m_lpf_vel_error{nullptr};
172172
bool m_enable_integration_at_low_speed;
173173
double m_current_vel_threshold_pid_integrate;
174174
double m_time_threshold_before_pid_integrate;
@@ -195,6 +195,10 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
195195
};
196196
EmergencyStateParams m_emergency_state_params;
197197

198+
// acc feedback
199+
double m_acc_feedback_gain;
200+
std::unique_ptr<LowpassFilter1d> m_lpf_acc_error{nullptr};
201+
198202
// acceleration limit
199203
double m_max_acc;
200204
double m_min_acc;
@@ -208,7 +212,7 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro
208212
enum class SlopeSource { RAW_PITCH = 0, TRAJECTORY_PITCH, TRAJECTORY_ADAPTIVE };
209213
SlopeSource m_slope_source{SlopeSource::RAW_PITCH};
210214
double m_adaptive_trajectory_velocity_th;
211-
std::shared_ptr<LowpassFilter1d> m_lpf_pitch{nullptr};
215+
std::unique_ptr<LowpassFilter1d> m_lpf_pitch{nullptr};
212216
double m_max_pitch_rad;
213217
double m_min_pitch_rad;
214218

control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp

+27-3
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ PidLongitudinalController::PidLongitudinalController(rclcpp::Node & node)
102102

103103
// set lowpass filter for vel error and pitch
104104
const double lpf_vel_error_gain{node.declare_parameter<double>("lpf_vel_error_gain")};
105-
m_lpf_vel_error = std::make_shared<LowpassFilter1d>(0.0, lpf_vel_error_gain);
105+
m_lpf_vel_error = std::make_unique<LowpassFilter1d>(0.0, lpf_vel_error_gain);
106106

107107
m_enable_integration_at_low_speed =
108108
node.declare_parameter<bool>("enable_integration_at_low_speed");
@@ -162,6 +162,13 @@ PidLongitudinalController::PidLongitudinalController(rclcpp::Node & node)
162162
p.jerk = node.declare_parameter<double>("emergency_jerk"); // [m/s^3]
163163
}
164164

165+
// parameters for acc feedback
166+
{
167+
const double lpf_acc_error_gain{node.declare_parameter<double>("lpf_acc_error_gain")};
168+
m_lpf_acc_error = std::make_unique<LowpassFilter1d>(0.0, lpf_acc_error_gain);
169+
m_acc_feedback_gain = node.declare_parameter<double>("acc_feedback_gain");
170+
}
171+
165172
// parameters for acceleration limit
166173
m_max_acc = node.declare_parameter<double>("max_acc"); // [m/s^2]
167174
m_min_acc = node.declare_parameter<double>("min_acc"); // [m/s^2]
@@ -175,7 +182,7 @@ PidLongitudinalController::PidLongitudinalController(rclcpp::Node & node)
175182
m_adaptive_trajectory_velocity_th =
176183
node.declare_parameter<double>("adaptive_trajectory_velocity_th"); // [m/s^2]
177184
const double lpf_pitch_gain{node.declare_parameter<double>("lpf_pitch_gain")};
178-
m_lpf_pitch = std::make_shared<LowpassFilter1d>(0.0, lpf_pitch_gain);
185+
m_lpf_pitch = std::make_unique<LowpassFilter1d>(0.0, lpf_pitch_gain);
179186
m_max_pitch_rad = node.declare_parameter<double>("max_pitch_rad"); // [rad]
180187
m_min_pitch_rad = node.declare_parameter<double>("min_pitch_rad"); // [rad]
181188

@@ -363,6 +370,9 @@ rcl_interfaces::msg::SetParametersResult PidLongitudinalController::paramCallbac
363370
update_param("emergency_jerk", p.jerk);
364371
}
365372

373+
// acceleration limit
374+
update_param("acc_feedback_gain", m_acc_feedback_gain);
375+
366376
// acceleration limit
367377
update_param("min_acc", m_min_acc);
368378

@@ -842,8 +852,22 @@ PidLongitudinalController::Motion PidLongitudinalController::calcCtrlCmd(
842852
// store acceleration without slope compensation
843853
m_prev_raw_ctrl_cmd = raw_ctrl_cmd;
844854

855+
// calc acc feedback
856+
const double acc_err = control_data.current_motion.acc - raw_ctrl_cmd.acc;
857+
m_debug_values.setValues(DebugValues::TYPE::ERROR_ACC, acc_err);
858+
m_lpf_acc_error->filter(acc_err);
859+
m_debug_values.setValues(DebugValues::TYPE::ERROR_ACC_FILTERED, m_lpf_acc_error->getValue());
860+
861+
const double acc_cmd = raw_ctrl_cmd.acc - m_lpf_acc_error->getValue() * m_acc_feedback_gain;
862+
m_debug_values.setValues(DebugValues::TYPE::ACC_CMD_ACC_FB_APPLIED, acc_cmd);
863+
RCLCPP_DEBUG(
864+
logger_,
865+
"[acc feedback]: raw_ctrl_cmd.acc: %1.3f, control_data.current_motion.acc: %1.3f, "
866+
"m_lpf_acc_error.getValue(): %1.3f, acc_cmd: %1.3f",
867+
raw_ctrl_cmd.acc, control_data.current_motion.acc, 0.0, acc_cmd);
868+
845869
ctrl_cmd_as_pedal_pos.acc =
846-
applySlopeCompensation(raw_ctrl_cmd.acc, control_data.slope_angle, control_data.shift);
870+
applySlopeCompensation(acc_cmd, control_data.slope_angle, control_data.shift);
847871
m_debug_values.setValues(DebugValues::TYPE::ACC_CMD_SLOPE_APPLIED, ctrl_cmd_as_pedal_pos.acc);
848872
ctrl_cmd_as_pedal_pos.vel = raw_ctrl_cmd.vel;
849873
}

0 commit comments

Comments
 (0)