Apollo 11.0
自动驾驶开放平台
open_space_trajectory_optimizer.h
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2019 The Apollo Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
16
21#pragma once
22
23#include <memory>
24#include <vector>
25
26#include "Eigen/Eigen"
27
28#ifdef ALIVE
29#undef ALIVE
30#endif
31
32#include "modules/common/vehicle_state/proto/vehicle_state.pb.h"
33#include "modules/common_msgs/config_msgs/vehicle_config.pb.h"
34#include "modules/planning/tasks/open_space_trajectory_provider/proto/open_space_trajectory_provider.pb.h"
35
43
44namespace apollo {
45namespace planning {
47 public:
50
51 virtual ~OpenSpaceTrajectoryOptimizer() = default;
52
54 const std::vector<common::TrajectoryPoint>& stitching_trajectory,
55 const std::vector<double>& end_pose, const std::vector<double>& XYbounds,
56 double rotate_angle, const common::math::Vec2d& translate_origin,
57 const Eigen::MatrixXi& obstacles_edges_num,
58 const Eigen::MatrixXd& obstacles_A, const Eigen::MatrixXd& obstacles_b,
59 const std::vector<std::vector<common::math::Vec2d>>&
60 obstacles_vertices_vec,
61 double* time_latency);
62
64 std::vector<common::TrajectoryPoint>* stitching_trajectory) {
65 stitching_trajectory->clear();
66 *stitching_trajectory = stitching_trajectory_;
67 }
68
69 void GetOptimizedTrajectory(DiscretizedTrajectory* optimized_trajectory) {
70 optimized_trajectory->clear();
71 *optimized_trajectory = optimized_trajectory_;
72 }
73
74 void RecordDebugInfo(
75 const common::TrajectoryPoint& trajectory_stitching_point,
76 const common::math::Vec2d& translate_origin, const double rotate_angle,
77 const std::vector<double>& end_pose, const Eigen::MatrixXd& xWS,
78 const Eigen::MatrixXd& uWs, const Eigen::MatrixXd& l_warm_up,
79 const Eigen::MatrixXd& n_warm_up, const Eigen::MatrixXd& dual_l_result_ds,
80 const Eigen::MatrixXd& dual_n_result_ds,
81 const Eigen::MatrixXd& state_result_ds,
82 const Eigen::MatrixXd& control_result_ds,
83 const Eigen::MatrixXd& time_result_ds,
84 const std::vector<double>& XYbounds,
85 const std::vector<std::vector<common::math::Vec2d>>&
86 obstacles_vertices_vec);
87
88 void UpdateDebugInfo(
90
94
95 private:
96 bool IsInitPointNearDestination(
97 const common::TrajectoryPoint& planning_init_point,
98 const std::vector<double>& end_pose, double rotate_angle,
99 const common::math::Vec2d& translate_origin);
100
101 void PathPointNormalizing(double rotate_angle,
102 const common::math::Vec2d& translate_origin,
103 double* x, double* y, double* phi);
104
105 void PathPointDeNormalizing(double rotate_angle,
106 const common::math::Vec2d& translate_origin,
107 double* x, double* y, double* phi);
108
109 void LoadTrajectory(const Eigen::MatrixXd& state_result_ds,
110 const Eigen::MatrixXd& control_result_ds,
111 const Eigen::MatrixXd& time_result_ds);
112
113 void LoadHybridAstarResultInEigen(HybridAStartResult* result,
114 Eigen::MatrixXd* xWS, Eigen::MatrixXd* uWS);
115
116 void UseWarmStartAsResult(
117 const Eigen::MatrixXd& xWS, const Eigen::MatrixXd& uWS,
118 const Eigen::MatrixXd& l_warm_up, const Eigen::MatrixXd& n_warm_up,
119 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
120 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* dual_l_result_ds,
121 Eigen::MatrixXd* dual_n_result_ds);
122
123 bool GenerateDistanceApproachTraj(
124 const Eigen::MatrixXd& xWS, const Eigen::MatrixXd& uWS,
125 const std::vector<double>& XYbounds,
126 const Eigen::MatrixXi& obstacles_edges_num,
127 const Eigen::MatrixXd& obstacles_A, const Eigen::MatrixXd& obstacles_b,
128 const std::vector<std::vector<common::math::Vec2d>>&
129 obstacles_vertices_vec,
130 const Eigen::MatrixXd& last_time_u, const double init_v,
131 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
132 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* l_warm_up,
133 Eigen::MatrixXd* n_warm_up, Eigen::MatrixXd* dual_l_result_ds,
134 Eigen::MatrixXd* dual_n_result_ds);
135
136 bool GenerateDecoupledTraj(
137 const Eigen::MatrixXd& xWS, const double init_a, const double init_v,
138 const std::vector<std::vector<common::math::Vec2d>>&
139 obstacles_vertices_vec,
140 Eigen::MatrixXd* state_result_dc, Eigen::MatrixXd* control_result_dc,
141 Eigen::MatrixXd* time_result_dc);
142
143 void LoadResult(const DiscretizedTrajectory& discretized_trajectory,
144 Eigen::MatrixXd* state_result_dc,
145 Eigen::MatrixXd* control_result_dc,
146 Eigen::MatrixXd* time_result_dc);
147
148 void CombineTrajectories(
149 const std::vector<Eigen::MatrixXd>& xWS_vec,
150 const std::vector<Eigen::MatrixXd>& uWS_vec,
151 const std::vector<Eigen::MatrixXd>& state_result_ds_vec,
152 const std::vector<Eigen::MatrixXd>& control_result_ds_vec,
153 const std::vector<Eigen::MatrixXd>& time_result_ds_vec,
154 const std::vector<Eigen::MatrixXd>& l_warm_up_vec,
155 const std::vector<Eigen::MatrixXd>& n_warm_up_vec,
156 const std::vector<Eigen::MatrixXd>& dual_l_result_ds_vec,
157 const std::vector<Eigen::MatrixXd>& dual_n_result_ds_vec,
158 Eigen::MatrixXd* xWS, Eigen::MatrixXd* uWS,
159 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
160 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* l_warm_up,
161 Eigen::MatrixXd* n_warm_up, Eigen::MatrixXd* dual_l_result_ds,
162 Eigen::MatrixXd* dual_n_result_ds);
163
164 private:
166
167 std::unique_ptr<HybridAStar> warm_start_;
168 std::unique_ptr<DistanceApproachProblem> distance_approach_;
169 std::unique_ptr<DualVariableWarmStartProblem> dual_variable_warm_start_;
170 std::unique_ptr<IterativeAnchoringSmoother> iterative_anchoring_smoother_;
171
172 std::vector<common::TrajectoryPoint> stitching_trajectory_;
173 DiscretizedTrajectory optimized_trajectory_;
174
176};
177} // namespace planning
178} // namespace apollo
A general class to denote the return status of an API call.
Definition status.h:43
Implements a class of 2-dimensional vectors.
Definition vec2d.h:42
apollo::planning_internal::OpenSpaceDebug * mutable_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)
void UpdateDebugInfo(::apollo::planning_internal::OpenSpaceDebug *open_space_debug)
void GetOptimizedTrajectory(DiscretizedTrajectory *optimized_trajectory)
void GetStitchingTrajectory(std::vector< common::TrajectoryPoint > *stitching_trajectory)
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)
Planning module main class.
class register implement
Definition arena_queue.h:37
Defines the Vec2d class.