36typedef std::array<double, 3>
State;
37typedef std::pair<State, double>
Condition;
41 const State& lon_init_state,
const State& lat_init_state,
42 std::shared_ptr<PathTimeGraph> ptr_path_time_graph,
43 std::shared_ptr<PredictionQuerier> ptr_prediction_querier)
44 : init_lon_state_(lon_init_state),
45 init_lat_state_(lat_init_state),
46 end_condition_sampler_(lon_init_state, lat_init_state,
47 ptr_path_time_graph, ptr_prediction_querier),
48 ptr_path_time_graph_(ptr_path_time_graph) {}
54 GenerateLongitudinalTrajectoryBundle(planning_target,
55 ptr_lon_trajectory_bundle);
60void Trajectory1dGenerator::GenerateSpeedProfilesForCruising(
61 const double target_speed,
63 ADEBUG <<
"cruise speed is " << target_speed;
66 if (end_conditions.empty()) {
73 GenerateTrajectory1DBundle<4>(init_lon_state_, end_conditions,
74 ptr_lon_trajectory_bundle);
77void Trajectory1dGenerator::GenerateSpeedProfilesForStopping(
78 const double stop_point,
80 ADEBUG <<
"stop point is " << stop_point;
83 if (end_conditions.empty()) {
88 GenerateTrajectory1DBundle<5>(init_lon_state_, end_conditions,
89 ptr_lon_trajectory_bundle);
92void Trajectory1dGenerator::GenerateSpeedProfilesForPathTimeObstacles(
96 if (end_conditions.empty()) {
101 GenerateTrajectory1DBundle<5>(init_lon_state_, end_conditions,
102 ptr_lon_trajectory_bundle);
105void Trajectory1dGenerator::GenerateLongitudinalTrajectoryBundle(
106 const PlanningTarget& planning_target,
109 GenerateSpeedProfilesForCruising(planning_target.cruise_speed(),
110 ptr_lon_trajectory_bundle);
112 GenerateSpeedProfilesForPathTimeObstacles(ptr_lon_trajectory_bundle);
114 if (planning_target.has_stop_point()) {
115 GenerateSpeedProfilesForStopping(planning_target.stop_point().s(),
116 ptr_lon_trajectory_bundle);
122 if (!FLAGS_lateral_optimization) {
126 GenerateTrajectory1DBundle<5>(init_lat_state_, end_conditions,
127 ptr_lat_trajectory_bundle);
129 double s_min = init_lon_state_[0];
130 double s_max = s_min + FLAGS_max_s_lateral_optimization;
132 double delta_s = FLAGS_default_delta_s_lateral_optimization;
134 auto lateral_bounds =
135 ptr_path_time_graph_->GetLateralBounds(s_min, s_max, delta_s);
138 std::unique_ptr<LateralQPOptimizer> lateral_optimizer(
141 lateral_optimizer->optimize(init_lat_state_, delta_s, lateral_bounds);
143 auto lateral_trajectory = lateral_optimizer->GetOptimalTrajectory();
145 ptr_lat_trajectory_bundle->push_back(
146 std::make_shared<PiecewiseJerkTrajectory1d>(lateral_trajectory));
std::vector< std::pair< std::array< double, 3 >, double > > SampleLatEndConditions() const
std::vector< std::pair< std::array< double, 3 >, double > > SampleLonEndConditionsForPathTimePoints() const
std::vector< std::pair< std::array< double, 3 >, double > > SampleLonEndConditionsForStopping(const double ref_stop_point) const
std::vector< std::pair< std::array< double, 3 >, double > > SampleLonEndConditionsForCruising(const double ref_cruise_speed) const
Trajectory1dGenerator(const std::array< double, 3 > &lon_init_state, const std::array< double, 3 > &lat_init_state, std::shared_ptr< PathTimeGraph > ptr_path_time_graph, std::shared_ptr< PredictionQuerier > ptr_prediction_querier)
void GenerateLateralTrajectoryBundle(std::vector< std::shared_ptr< Curve1d > > *ptr_lat_trajectory_bundle) const
void GenerateTrajectoryBundles(const PlanningTarget &planning_target, std::vector< std::shared_ptr< Curve1d > > *ptr_lon_trajectory_bundle, std::vector< std::shared_ptr< Curve1d > > *ptr_lat_trajectory_bundle)
Planning module main class.
std::array< double, 3 > State
std::vector< std::shared_ptr< Curve1d > > Trajectory1DBundle
std::pair< State, double > Condition