27constexpr double kMinTimeRange = 0.001;
29constexpr double kDefaultSpeedLimit = 10.0;
31constexpr double kMaxAwareDistance = 1e3;
38 const double time_range,
const size_t num_points,
41 : reference_line_info_(reference_line_info),
43 speed_limit_(speed_limit),
44 obs_boundaries_(num_points,
std::vector<
std::array<double, 3>>()),
45 stop_boundaries_(num_points,
std::vector<
std::array<double, 3>>()),
46 nudge_boundaries_(num_points,
std::vector<
std::array<double, 3>>()),
47 side_pass_boundaries_(num_points,
std::vector<
std::array<double, 3>>()) {
48 CHECK_GT(num_points, 0U);
49 CHECK_GT(time_range, kMinTimeRange);
50 double res = time_range /
static_cast<double>(num_points);
51 for (
double t = 0; t < res + time_range; t += res) {
52 eval_time_.push_back(t);
57 const std::vector<common::TrajectoryPoint>& trajectory,
73 auto* speed_feature = trajectory_point_feature->mutable_speed_feature();
75 const double s = speed_point.
s();
76 speed_feature->set_s(s);
77 speed_feature->set_t(speed_point.
t());
78 speed_feature->set_v(speed_point.
v());
79 speed_feature->set_a(speed_point.
a());
80 speed_feature->set_j(speed_point.
da());
84 speed_feature->set_speed_limit(kDefaultSpeedLimit);
87 speed_feature->set_speed_limit(cur_speed_limit);
92 autotuning::SpeedPointRawFeature_ObjectDecisionFeature* decision_obj =
94 for (
const auto& stop_obs : stop_boundaries_[index]) {
95 double lower_s = stop_obs[0];
96 double speed = stop_obs[2];
97 double distance = 0.0;
100 distance = lower_s - s;
101 decision_obj = speed_feature->add_stop();
103 decision_obj = speed_feature->add_collision();
105 decision_obj->set_relative_s(distance);
106 decision_obj->set_relative_v(speed - speed_point.
v());
109 for (
const auto& obs : obs_boundaries_[index]) {
110 double lower_s = obs[0];
111 double upper_s = obs[1];
112 double speed = obs[2];
113 double distance = 0.0;
115 decision_obj = speed_feature->add_overtake();
116 distance = s - upper_s;
117 }
else if (lower_s > s) {
118 decision_obj = speed_feature->add_follow();
119 distance = lower_s - s;
121 decision_obj = speed_feature->add_collision();
123 decision_obj->set_relative_s(distance);
124 decision_obj->set_relative_v(speed - speed_point.
v());
130 const std::vector<common::SpeedPoint>& speed_profile,
132 if (speed_profile.size() != eval_time_.size()) {
133 const std::string msg =
"mismatched evaluated time and speed profile size";
135 return Status(ErrorCode::PLANNING_ERROR, msg);
137 for (
size_t i = 0; i < eval_time_.size(); ++i) {
138 auto* trajectory_point_feature = trajectory_feature->add_point_feature();
140 EvaluateSpeedPoint(speed_profile[i], i, trajectory_point_feature);
142 const std::string msg =
"Extracting speed profile error";
144 return Status(ErrorCode::PLANNING_ERROR, msg);
150void AutotuningRawFeatureGenerator::GenerateSTBoundaries(
152 const auto& path_decision = reference_line_info.
path_decision();
153 for (
auto* obstacle : path_decision.obstacles().Items()) {
154 auto id = obstacle->Id();
155 const double speed = obstacle->speed();
156 if (!obstacle->path_st_boundary().IsEmpty()) {
158 ConvertToDiscretizedBoundaries(obstacle->path_st_boundary(), speed);
163void AutotuningRawFeatureGenerator::ConvertToDiscretizedBoundaries(
164 const STBoundary& boundary,
const double speed) {
165 for (
size_t i = 0; i < eval_time_.size(); ++i) {
168 bool suc = boundary.GetBoundarySRange(eval_time_[i], &upper, &lower);
171 stop_boundaries_[i].push_back({{lower, upper, speed}});
173 obs_boundaries_[i].push_back({{lower, upper, speed}});
A general class to denote the return status of an API call.
static Status OK()
generate a success status.
common::Status EvaluateTrajectory(const std::vector< common::TrajectoryPoint > &trajectory, autotuning::TrajectoryRawFeature *const trajectory_feature) const
evaluate trajectory with environment, generate model trajectory features
common::Status EvaluateSpeedProfile(const std::vector< common::SpeedPoint > &speed_profile, autotuning::TrajectoryRawFeature *const trajectory_feature) const
EvaluateSpeed Profile shall match the time range as well as resolution
common::Status EvaluateTrajectoryPoint(const common::TrajectoryPoint &trajectory_point, autotuning::TrajectoryPointRawFeature *const trajectory_point_feature) const
evaluate trajectory point with environment, generate model trajectory features
AutotuningRawFeatureGenerator(const double time_range, const size_t num_points, const ReferenceLineInfo &reference_line_info, const Frame &frame, const SpeedLimit &speed_limit)
Frame holds all data for one planning cycle.
ReferenceLineInfo holds all data for one reference line.
PathDecision * path_decision()
const std::vector< std::pair< double, double > > & speed_limit_points() const
double GetSpeedLimitByS(const double s) const
Planning module main class.