30 const std::string &config_dir,
const std::string &name,
31 const std::shared_ptr<DependencyInjector> &injector) {
35 if (!Task::LoadConfig<OpenSpaceTrajectoryOptimizerParkConfig>(&config_)) {
38 trajectory_optimizer_.reset(
new Optimizer(config_));
48void OpenSpaceTrajectoryOptimizerPark::Stop() {
50 if (thread_init_flag_) {
56Status OpenSpaceTrajectoryOptimizerPark::Process() {
57 auto* previous_frame =
injector_->frame_history()->Latest();
59 AINFO <<
"Not replan";
61 previous_frame->open_space_info().optimizer_trajectory_data();
63 previous_frame->open_space_info().open_space_provider_success());
64 if (FLAGS_enable_record_debug) {
66 ReuseLastFrameDebug(previous_frame);
74 mutable_path_planning_trajectory_result()->clear();
78 AINFO <<
"No initial trajectory solution";
83 if (trajectory_update_) {
86 trajectory_optimizer_->UpdateDebugInfo(
87 ptr_debug->mutable_planning_data()->mutable_open_space());
92 mutable_optimizer_trajectory_data());
93 thread_init_flag_ =
false;
94 trajectory_update_ =
false;
100void OpenSpaceTrajectoryOptimizerPark::Optimize() {
102 if (thread_init_flag_) {
103 AINFO <<
"trajectory is optimizing, please wait!";
107 task_future_ = cyber::Async(
108 &OpenSpaceTrajectoryOptimizerPark::GenerateTrajectoryThread,
this);
109 thread_init_flag_ =
true;
111 GenerateTrajectoryThread();
113 mutable_optimizer_trajectory_data());
117void OpenSpaceTrajectoryOptimizerPark::GenerateTrajectoryThread() {
121 std::lock_guard<std::mutex> lock(data_mutex_);
122 trajectory_update_ =
true;
123 AINFO <<
"tarjectory optimize successfully!";
125 thread_init_flag_ =
false;
127 AERROR <<
"tarjectory optimize failed";
131void OpenSpaceTrajectoryOptimizerPark::LoadResult(
132 DiscretizedTrajectory*
const trajectory_data) {
134 trajectory_data->clear();
136 trajectory_optimizer_->GetOptimizedTrajectory(
142void OpenSpaceTrajectoryOptimizerPark::ReuseLastFrameDebug(
143 const Frame* last_frame) {
146 ptr_debug->mutable_planning_data()->mutable_open_space()->MergeFrom(
147 last_frame->open_space_info()
151 ptr_debug->mutable_planning_data()->mutable_open_space()->clear_obstacles();
153 for (
const auto& obstacle_vertices :
154 frame_->open_space_info().obstacles_vertices_vec()) {
155 auto* obstacle_ptr = ptr_debug->mutable_planning_data()->
156 mutable_open_space()->add_obstacles();
157 for (
const auto& vertex : obstacle_vertices) {
158 obstacle_ptr->add_vertices_x_coords(vertex.x());
159 obstacle_ptr->add_vertices_y_coords(vertex.y());
A general class to denote the return status of an API call.
static Status OK()
generate a success status.
const OpenSpaceInfo & open_space_info() const
OpenSpaceInfo * mutable_open_space_info()
apollo::planning_internal::Debug * mutable_debug_instance()
void sync_debug_instance()
void set_open_space_provider_success(const bool flag)
DiscretizedTrajectory * mutable_optimizer_trajectory_data()
const DiscretizedTrajectory & path_planning_trajectory_result() const
apollo::planning_internal::Debug * mutable_debug()
~OpenSpaceTrajectoryOptimizerPark()
bool Init(const std::string &config_dir, const std::string &name, const std::shared_ptr< DependencyInjector > &injector) override
std::shared_ptr< DependencyInjector > injector_
virtual bool Init(const std::string &config_dir, const std::string &name, const std::shared_ptr< DependencyInjector > &injector)
Planning module main class.
optional bool enable_trajectory_optimize_thread