26 #include "Eigen/Eigen" 32 #include "modules/common/configs/proto/vehicle_config.pb.h" 34 #include "modules/common/vehicle_state/proto/vehicle_state.pb.h" 40 #include "modules/planning/proto/open_space_task_config.pb.h" 47 const OpenSpaceTrajectoryOptimizerConfig& config);
52 const std::vector<common::TrajectoryPoint>& stitching_trajectory,
53 const std::vector<double>& end_pose,
const std::vector<double>& XYbounds,
55 const Eigen::MatrixXi& obstacles_edges_num,
56 const Eigen::MatrixXd& obstacles_A,
const Eigen::MatrixXd& obstacles_b,
57 const std::vector<std::vector<common::math::Vec2d>>&
58 obstacles_vertices_vec,
59 double* time_latency);
62 std::vector<common::TrajectoryPoint>* stitching_trajectory) {
63 stitching_trajectory->clear();
64 *stitching_trajectory = stitching_trajectory_;
68 optimized_trajectory->clear();
69 *optimized_trajectory = optimized_trajectory_;
73 const common::TrajectoryPoint& trajectory_stitching_point,
75 const std::vector<double>& end_pose,
const Eigen::MatrixXd& xWS,
76 const Eigen::MatrixXd& uWs,
const Eigen::MatrixXd& l_warm_up,
77 const Eigen::MatrixXd& n_warm_up,
const Eigen::MatrixXd& dual_l_result_ds,
78 const Eigen::MatrixXd& dual_n_result_ds,
79 const Eigen::MatrixXd& state_result_ds,
80 const Eigen::MatrixXd& control_result_ds,
81 const Eigen::MatrixXd& time_result_ds,
82 const std::vector<double>& XYbounds,
83 const std::vector<std::vector<common::math::Vec2d>>&
84 obstacles_vertices_vec);
87 ::apollo::planning_internal::OpenSpaceDebug* open_space_debug);
90 return &open_space_debug_;
94 bool IsInitPointNearDestination(
95 const common::TrajectoryPoint& planning_init_point,
96 const std::vector<double>& end_pose,
double rotate_angle,
99 void PathPointNormalizing(
double rotate_angle,
101 double* x,
double* y,
double* phi);
103 void PathPointDeNormalizing(
double rotate_angle,
105 double* x,
double* y,
double* phi);
107 void LoadTrajectory(
const Eigen::MatrixXd& state_result_ds,
108 const Eigen::MatrixXd& control_result_ds,
109 const Eigen::MatrixXd& time_result_ds);
112 Eigen::MatrixXd* xWS, Eigen::MatrixXd* uWS);
114 void UseWarmStartAsResult(
115 const Eigen::MatrixXd& xWS,
const Eigen::MatrixXd& uWS,
116 const Eigen::MatrixXd& l_warm_up,
const Eigen::MatrixXd& n_warm_up,
117 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
118 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* dual_l_result_ds,
119 Eigen::MatrixXd* dual_n_result_ds);
121 bool GenerateDistanceApproachTraj(
122 const Eigen::MatrixXd& xWS,
const Eigen::MatrixXd& uWS,
123 const std::vector<double>& XYbounds,
124 const Eigen::MatrixXi& obstacles_edges_num,
125 const Eigen::MatrixXd& obstacles_A,
const Eigen::MatrixXd& obstacles_b,
126 const std::vector<std::vector<common::math::Vec2d>>&
127 obstacles_vertices_vec,
128 const Eigen::MatrixXd& last_time_u,
const double init_v,
129 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
130 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* l_warm_up,
131 Eigen::MatrixXd* n_warm_up, Eigen::MatrixXd* dual_l_result_ds,
132 Eigen::MatrixXd* dual_n_result_ds);
134 bool GenerateDecoupledTraj(
135 const Eigen::MatrixXd& xWS,
const double init_a,
const double init_v,
136 const std::vector<std::vector<common::math::Vec2d>>&
137 obstacles_vertices_vec,
138 Eigen::MatrixXd* state_result_dc, Eigen::MatrixXd* control_result_dc,
139 Eigen::MatrixXd* time_result_dc);
142 Eigen::MatrixXd* state_result_dc,
143 Eigen::MatrixXd* control_result_dc,
144 Eigen::MatrixXd* time_result_dc);
146 void CombineTrajectories(
147 const std::vector<Eigen::MatrixXd>& xWS_vec,
148 const std::vector<Eigen::MatrixXd>& uWS_vec,
149 const std::vector<Eigen::MatrixXd>& state_result_ds_vec,
150 const std::vector<Eigen::MatrixXd>& control_result_ds_vec,
151 const std::vector<Eigen::MatrixXd>& time_result_ds_vec,
152 const std::vector<Eigen::MatrixXd>& l_warm_up_vec,
153 const std::vector<Eigen::MatrixXd>& n_warm_up_vec,
154 const std::vector<Eigen::MatrixXd>& dual_l_result_ds_vec,
155 const std::vector<Eigen::MatrixXd>& dual_n_result_ds_vec,
156 Eigen::MatrixXd* xWS, Eigen::MatrixXd* uWS,
157 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
158 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* l_warm_up,
159 Eigen::MatrixXd* n_warm_up, Eigen::MatrixXd* dual_l_result_ds,
160 Eigen::MatrixXd* dual_n_result_ds);
163 OpenSpaceTrajectoryOptimizerConfig config_;
165 std::unique_ptr<HybridAStar> warm_start_;
166 std::unique_ptr<DistanceApproachProblem> distance_approach_;
167 std::unique_ptr<DualVariableWarmStartProblem> dual_variable_warm_start_;
168 std::unique_ptr<IterativeAnchoringSmoother> iterative_anchoring_smoother_;
170 std::vector<common::TrajectoryPoint> stitching_trajectory_;
173 apollo::planning_internal::OpenSpaceDebug open_space_debug_;
common::Status Plan(const std::vector< common::TrajectoryPoint > &stitching_trajectory, const std::vector< double > &end_pose, const std::vector< double > &XYbounds, double rotate_angle, const common::math::Vec2d &translate_origin, const Eigen::MatrixXi &obstacles_edges_num, const Eigen::MatrixXd &obstacles_A, const Eigen::MatrixXd &obstacles_b, const std::vector< std::vector< common::math::Vec2d >> &obstacles_vertices_vec, double *time_latency)
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Definition: discretized_trajectory.h:32
void UpdateDebugInfo(::apollo::planning_internal::OpenSpaceDebug *open_space_debug)
Planning module main class. It processes GPS and IMU as input, to generate planning info...
apollo::planning_internal::OpenSpaceDebug * mutable_open_space_debug()
Definition: open_space_trajectory_optimizer.h:89
Implements a class of 2-dimensional vectors.
Definition: vec2d.h:42
OpenSpaceTrajectoryOptimizer(const OpenSpaceTrajectoryOptimizerConfig &config)
void GetStitchingTrajectory(std::vector< common::TrajectoryPoint > *stitching_trajectory)
Definition: open_space_trajectory_optimizer.h:61
A general class to denote the return status of an API call. It can either be an OK status for success...
Definition: status.h:43
void RecordDebugInfo(const common::TrajectoryPoint &trajectory_stitching_point, const common::math::Vec2d &translate_origin, const double rotate_angle, const std::vector< double > &end_pose, const Eigen::MatrixXd &xWS, const Eigen::MatrixXd &uWs, const Eigen::MatrixXd &l_warm_up, const Eigen::MatrixXd &n_warm_up, const Eigen::MatrixXd &dual_l_result_ds, const Eigen::MatrixXd &dual_n_result_ds, const Eigen::MatrixXd &state_result_ds, const Eigen::MatrixXd &control_result_ds, const Eigen::MatrixXd &time_result_ds, const std::vector< double > &XYbounds, const std::vector< std::vector< common::math::Vec2d >> &obstacles_vertices_vec)
Definition: hybrid_a_star.h:47
Definition: open_space_trajectory_optimizer.h:44
virtual ~OpenSpaceTrajectoryOptimizer()=default
void GetOptimizedTrajectory(DiscretizedTrajectory *optimized_trajectory)
Definition: open_space_trajectory_optimizer.h:67