Skip to content

Commit 71bbacb

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

File tree

2 files changed

+34
-33
lines changed

2 files changed

+34
-33
lines changed

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

+30-26
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,35 @@ struct ValidationParams
6060
double nominal_latency_threshold;
6161
};
6262

63+
/**
64+
* @class AccelerationValidator
65+
* @brief Validates deviation between output acceleration and measured acceleration.
66+
*/
67+
class AccelerationValidator
68+
{
69+
public:
70+
explicit AccelerationValidator(rclcpp::Node & node)
71+
{
72+
e_offset =
73+
autoware_utils::get_or_declare_parameter<double>(node, "thresholds.acc_error_offset");
74+
e_scale = autoware_utils::get_or_declare_parameter<double>(node, "thresholds.acc_error_scale");
75+
const double acc_lpf_gain =
76+
autoware_utils::get_or_declare_parameter<double>(node, "acc_lpf_gain");
77+
desired_acc_lpf.setGain(acc_lpf_gain);
78+
measured_acc_lpf.setGain(acc_lpf_gain);
79+
};
80+
81+
bool validate(
82+
const Odometry & kinematic_state, const Control & control_cmd,
83+
const AccelWithCovarianceStamped & loc_acc);
84+
85+
private:
86+
double e_offset;
87+
double e_scale;
88+
autoware::signal_processing::LowpassFilter1d desired_acc_lpf{0.0};
89+
autoware::signal_processing::LowpassFilter1d measured_acc_lpf{0.0};
90+
};
91+
6392
/**
6493
* @class ControlValidator
6594
* @brief Validates control commands by comparing predicted trajectories against reference
@@ -146,32 +175,6 @@ class ControlValidator : public rclcpp::Node
146175
*/
147176
void display_status();
148177

149-
class AccelerationValidator
150-
{
151-
public:
152-
void setup_parameters(rclcpp::Node & node)
153-
{
154-
e_offset =
155-
autoware_utils::get_or_declare_parameter<double>(node, "thresholds.acc_error_offset");
156-
e_scale =
157-
autoware_utils::get_or_declare_parameter<double>(node, "thresholds.acc_error_scale");
158-
const auto acc_lpf_gain =
159-
autoware_utils::get_or_declare_parameter<double>(node, "acc_lpf_gain");
160-
desired_acc_lpf.setGain(acc_lpf_gain);
161-
measured_acc_lpf.setGain(acc_lpf_gain);
162-
};
163-
164-
bool validate(
165-
const Odometry & kinematic_state, const Control & control_cmd,
166-
const AccelWithCovarianceStamped & loc_acc);
167-
168-
private:
169-
double e_offset;
170-
double e_scale;
171-
autoware::signal_processing::LowpassFilter1d desired_acc_lpf{0.0};
172-
autoware::signal_processing::LowpassFilter1d measured_acc_lpf{0.0};
173-
} acceleration_validator;
174-
175178
/**
176179
* @brief Set the diagnostic status
177180
* @param stat Diagnostic status wrapper
@@ -203,6 +206,7 @@ class ControlValidator : public rclcpp::Node
203206
ValidationParams validation_params_; // for thresholds
204207
autoware::signal_processing::LowpassFilter1d vehicle_vel_{0.0};
205208
autoware::signal_processing::LowpassFilter1d target_vel_{0.0};
209+
AccelerationValidator acceleration_validator{*this};
206210

207211
bool hold_velocity_error_until_stop_{false};
208212

control/autoware_control_validator/src/control_validator.cpp

+4-7
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
#include "autoware/motion_utils/trajectory/trajectory.hpp"
2020
#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp"
2121

22-
// #include <nav_msgs/msg/odometry.hpp>
23-
2422
#include <algorithm>
2523
#include <cstdint>
2624
#include <memory>
@@ -80,7 +78,6 @@ void ControlValidator::setup_parameters()
8078
p.overrun_stop_point_dist = declare_parameter<double>(t + "overrun_stop_point_dist");
8179
p.nominal_latency_threshold = declare_parameter<double>(t + "nominal_latency");
8280
}
83-
acceleration_validator.setup_parameters(*this);
8481

8582
const auto vel_lpf_gain = declare_parameter<double>("vel_lpf_gain");
8683
vehicle_vel_.setGain(vel_lpf_gain);
@@ -181,9 +178,11 @@ bool ControlValidator::is_data_ready()
181178
void ControlValidator::on_control_cmd(const Control::ConstSharedPtr msg)
182179
{
183180
control_cmd_msg_ = msg;
181+
184182
validation_status_.latency = (this->now() - msg->stamp).seconds();
185183
validation_status_.is_valid_latency =
186184
validation_status_.latency < validation_params_.nominal_latency_threshold;
185+
187186
validation_status_.invalid_count =
188187
is_all_valid(validation_status_) ? 0 : validation_status_.invalid_count + 1;
189188
}
@@ -253,11 +252,9 @@ void ControlValidator::validate(
253252
std::tie(
254253
validation_status_.max_distance_deviation, validation_status_.is_valid_max_distance_deviation) =
255254
calc_lateral_deviation_status(predicted_trajectory, *current_reference_trajectory_);
256-
257-
calc_velocity_deviation_status(*current_reference_trajectory_, kinematics);
258-
calc_stop_point_overrun_status(*current_reference_trajectory_, kinematics);
259255
validation_status_.is_valid_acc =
260256
acceleration_validator.validate(kinematics, control_cmd, measured_acc);
257+
calc_velocity_deviation_status(*current_reference_trajectory_, kinematics);
261258
calc_stop_point_overrun_status(*current_reference_trajectory_, kinematics);
262259

263260
validation_status_.invalid_count =
@@ -274,7 +271,7 @@ std::pair<double, bool> ControlValidator::calc_lateral_deviation_status(
274271
max_distance_deviation <= validation_params_.max_distance_deviation_threshold};
275272
}
276273

277-
bool ControlValidator::AccelerationValidator::validate(
274+
bool AccelerationValidator::validate(
278275
const Odometry & kinematic_state, const Control & control_cmd,
279276
const AccelWithCovarianceStamped & loc_acc)
280277
{

0 commit comments

Comments
 (0)