Skip to content

Commit

Permalink
feat(planning_validator): add diag to check planning component latency
Browse files Browse the repository at this point in the history
Signed-off-by: satoshi-ota <satoshi.ota928@gmail.com>
  • Loading branch information
satoshi-ota committed Mar 6, 2025
1 parent 92da629 commit 3abede8
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
velocity_deviation: 100.0
distance_deviation: 100.0
longitudinal_distance_deviation: 1.0
nominal_latency: 0.1

parameters:
# The required trajectory length is calculated as the distance needed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ struct ValidationParams
double velocity_deviation_threshold;
double distance_deviation_threshold;
double longitudinal_distance_deviation_threshold;
double nominal_latency_threshold;

// parameters
double forward_trajectory_length_acceleration;
Expand Down Expand Up @@ -86,6 +87,7 @@ class PlanningValidator : public rclcpp::Node
bool checkValidDistanceDeviation(const Trajectory & trajectory);
bool checkValidLongitudinalDistanceDeviation(const Trajectory & trajectory);
bool checkValidForwardTrajectoryLength(const Trajectory & trajectory);
bool checkValidLatency(const Trajectory & trajectory);

private:
void setupDiag();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ bool is_valid_velocity_deviation
bool is_valid_distance_deviation
bool is_valid_longitudinal_distance_deviation
bool is_valid_forward_trajectory_length
bool is_valid_latency

# values
int64 trajectory_size
Expand All @@ -31,5 +32,6 @@ float64 distance_deviation
float64 longitudinal_distance_deviation
float64 forward_trajectory_length_required
float64 forward_trajectory_length_measured
float64 latency

int64 invalid_count
14 changes: 13 additions & 1 deletion planning/autoware_planning_validator/src/planning_validator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ void PlanningValidator::setupParameters()
p.distance_deviation_threshold = declare_parameter<double>(t + "distance_deviation");
p.longitudinal_distance_deviation_threshold =
declare_parameter<double>(t + "longitudinal_distance_deviation");
p.nominal_latency_threshold = declare_parameter<double>(t + "nominal_latency");

const std::string ps = "parameters.";
p.forward_trajectory_length_acceleration =
Expand Down Expand Up @@ -168,6 +169,9 @@ void PlanningValidator::setupDiag()
stat, validation_status_.is_valid_forward_trajectory_length,
"trajectory length is too short");
});
d->add(ns + "latency", [&](auto & stat) {
setStatus(stat, validation_status_.is_valid_latency, "latency is larger than expected value.");
});
}

bool PlanningValidator::isDataReady()
Expand Down Expand Up @@ -319,6 +323,7 @@ void PlanningValidator::validate(const Trajectory & trajectory)
s.is_valid_lateral_acc = checkValidLateralAcceleration(resampled);
s.is_valid_steering = checkValidSteering(resampled);
s.is_valid_steering_rate = checkValidSteeringRate(resampled);
s.is_valid_latency = checkValidLatency(trajectory);

s.invalid_count = isAllValid(s) ? 0 : s.invalid_count + 1;
}
Expand Down Expand Up @@ -544,14 +549,20 @@ bool PlanningValidator::checkValidForwardTrajectoryLength(const Trajectory & tra
return forward_length > forward_length_required;
}

bool PlanningValidator::checkValidLatency(const Trajectory & trajectory)
{
validation_status_.latency = (this->now() - trajectory.header.stamp).seconds();
return validation_status_.latency < validation_params_.nominal_latency_threshold;
}

bool PlanningValidator::isAllValid(const PlanningValidatorStatus & s) const
{
return s.is_valid_size && s.is_valid_finite_value && s.is_valid_interval &&
s.is_valid_relative_angle && s.is_valid_curvature && s.is_valid_lateral_acc &&
s.is_valid_longitudinal_max_acc && s.is_valid_longitudinal_min_acc &&
s.is_valid_steering && s.is_valid_steering_rate && s.is_valid_velocity_deviation &&
s.is_valid_distance_deviation && s.is_valid_longitudinal_distance_deviation &&
s.is_valid_forward_trajectory_length;
s.is_valid_forward_trajectory_length && s.is_valid_latency;

Check warning on line 565 in planning/autoware_planning_validator/src/planning_validator.cpp

View check run for this annotation

CodeScene Delta Analysis / CodeScene Cloud Delta Analysis (main)

❌ Getting worse: Complex Method

PlanningValidator::isAllValid increases in cyclomatic complexity from 14 to 15, threshold = 9. This function has many conditional statements (e.g. if, for, while), leading to lower code health. Avoid adding more conditionals and code to it without refactoring.
}

void PlanningValidator::displayStatus()
Expand Down Expand Up @@ -582,6 +593,7 @@ void PlanningValidator::displayStatus()
s.is_valid_longitudinal_distance_deviation,
"planning trajectory is too far from ego in longitudinal direction!!");
warn(s.is_valid_forward_trajectory_length, "planning trajectory forward length is not enough!!");
warn(s.is_valid_latency, "planning component latency is larger than threshold!!");
}

} // namespace autoware::planning_validator
Expand Down

0 comments on commit 3abede8

Please sign in to comment.