@@ -29,6 +29,31 @@ namespace autoware::control_validator
29
29
{
30
30
using diagnostic_msgs::msg::DiagnosticStatus;
31
31
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
+
32
57
ControlValidator::ControlValidator (const rclcpp::NodeOptions & options)
33
58
: Node(" control_validator" , options), validation_params_(), vehicle_info_()
34
59
{
@@ -252,8 +277,7 @@ void ControlValidator::validate(
252
277
std::tie (
253
278
validation_status_.max_distance_deviation , validation_status_.is_valid_max_distance_deviation ) =
254
279
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);
257
281
calc_velocity_deviation_status (*current_reference_trajectory_, kinematics);
258
282
calc_stop_point_overrun_status (*current_reference_trajectory_, kinematics);
259
283
@@ -271,30 +295,6 @@ std::pair<double, bool> ControlValidator::calc_lateral_deviation_status(
271
295
max_distance_deviation <= validation_params_.max_distance_deviation_threshold };
272
296
}
273
297
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
-
298
298
void ControlValidator::calc_velocity_deviation_status (
299
299
const Trajectory & reference_trajectory, const Odometry & kinematics)
300
300
{
0 commit comments