133 static size_t num_planning_cycles = 0;
134 static size_t num_planning_succeeded_cycles = 0;
137 double current_time = start_time;
139 ADEBUG <<
"Number of planning cycles: " << num_planning_cycles <<
" "
140 << num_planning_succeeded_cycles;
141 ++num_planning_cycles;
145 auto ptr_reference_line =
146 std::make_shared<std::vector<PathPoint>>(ToDiscretizedReferenceLine(
152 *ptr_reference_line, planning_init_point.
path_point().
x(),
156 std::array<double, 3> init_s;
157 std::array<double, 3> init_d;
158 ComputeInitFrenetState(matched_point, planning_init_point, &init_s, &init_d);
160 ADEBUG <<
"ReferenceLine and Frenet Conversion Time = "
164 auto ptr_prediction_querier = std::make_shared<PredictionQuerier>(
168 auto ptr_path_time_graph = std::make_shared<PathTimeGraph>(
169 ptr_prediction_querier->GetObstacles(), *ptr_reference_line,
170 reference_line_info, init_s[0],
171 init_s[0] + FLAGS_speed_lon_decision_horizon, 0.0,
172 FLAGS_trajectory_time_length, init_d);
179 if (planning_target.has_stop_point()) {
181 <<
"Current ego s: " << init_s[0];
189 init_s, init_d, ptr_path_time_graph, ptr_prediction_querier);
190 std::vector<std::shared_ptr<Curve1d>> lon_trajectory1d_bundle;
191 std::vector<std::shared_ptr<Curve1d>> lat_trajectory1d_bundle;
193 planning_target, &lon_trajectory1d_bundle, &lat_trajectory1d_bundle);
195 ADEBUG <<
"Trajectory_Generation_Time = "
204 init_s, planning_target, lon_trajectory1d_bundle, lat_trajectory1d_bundle,
205 ptr_path_time_graph, ptr_reference_line);
207 ADEBUG <<
"Trajectory_Evaluator_Construction_Time = "
211 ADEBUG <<
"number of trajectory pairs = "
213 <<
" number_lon_traj = " << lon_trajectory1d_bundle.size()
214 <<
" number_lat_traj = " << lat_trajectory1d_bundle.size();
218 *ptr_reference_line, reference_line_info,
219 ptr_path_time_graph);
223 size_t constraint_failure_count = 0;
224 size_t collision_failure_count = 0;
225 size_t combined_constraint_failure_count = 0;
227 size_t lon_vel_failure_count = 0;
228 size_t lon_acc_failure_count = 0;
229 size_t lon_jerk_failure_count = 0;
230 size_t curvature_failure_count = 0;
231 size_t lat_acc_failure_count = 0;
232 size_t lat_jerk_failure_count = 0;
234 size_t num_lattice_traj = 0;
237 double trajectory_pair_cost =
243 *ptr_reference_line, *trajectory_pair.first, *trajectory_pair.second,
250 ++combined_constraint_failure_count;
254 lon_vel_failure_count += 1;
257 lon_acc_failure_count += 1;
260 lon_jerk_failure_count += 1;
263 curvature_failure_count += 1;
266 lat_acc_failure_count += 1;
269 lat_jerk_failure_count += 1;
280 if (collision_checker.
InCollision(combined_trajectory)) {
281 ++collision_failure_count;
286 const auto& combined_trajectory_points = combined_trajectory;
287 num_lattice_traj += 1;
290 trajectory_pair_cost);
294 ADEBUG <<
"Starting Lon. State: s = " << init_s[0] <<
" ds = " << init_s[1]
295 <<
" dds = " << init_s[2];
297 auto lattice_traj_ptr =
298 std::dynamic_pointer_cast<LatticeTrajectory1d>(trajectory_pair.first);
299 if (!lattice_traj_ptr) {
300 ADEBUG <<
"Dynamically casting trajectory1d ptr. failed.";
303 if (lattice_traj_ptr->has_target_position()) {
304 ADEBUG <<
"Ending Lon. State s = " << lattice_traj_ptr->target_position()
305 <<
" ds = " << lattice_traj_ptr->target_velocity()
306 <<
" t = " << lattice_traj_ptr->target_time();
310 ADEBUG <<
"XY: " << planning_init_point.ShortDebugString();
311 ADEBUG <<
"S: (" << init_s[0] <<
", " << init_s[1] <<
"," << init_s[2]
313 ADEBUG <<
"L: (" << init_d[0] <<
", " << init_d[1] <<
"," << init_d[2]
316 ADEBUG <<
"Reference_line_priority_cost = "
318 ADEBUG <<
"Total_Trajectory_Cost = " << trajectory_pair_cost;
319 ADEBUG <<
"OutputTrajectory";
320 for (uint i = 0; i < 10; ++i) {
321 ADEBUG << combined_trajectory_points[i].ShortDebugString();
336 ADEBUG <<
"Trajectory_Evaluation_Time = "
339 ADEBUG <<
"Step CombineTrajectory Succeeded";
341 ADEBUG <<
"1d trajectory not valid for constraint ["
342 << constraint_failure_count <<
"] times";
343 ADEBUG <<
"Combined trajectory not valid for ["
344 << combined_constraint_failure_count <<
"] times";
345 ADEBUG <<
"Trajectory not valid for collision [" << collision_failure_count
347 ADEBUG <<
"Total_Lattice_Planning_Frame_Time = "
350 if (num_lattice_traj > 0) {
351 ADEBUG <<
"Planning succeeded";
352 num_planning_succeeded_cycles += 1;
356 AERROR <<
"Planning failed";
357 if (FLAGS_enable_backup_trajectory) {
358 AERROR <<
"Use backup trajectory";
361 std::make_shared<CollisionChecker>(collision_checker),
362 &trajectory1d_generator);
366 reference_line_info->
AddCost(FLAGS_backup_trajectory_cost);
372 reference_line_info->
SetCost(std::numeric_limits<double>::infinity());
374 return Status(ErrorCode::PLANNING_ERROR,
"No feasible trajectories");
static void cartesian_to_frenet(const double rs, const double rx, const double ry, const double rtheta, const double rkappa, const double rdkappa, const double x, const double y, const double v, const double a, const double theta, const double kappa, std::array< double, 3 > *const ptr_s_condition, std::array< double, 3 > *const ptr_d_condition)
Convert a vehicle state in Cartesian frame to Frenet frame.