137 {
138 ACHECK(prediction_obstacles !=
nullptr);
139
140
141 CheckRerouting();
142
143
147 {
148 std::lock_guard<std::mutex> lock(mutex_);
151 planning_command_.
header())) {
153 std::make_shared<PlanningCommand>(planning_command_);
154 }
155 }
156 {
157 std::lock_guard<std::mutex> lock(mutex_);
159 std::make_shared<TrafficLightDetection>(traffic_light_);
160 local_view_.
relative_map = std::make_shared<MapMsg>(relative_map_);
161 }
162 {
163 std::lock_guard<std::mutex> lock(mutex_);
167
170 planning_command_.Clear();
171 }
172 local_view_.
pad_msg = std::make_shared<PadMessage>(pad_msg_);
173 }
174 }
175 {
176 std::lock_guard<std::mutex> lock(mutex_);
177 local_view_.
stories = std::make_shared<Stories>(stories_);
178 }
179 {
180 std::lock_guard<std::mutex> lock(mutex_);
184 control_interactive_msg_.
header())) {
186 std::make_shared<ControlInteractiveMsg>(control_interactive_msg_);
187 }
188 }
189
190 if (!CheckInput()) {
191 AINFO <<
"Input check failed";
192 return false;
193 }
194
196
202 }
206 }
207
208
210 PlanningLearningData planning_learning_data;
211 LearningDataFrame* learning_data_frame =
212 injector_->learning_based_data()->GetLatestLearningDataFrame();
213 if (learning_data_frame) {
214 planning_learning_data.mutable_learning_data_frame()->CopyFrom(
215 *learning_data_frame);
216 common::util::FillHeader(
node_->Name(), &planning_learning_data);
217 planning_learning_data_writer_->Write(planning_learning_data);
218 } else {
219 AERROR <<
"fail to generate learning data frame";
220 return false;
221 }
222 return true;
223 }
224
225 ADCTrajectory adc_trajectory_pb;
226 planning_base_->RunOnce(local_view_, &adc_trajectory_pb);
227 auto start_time = adc_trajectory_pb.header().timestamp_sec();
228 common::util::FillHeader(
node_->Name(), &adc_trajectory_pb);
229
230 SetLocation(&adc_trajectory_pb);
231
232 const double dt = start_time - adc_trajectory_pb.header().timestamp_sec();
233 for (auto& p : *adc_trajectory_pb.mutable_trajectory_point()) {
234 p.set_relative_time(p.relative_time() + dt);
235 }
236 planning_writer_->Write(adc_trajectory_pb);
237
238
239
240 external_command::CommandStatus command_status;
241 common::util::FillHeader(
node_->Name(), &command_status);
244 }
245
247 adc_trajectory_pb.trajectory_type();
248 if (adc_trajectory_pb.header().status().error_code() !=
251 command_status.set_message(adc_trajectory_pb.header().status().msg());
252 } else if (planning_base_->IsPlanningFinished(current_trajectory_type)) {
253 AINFO <<
"Set the external_command: FINISHED";
255 } else {
256 AINFO <<
"Set the external_command: RUNNING";
258 }
259 command_status_writer_->Write(command_status);
260
261
262 auto* history = injector_->history();
263 history->Add(adc_trajectory_pb);
264
265 return true;
266}
void OnPrediction(const apollo::prediction::PredictionObstacles &prediction_obstacles)
void OnStoryTelling(const apollo::storytelling::Stories &stories)
void OnRoutingResponse(const apollo::routing::RoutingResponse &routing_response)
void OnLocalization(const apollo::localization::LocalizationEstimate &le)
void OnTrafficLightDetection(const apollo::perception::TrafficLightDetection &traffic_light_detection)
void OnChassis(const apollo::canbus::Chassis &chassis)
bool IsProtoEqual(const ProtoA &a, const ProtoB &b)
optional apollo::common::Header header
std::shared_ptr< PadMessage > pad_msg
std::shared_ptr< localization::LocalizationEstimate > localization_estimate
std::shared_ptr< PlanningCommand > planning_command
std::shared_ptr< relative_map::MapMsg > relative_map
std::shared_ptr< control::ControlInteractiveMsg > control_interactive_msg
std::shared_ptr< prediction::PredictionObstacles > prediction_obstacles
std::shared_ptr< storytelling::Stories > stories
std::shared_ptr< canbus::Chassis > chassis
std::shared_ptr< perception::TrafficLightDetection > traffic_light
optional apollo::common::Header header
optional DrivingAction action
optional apollo::common::Header header