Skip to content

Commit 778875c

Browse files
po
Signed-off-by: yuki-takagi-66 <yuki.takagi@tier4.jp>
1 parent 71bbacb commit 778875c

File tree

3 files changed

+31
-29
lines changed

3 files changed

+31
-29
lines changed

control/autoware_control_validator/include/autoware/control_validator/control_validator.hpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ class AccelerationValidator
7878
measured_acc_lpf.setGain(acc_lpf_gain);
7979
};
8080

81-
bool validate(
82-
const Odometry & kinematic_state, const Control & control_cmd,
81+
void validate(
82+
ControlValidatorStatus & res, const Odometry & kinematic_state, const Control & control_cmd,
8383
const AccelWithCovarianceStamped & loc_acc);
8484

8585
private:
8686
double e_offset;
8787
double e_scale;
88-
autoware::signal_processing::LowpassFilter1d desired_acc_lpf{0.0};
88+
autoware::signal_processing::LowpassFilter1d desired_acc_lpf{0.5};
8989
autoware::signal_processing::LowpassFilter1d measured_acc_lpf{0.0};
9090
};
9191

control/autoware_control_validator/msg/ControlValidatorStatus.msg

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ bool is_valid_latency
1010

1111
# values
1212
float64 max_distance_deviation
13+
float64 desired_acc
14+
float64 measured_acc
1315
float64 target_vel
1416
float64 vehicle_vel
1517
float64 dist_to_stop

control/autoware_control_validator/src/control_validator.cpp

+26-26
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,31 @@ namespace autoware::control_validator
2929
{
3030
using diagnostic_msgs::msg::DiagnosticStatus;
3131

32+
void AccelerationValidator::validate(
33+
ControlValidatorStatus & res, const Odometry & kinematic_state, const Control & control_cmd,
34+
const AccelWithCovarianceStamped & loc_acc)
35+
{
36+
desired_acc_lpf.filter(
37+
control_cmd.longitudinal.acceleration +
38+
9.8 * autoware_utils::get_rpy(kinematic_state.pose.pose).y);
39+
measured_acc_lpf.filter(loc_acc.accel.accel.linear.x);
40+
if (std::abs(kinematic_state.twist.twist.linear.x) < 1e-3) {
41+
desired_acc_lpf.reset(0.0);
42+
measured_acc_lpf.reset(0.0);
43+
}
44+
45+
res.desired_acc = desired_acc_lpf.getValue().value();
46+
res.measured_acc = measured_acc_lpf.getValue().value();
47+
48+
const int8_t des_sign = std::signbit(res.desired_acc) ? 1 : -1;
49+
if (
50+
res.measured_acc > res.desired_acc * (1 + des_sign * e_scale) + e_offset &&
51+
res.measured_acc < res.desired_acc * (1 - des_sign * e_scale) - e_offset) {
52+
res.is_valid_acc = false;
53+
}
54+
res.is_valid_acc = true;
55+
}
56+
3257
ControlValidator::ControlValidator(const rclcpp::NodeOptions & options)
3358
: Node("control_validator", options), validation_params_(), vehicle_info_()
3459
{
@@ -252,8 +277,7 @@ void ControlValidator::validate(
252277
std::tie(
253278
validation_status_.max_distance_deviation, validation_status_.is_valid_max_distance_deviation) =
254279
calc_lateral_deviation_status(predicted_trajectory, *current_reference_trajectory_);
255-
validation_status_.is_valid_acc =
256-
acceleration_validator.validate(kinematics, control_cmd, measured_acc);
280+
acceleration_validator.validate(validation_status_, kinematics, control_cmd, measured_acc);
257281
calc_velocity_deviation_status(*current_reference_trajectory_, kinematics);
258282
calc_stop_point_overrun_status(*current_reference_trajectory_, kinematics);
259283

@@ -271,30 +295,6 @@ std::pair<double, bool> ControlValidator::calc_lateral_deviation_status(
271295
max_distance_deviation <= validation_params_.max_distance_deviation_threshold};
272296
}
273297

274-
bool AccelerationValidator::validate(
275-
const Odometry & kinematic_state, const Control & control_cmd,
276-
const AccelWithCovarianceStamped & loc_acc)
277-
{
278-
if (std::abs(kinematic_state.twist.twist.linear.x) < 1e-3) {
279-
desired_acc_lpf.reset();
280-
measured_acc_lpf.reset();
281-
return true;
282-
}
283-
284-
const double des = desired_acc_lpf.filter(
285-
control_cmd.longitudinal.acceleration + autoware_utils::get_rpy(kinematic_state.pose.pose).y);
286-
const int8_t des_sign = std::signbit(des) ? 1 : -1;
287-
const double mes = measured_acc_lpf.filter(loc_acc.accel.accel.linear.x);
288-
289-
if (
290-
mes < des * (1 + des_sign * e_scale) + e_offset &&
291-
mes > des * (1 - des_sign * e_scale) - e_offset) {
292-
return true;
293-
}
294-
295-
return false;
296-
}
297-
298298
void ControlValidator::calc_velocity_deviation_status(
299299
const Trajectory & reference_trajectory, const Odometry & kinematics)
300300
{

0 commit comments

Comments
 (0)