Apollo 11.0
自动驾驶开放平台
optimizer.h
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2023 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
34#include "modules/common_msgs/planning_msgs/planning.pb.h"
42#include "modules/planning/tasks/open_space_trajectory_optimizer_park/proto/open_space_trajectory_optimizer_park.pb.h"
43
44namespace apollo {
45namespace planning {
46class Optimizer {
47 public:
50
51 virtual ~Optimizer() = default;
52
53 common::Status Plan(const OpenSpaceInfo open_space_info);
54
55 void GetOptimizedTrajectory(DiscretizedTrajectory& optimized_trajectory) {
56 optimized_trajectory.clear();
57 optimized_trajectory = optimized_trajectory_;
58 }
59
60 void UpdateDebugInfo(
61 planning_internal::OpenSpaceDebug* open_space_debug);
62
63 private:
64 void LoadTrajectoryInEigen(
66 Eigen::MatrixXd& xWS, Eigen::MatrixXd& uWS);
67
68 void PartitionTrajectory(
69 const DiscretizedTrajectory& raw_trajectory,
70 std::vector<DiscretizedTrajectory>* partitioned_trajectories);
71
72 void CombineTrajectories(
73 const std::vector<Eigen::MatrixXd>& xWS_vec,
74 const std::vector<Eigen::MatrixXd>& uWS_vec,
75 const std::vector<Eigen::MatrixXd>& state_result_ds_vec,
76 const std::vector<Eigen::MatrixXd>& control_result_ds_vec,
77 const std::vector<Eigen::MatrixXd>& time_result_ds_vec,
78 const std::vector<Eigen::MatrixXd>& l_warm_up_vec,
79 const std::vector<Eigen::MatrixXd>& n_warm_up_vec,
80 const std::vector<Eigen::MatrixXd>& dual_l_result_ds_vec,
81 const std::vector<Eigen::MatrixXd>& dual_n_result_ds_vec,
82 Eigen::MatrixXd* xWS, Eigen::MatrixXd* uWS,
83 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
84 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* l_warm_up,
85 Eigen::MatrixXd* n_warm_up, Eigen::MatrixXd* dual_l_result_ds,
86 Eigen::MatrixXd* dual_n_result_ds);
87
88 bool GenerateDistanceApproachTraj(
89 const Eigen::MatrixXd& xWS, const Eigen::MatrixXd& uWS,
90 const std::vector<double>& XYbounds,
91 const Eigen::MatrixXi& obstacles_edges_num,
92 const Eigen::MatrixXd& obstacles_A, const Eigen::MatrixXd& obstacles_b,
93 const std::vector<std::vector<common::math::Vec2d>>& obstacles_vertices_vec,
94 const Eigen::MatrixXd& last_time_u, const double init_v,
95 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
96 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* l_warm_up,
97 Eigen::MatrixXd* n_warm_up, Eigen::MatrixXd* dual_l_result_ds,
98 Eigen::MatrixXd* dual_n_result_ds);
99
100 bool GenerateDecoupledTraj(
101 const Eigen::MatrixXd& xWS, const double init_a, const double init_v,
102 const std::vector<std::vector<common::math::Vec2d>>& obstacles_vertices_vec,
103 Eigen::MatrixXd* state_result_dc, Eigen::MatrixXd* control_result_dc,
104 Eigen::MatrixXd* time_result_dc);
105
106 void UseWarmStartAsResult(
107 const Eigen::MatrixXd& xWS, const Eigen::MatrixXd& uWS,
108 const Eigen::MatrixXd& l_warm_up, const Eigen::MatrixXd& n_warm_up,
109 Eigen::MatrixXd* state_result_ds, Eigen::MatrixXd* control_result_ds,
110 Eigen::MatrixXd* time_result_ds, Eigen::MatrixXd* dual_l_result_ds,
111 Eigen::MatrixXd* dual_n_result_ds);
112
113 void LoadTrajectory(
114 const Eigen::MatrixXd& state_result, const Eigen::MatrixXd& control_result,
115 const Eigen::MatrixXd& time_result);
116
117 void LoadResult(
118 const DiscretizedTrajectory& discretized_trajectory,
119 Eigen::MatrixXd* state_result_dc, Eigen::MatrixXd* control_result_dc,
120 Eigen::MatrixXd* time_result_dc);
121
122 void RecordDebugInfo(
123 const common::math::Vec2d& translate_origin, const double rotate_angle,
124 const std::vector<double>& end_pose, const Eigen::MatrixXd& xWS,
125 const Eigen::MatrixXd& uWS, const Eigen::MatrixXd& l_warm_up,
126 const Eigen::MatrixXd& n_warm_up, const Eigen::MatrixXd& dual_l_result_ds,
127 const Eigen::MatrixXd& dual_n_result_ds,
128 const Eigen::MatrixXd& state_result_ds,
129 const Eigen::MatrixXd& control_result_ds,
130 const Eigen::MatrixXd& time_result_ds,
131 const std::vector<double> XYbounds,
132 const std::vector<std::vector<common::math::Vec2d>>&
133 obstacles_vertices_vec);
134
135 private:
137 DiscretizedTrajectory optimized_trajectory_;
138 std::unique_ptr<DistanceApproachProblem> distance_approach_;
139 std::unique_ptr<DualVariableWarmStartProblem> dual_variable_warm_start_;
140 std::unique_ptr<IterativeAnchoringSmoother> iterative_anchoring_smoother_;
142};
143} // namespace planning
144} // 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
void GetOptimizedTrajectory(DiscretizedTrajectory &optimized_trajectory)
Definition optimizer.h:55
void UpdateDebugInfo(planning_internal::OpenSpaceDebug *open_space_debug)
Definition optimizer.cc:851
virtual ~Optimizer()=default
common::Status Plan(const OpenSpaceInfo open_space_info)
Definition optimizer.cc:55
Planning module main class.
class register implement
Definition arena_queue.h:37
Defines the Vec2d class.