37 if (input_feature ==
nullptr) {
38 const std::string msg =
"input trajectory feature is empty";
40 return Status(ErrorCode::PLANNING_ERROR, msg);
44 int n = input_feature->point_feature_size();
45 if (n != raw_feature.point_feature_size()) {
46 const std::string msg =
47 absl::StrCat(
"raw and input feature size mismatch. raw: ",
48 raw_feature.point_feature_size(),
"; input: ", n);
50 return Status(ErrorCode::PLANNING_ERROR, msg);
53 for (
int i = 0; i < n; ++i) {
55 auto* point_feature = input_feature->mutable_point_feature(i);
58 const std::string msg =
"pointwise feature adding incorrect";
59 return Status(ErrorCode::PLANNING_ERROR, msg);
70 auto* speed_feature = point_feature->mutable_speed_input_feature();
73 speed_feature->set_v(v);
76 speed_feature->set_speed_limit(
80 double lateral_acc = v * v * kappa;
82 speed_feature->set_path_curvature_abs(std::fabs(kappa));
83 speed_feature->set_lateral_acc(lateral_acc);
86 for (
int i = 0; i < raw_point_feature.
speed_feature().virtual_decision_size();
88 const auto& obj_decision =
90 auto* input_decision = speed_feature->add_virtual_obs_feature();
91 map_obstacle_feature(obj_decision, input_decision);
95 for (
int i = 0; i < raw_point_feature.
speed_feature().stop_size(); ++i) {
97 auto* input_decision = speed_feature->add_stop_obs_feature();
98 map_obstacle_feature(obj_decision, input_decision);
102 for (
int i = 0; i < raw_point_feature.
speed_feature().overtake_size(); ++i) {
104 auto* input_decision = speed_feature->add_overtake_obs_feature();
105 map_obstacle_feature(obj_decision, input_decision);
110 for (
int i = 0; i < raw_point_feature.
speed_feature().follow_size(); ++i) {
112 auto* input_decision = speed_feature->add_follow_obs_feature();
113 map_obstacle_feature(obj_decision, input_decision);
117 for (
int i = 0; i < raw_point_feature.
speed_feature().nudge_size(); ++i) {
119 auto* input_decision = speed_feature->add_nudge_obs_feature();
120 map_nudge_obs_feature(obj_decision, input_decision);
124 for (
int i = 0; i < raw_point_feature.
speed_feature().sidepass_front_size();
126 const auto& obj_decision =
128 auto* input_decision = speed_feature->add_sidepass_front_obs_feature();
129 map_sidepass_obs_feature(obj_decision, input_decision);
131 for (
int i = 0; i < raw_point_feature.
speed_feature().sidepass_rear_size();
133 const auto& obj_decision =
135 auto* input_decision = speed_feature->add_sidepass_rear_obs_feature();
136 map_sidepass_obs_feature(obj_decision, input_decision);