Apollo 11.0
自动驾驶开放平台
apollo::planning::OnLanePlanning类 参考

#include <on_lane_planning.h>

类 apollo::planning::OnLanePlanning 继承关系图:
apollo::planning::OnLanePlanning 的协作图:

Public 成员函数

 OnLanePlanning (const std::shared_ptr< DependencyInjector > &injector)
 
virtual ~OnLanePlanning ()
 
std::string Name () const override
 Planning name.
 
common::Status Init (const PlanningConfig &config) override
 module initialization function
 
void RunOnce (const LocalView &local_view, ADCTrajectory *const ptr_trajectory_pb) override
 main logic of the planning module, runs periodically triggered by timer.
 
common::Status Plan (const double current_time_stamp, const std::vector< common::TrajectoryPoint > &stitching_trajectory, ADCTrajectory *const trajectory) override
 Plan the trajectory given current vehicle state
 
- Public 成员函数 继承自 apollo::planning::PlanningBase
 PlanningBase ()=delete
 
 PlanningBase (const std::shared_ptr< DependencyInjector > &injector)
 
virtual ~PlanningBase ()
 
bool IsPlanningFinished (const ADCTrajectory::TrajectoryType &current_trajectory_type) const
 Check if vehicle reaches the end point of the RoutingRequest.
 
bool GenerateWidthOfLane (const Vec2d &current_location, Vec2d &left_point, Vec2d &right_point)
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::planning::PlanningBase
virtual void FillPlanningPb (const double timestamp, ADCTrajectory *const trajectory_pb)
 
void LoadPlanner ()
 
- Protected 属性 继承自 apollo::planning::PlanningBase
LocalView local_view_
 
const hdmap::HDMap * hdmap_ = nullptr
 
double start_time_ = 0.0
 
size_t seq_num_ = 0
 
PlanningConfig config_
 
TrafficDecider traffic_decider_
 
std::unique_ptr< Frame > frame_
 
std::shared_ptr< Planner > planner_
 
std::unique_ptr< PublishableTrajectory > last_publishable_trajectory_
 
std::shared_ptr< DependencyInjector > injector_
 

详细描述

在文件 on_lane_planning.h 第 39 行定义.

构造及析构函数说明

◆ OnLanePlanning()

apollo::planning::OnLanePlanning::OnLanePlanning ( const std::shared_ptr< DependencyInjector > &  injector)
inlineexplicit

在文件 on_lane_planning.h 第 41 行定义.

42 : PlanningBase(injector) {}

◆ ~OnLanePlanning()

apollo::planning::OnLanePlanning::~OnLanePlanning ( )
virtual

在文件 on_lane_planning.cc 第 96 行定义.

96 {
97 if (reference_line_provider_) {
98 reference_line_provider_->Stop();
99 }
100 planner_->Stop();
101 injector_->frame_history()->Clear();
102 injector_->history()->Clear();
103 injector_->planning_context()->mutable_planning_status()->Clear();
104 last_command_.Clear();
105 injector_->ego_info()->Clear();
106}
std::shared_ptr< Planner > planner_
std::shared_ptr< DependencyInjector > injector_

成员函数说明

◆ Init()

Status apollo::planning::OnLanePlanning::Init ( const PlanningConfig &  config)
overridevirtual

module initialization function

返回
initialization status

重载 apollo::planning::PlanningBase .

在文件 on_lane_planning.cc 第 110 行定义.

110 {
111 if (!CheckPlanningConfig(config)) {
112 return Status(ErrorCode::PLANNING_ERROR,
113 "planning config error: " + config.DebugString());
114 }
115
116 PlanningBase::Init(config);
117
118 // clear planning history
119 injector_->history()->Clear();
120
121 // clear planning status
122 injector_->planning_context()->mutable_planning_status()->Clear();
123
124 // load map
126 ACHECK(hdmap_) << "Failed to load map";
127
128 // instantiate reference line provider
129 const ReferenceLineConfig* reference_line_config = nullptr;
130 if (config_.has_reference_line_config()) {
131 reference_line_config = &config_.reference_line_config();
132 }
133 reference_line_provider_ = std::make_unique<ReferenceLineProvider>(
134 injector_->vehicle_state(), reference_line_config);
135 reference_line_provider_->Start();
136
137 // dispatch planner
138 LoadPlanner();
139 if (!planner_) {
140 return Status(
141 ErrorCode::PLANNING_ERROR,
142 "planning is not initialized with config : " + config_.DebugString());
143 }
144
146 PlanningSemanticMapConfig renderer_config;
148 FLAGS_planning_birdview_img_feature_renderer_config_file,
149 &renderer_config))
150 << "Failed to load renderer config"
151 << FLAGS_planning_birdview_img_feature_renderer_config_file;
152
153 BirdviewImgFeatureRenderer::Instance()->Init(renderer_config);
154 }
155
157
159 return planner_->Init(injector_, FLAGS_planner_config_path);
160}
static double NowInSeconds()
gets the current time in second.
Definition clock.cc:56
static const HDMap * BaseMapPtr()
virtual apollo::common::Status Init(const PlanningConfig &config)
const hdmap::HDMap * hdmap_
bool Init(const std::shared_ptr< DependencyInjector > &injector)
#define ACHECK(cond)
Definition log.h:80
bool GetProtoFromFile(const std::string &file_name, google::protobuf::Message *message)
Parses the content of the file specified by the file_name as a representation of protobufs,...
Definition file.cc:132
optional ReferenceLineConfig reference_line_config
optional PlanningLearningMode learning_mode

◆ Name()

std::string apollo::planning::OnLanePlanning::Name ( ) const
overridevirtual

Planning name.

实现了 apollo::planning::PlanningBase.

在文件 on_lane_planning.cc 第 108 行定义.

108{ return "on_lane_planning"; }

◆ Plan()

Status apollo::planning::OnLanePlanning::Plan ( const double  current_time_stamp,
const std::vector< common::TrajectoryPoint > &  stitching_trajectory,
ADCTrajectory *const  trajectory 
)
overridevirtual

Plan the trajectory given current vehicle state

实现了 apollo::planning::PlanningBase.

在文件 on_lane_planning.cc 第 528 行定义.

531 {
532 auto* ptr_debug = ptr_trajectory_pb->mutable_debug();
533 if (FLAGS_enable_record_debug) {
534 ptr_debug->mutable_planning_data()->mutable_init_point()->CopyFrom(
535 stitching_trajectory.back());
536 frame_->mutable_open_space_info()->set_debug(ptr_debug);
537 frame_->mutable_open_space_info()->sync_debug_instance();
538 }
539
540 auto status = planner_->Plan(stitching_trajectory.back(), frame_.get(),
541 ptr_trajectory_pb);
542
543 if (frame_->open_space_info().is_on_open_space_trajectory()) {
544 frame_->mutable_open_space_info()->sync_debug_instance();
545 const auto& publishable_trajectory =
546 frame_->open_space_info().publishable_trajectory_data().first;
547 const auto& publishable_trajectory_gear =
548 frame_->open_space_info().publishable_trajectory_data().second;
549 const auto& trajectory_type = frame_->open_space_info().trajectory_type();
550 const auto& is_collision = frame_->open_space_info().is_collision();
551 publishable_trajectory.PopulateTrajectoryProtobuf(ptr_trajectory_pb);
552 ptr_trajectory_pb->set_gear(publishable_trajectory_gear);
553 ptr_trajectory_pb->set_trajectory_type(trajectory_type);
554 ptr_trajectory_pb->set_is_collision(is_collision);
555 // TODO(QiL): refine engage advice in open space trajectory optimizer.
556 auto* engage_advice = ptr_trajectory_pb->mutable_engage_advice();
557
558 // enable start auto from open_space planner.
559 if (injector_->vehicle_state()->vehicle_state().driving_mode() !=
560 Chassis::DrivingMode::Chassis_DrivingMode_COMPLETE_AUTO_DRIVE) {
561 engage_advice->set_advice(EngageAdvice::READY_TO_ENGAGE);
562 engage_advice->set_reason(
563 "Ready to engage when staring with OPEN_SPACE_PLANNER");
564 } else {
565 engage_advice->set_advice(EngageAdvice::KEEP_ENGAGED);
566 engage_advice->set_reason("Keep engage while in parking");
567 }
568 // TODO(QiL): refine the export decision in open space info
569 ptr_trajectory_pb->mutable_decision()
570 ->mutable_main_decision()
571 ->mutable_parking()
572 ->set_status(MainParking::IN_PARKING);
573
574 if (FLAGS_enable_record_debug) {
575 // ptr_debug->MergeFrom(frame_->open_space_info().debug_instance());
576 frame_->mutable_open_space_info()->RecordDebug(ptr_debug);
577 ADEBUG << "Open space debug information added!";
578 // call open space info load debug
579 // TODO(Runxin): create a new flag to enable openspace chart
580 ExportOpenSpaceChart(ptr_trajectory_pb->debug(), *ptr_trajectory_pb,
581 ptr_debug);
582 }
583 } else {
584 const auto* best_ref_info = frame_->FindDriveReferenceLineInfo();
585 const auto* target_ref_info = frame_->FindTargetReferenceLineInfo();
586 if (!best_ref_info) {
587 const std::string msg = "planner failed to make a driving plan";
588 AERROR << msg;
591 }
592 return Status(ErrorCode::PLANNING_ERROR, msg);
593 }
594 // Store current frame stitched path for possible speed fallback in next
595 // frames
596 DiscretizedPath current_frame_planned_path;
597 for (const auto& trajectory_point : stitching_trajectory) {
598 current_frame_planned_path.push_back(trajectory_point.path_point());
599 }
600 const auto& best_ref_path = best_ref_info->path_data().discretized_path();
601 std::copy(best_ref_path.begin() + 1, best_ref_path.end(),
602 std::back_inserter(current_frame_planned_path));
603 frame_->set_current_frame_planned_path(current_frame_planned_path);
604
605 ptr_debug->MergeFrom(best_ref_info->debug());
606 if (FLAGS_export_chart) {
607 ExportOnLaneChart(best_ref_info->debug(), ptr_debug);
608 } else {
609 ExportReferenceLineDebug(ptr_debug);
610 // Export additional ST-chart for failed lane-change speed planning
611 const auto* failed_ref_info = frame_->FindFailedReferenceLineInfo();
612 if (failed_ref_info) {
613 ExportFailedLaneChangeSTChart(failed_ref_info->debug(), ptr_debug);
614 }
615 }
616 ptr_trajectory_pb->mutable_latency_stats()->MergeFrom(
617 best_ref_info->latency_stats());
618 // set right of way status
619 ptr_trajectory_pb->set_right_of_way_status(
620 best_ref_info->GetRightOfWayStatus());
621
622 for (const auto& id : best_ref_info->TargetLaneId()) {
623 ptr_trajectory_pb->add_lane_id()->CopyFrom(id);
624 }
625
626 for (const auto& id : target_ref_info->TargetLaneId()) {
627 ptr_trajectory_pb->add_target_lane_id()->CopyFrom(id);
628 }
629
630 ptr_trajectory_pb->set_trajectory_type(best_ref_info->trajectory_type());
631
632 if (FLAGS_enable_rss_info) {
633 *ptr_trajectory_pb->mutable_rss_info() = best_ref_info->rss_info();
634 }
635
636 best_ref_info->ExportDecision(ptr_trajectory_pb->mutable_decision(),
637 injector_->planning_context());
638
639 // Add debug information.
640 if (FLAGS_enable_record_debug) {
641 auto* reference_line = ptr_debug->mutable_planning_data()->add_path();
642 reference_line->set_name("planning_reference_line");
643 const auto& reference_points =
644 best_ref_info->reference_line().reference_points();
645 double s = 0.0;
646 double prev_x = 0.0;
647 double prev_y = 0.0;
648 bool empty_path = true;
649 for (const auto& reference_point : reference_points) {
650 auto* path_point = reference_line->add_path_point();
651 path_point->set_x(reference_point.x());
652 path_point->set_y(reference_point.y());
653 path_point->set_theta(reference_point.heading());
654 path_point->set_kappa(reference_point.kappa());
655 path_point->set_dkappa(reference_point.dkappa());
656 if (empty_path) {
657 path_point->set_s(0.0);
658 empty_path = false;
659 } else {
660 double dx = reference_point.x() - prev_x;
661 double dy = reference_point.y() - prev_y;
662 s += std::hypot(dx, dy);
663 path_point->set_s(s);
664 }
665 prev_x = reference_point.x();
666 prev_y = reference_point.y();
667 }
668 }
669
670 last_publishable_trajectory_.reset(new PublishableTrajectory(
671 current_time_stamp, best_ref_info->trajectory()));
672 PrintCurves debug_traj;
673 for (size_t i = 0; i < last_publishable_trajectory_->size(); i++) {
674 auto& traj_pt = last_publishable_trajectory_->at(i);
675 debug_traj.AddPoint("traj_sv", traj_pt.path_point().s(), traj_pt.v());
676 debug_traj.AddPoint("traj_sa", traj_pt.path_point().s(), traj_pt.a());
677 debug_traj.AddPoint("traj_sk", traj_pt.path_point().s(),
678 traj_pt.path_point().kappa());
679 }
680 // debug_traj.PrintToLog();
681 ADEBUG << "current_time_stamp: " << current_time_stamp;
682
683 last_publishable_trajectory_->PrependTrajectoryPoints(
684 std::vector<TrajectoryPoint>(stitching_trajectory.begin(),
685 stitching_trajectory.end() - 1));
686
687 last_publishable_trajectory_->PopulateTrajectoryProtobuf(ptr_trajectory_pb);
688
689 best_ref_info->ExportEngageAdvice(
690 ptr_trajectory_pb->mutable_engage_advice(),
691 injector_->planning_context());
692 }
693
694 AddADCDrivingStateInfo(ptr_debug);
695
696 return status;
697}
std::unique_ptr< Frame > frame_
std::unique_ptr< PublishableTrajectory > last_publishable_trajectory_
#define ADEBUG
Definition log.h:41
#define AERROR
Definition log.h:44

◆ RunOnce()

void apollo::planning::OnLanePlanning::RunOnce ( const LocalView &  local_view,
ADCTrajectory *const  ptr_trajectory_pb 
)
overridevirtual

main logic of the planning module, runs periodically triggered by timer.

实现了 apollo::planning::PlanningBase.

在文件 on_lane_planning.cc 第 232 行定义.

233 {
234 // when rerouting, reference line might not be updated. In this case, planning
235 // module maintains not-ready until be restarted.
237 const double start_timestamp = Clock::NowInSeconds();
238 const double start_system_timestamp =
239 std::chrono::duration<double>(
240 std::chrono::system_clock::now().time_since_epoch())
241 .count();
242
243 // localization
244 ADEBUG << "Get localization:"
245 << local_view_.localization_estimate->DebugString();
246
247 // chassis
248 ADEBUG << "Get chassis:" << local_view_.chassis->DebugString();
249
250 Status status = injector_->vehicle_state()->Update(
252
253 VehicleState vehicle_state = injector_->vehicle_state()->vehicle_state();
254 const double vehicle_state_timestamp = vehicle_state.timestamp();
255 DCHECK_GE(start_timestamp, vehicle_state_timestamp)
256 << "start_timestamp is behind vehicle_state_timestamp by "
257 << start_timestamp - vehicle_state_timestamp << " secs";
258
259 if (!status.ok() || !util::IsVehicleStateValid(vehicle_state)) {
260 const std::string msg =
261 "Update VehicleStateProvider failed "
262 "or the vehicle state is out dated.";
263 AERROR << msg;
264 ptr_trajectory_pb->mutable_decision()
265 ->mutable_main_decision()
266 ->mutable_not_ready()
267 ->set_reason(msg);
268 status.Save(ptr_trajectory_pb->mutable_header()->mutable_status());
269 // TODO(all): integrate reverse gear
270 ptr_trajectory_pb->set_gear(canbus::Chassis::GEAR_DRIVE);
271 FillPlanningPb(start_timestamp, ptr_trajectory_pb);
272 GenerateStopTrajectory(ptr_trajectory_pb);
273 return;
274 }
275
276 if (start_timestamp + 1e-6 < vehicle_state_timestamp) {
277 common::monitor::MonitorLogBuffer monitor_logger_buffer(
279 monitor_logger_buffer.ERROR("ego system time is behind GPS time");
280 }
281
282 if (start_timestamp - vehicle_state_timestamp <
283 FLAGS_message_latency_threshold) {
284 vehicle_state = AlignTimeStamp(vehicle_state, start_timestamp);
285 }
286
287 // Update reference line provider and reset scenario if new routing
288 reference_line_provider_->UpdateVehicleState(vehicle_state);
289 if (local_view_.planning_command->is_motion_command() &&
291 last_command_ = *local_view_.planning_command;
292 // AINFO << "new_command:" << last_command_.DebugString();
293 reference_line_provider_->Reset();
294 injector_->history()->Clear();
295 injector_->planning_context()->mutable_planning_status()->Clear();
296 reference_line_provider_->UpdatePlanningCommand(
298 planner_->Reset(frame_.get());
299 }
300 // Get end lane way point.
301 reference_line_provider_->GetEndLaneWayPoint(local_view_.end_lane_way_point);
302
303 // planning is triggered by prediction data, but we can still use an estimated
304 // cycle time for stitching
305 const double planning_cycle_time =
306 1.0 / static_cast<double>(FLAGS_planning_loop_rate);
307
308 std::string replan_reason;
309 std::vector<TrajectoryPoint> stitching_trajectory =
311 *(local_view_.chassis), vehicle_state, start_timestamp,
312 planning_cycle_time, FLAGS_trajectory_stitching_preserved_length,
313 true, last_publishable_trajectory_.get(), &replan_reason,
315
316 injector_->ego_info()->Update(stitching_trajectory.back(), vehicle_state);
317 const uint32_t frame_num = static_cast<uint32_t>(seq_num_++);
318 AINFO << "Planning start frame sequence id = [" << frame_num << "]";
319 status = InitFrame(frame_num, stitching_trajectory.back(), vehicle_state);
320 if (status.ok()) {
321 injector_->ego_info()->CalculateFrontObstacleClearDistance(
322 frame_->obstacles());
323 injector_->ego_info()->CalculateCurrentRouteInfo(
324 reference_line_provider_.get());
325 }
326
327 if (FLAGS_enable_record_debug) {
328 frame_->RecordInputDebug(ptr_trajectory_pb->mutable_debug());
329 }
330 ptr_trajectory_pb->mutable_latency_stats()->set_init_frame_time_ms(
331 Clock::NowInSeconds() - start_timestamp);
332
333 if (!status.ok()) {
334 AERROR << status.ToString();
335 if (FLAGS_publish_estop) {
336 // "estop" signal check in function "Control::ProduceControlCommand()"
337 // estop_ = estop_ || local_view_.trajectory.estop().is_estop();
338 // we should add more information to ensure the estop being triggered.
339 ADCTrajectory estop_trajectory;
340 EStop* estop = estop_trajectory.mutable_estop();
341 estop->set_is_estop(true);
342 estop->set_reason(status.error_message());
343 status.Save(estop_trajectory.mutable_header()->mutable_status());
344 ptr_trajectory_pb->CopyFrom(estop_trajectory);
345 } else {
346 ptr_trajectory_pb->mutable_decision()
347 ->mutable_main_decision()
348 ->mutable_not_ready()
349 ->set_reason(status.ToString());
350 status.Save(ptr_trajectory_pb->mutable_header()->mutable_status());
351 GenerateStopTrajectory(ptr_trajectory_pb);
352 }
353 // TODO(all): integrate reverse gear
354 ptr_trajectory_pb->set_gear(canbus::Chassis::GEAR_DRIVE);
355 FillPlanningPb(start_timestamp, ptr_trajectory_pb);
356 frame_->set_current_frame_planned_trajectory(*ptr_trajectory_pb);
357 const uint32_t n = frame_->SequenceNum();
358 injector_->frame_history()->Add(n, std::move(frame_));
359 return;
360 }
361
362 for (auto& ref_line_info : *frame_->mutable_reference_line_info()) {
363 auto traffic_status =
364 traffic_decider_.Execute(frame_.get(), &ref_line_info);
365 if (!traffic_status.ok() || !ref_line_info.IsDrivable()) {
366 ref_line_info.SetDrivable(false);
367 AWARN << "Reference line " << ref_line_info.Lanes().Id()
368 << " traffic decider failed";
369 }
370 }
371
372 status = Plan(start_timestamp, stitching_trajectory, ptr_trajectory_pb);
373
374 // print trajxy
375 PrintCurves trajectory_print_curve;
376 for (const auto& p : ptr_trajectory_pb->trajectory_point()) {
377 trajectory_print_curve.AddPoint("trajxy", p.path_point().x(),
378 p.path_point().y());
379 }
380 trajectory_print_curve.PrintToLog();
381
382 // print obstacle polygon
383 for (const auto& obstacle : frame_->obstacles()) {
384 obstacle->PrintPolygonCurve();
385 }
386 // print ego box
387 PrintBox print_box("ego_box");
388 print_box.AddAdcBox(vehicle_state.x(), vehicle_state.y(),
389 vehicle_state.heading(), true);
390 print_box.PrintToLog();
391
392 const auto end_system_timestamp =
393 std::chrono::duration<double>(
394 std::chrono::system_clock::now().time_since_epoch())
395 .count();
396 const auto time_diff_ms =
397 (end_system_timestamp - start_system_timestamp) * 1000;
398 ADEBUG << "total planning time spend: " << time_diff_ms << " ms.";
399
400 ptr_trajectory_pb->mutable_latency_stats()->set_total_time_ms(time_diff_ms);
401 ADEBUG << "Planning latency: "
402 << ptr_trajectory_pb->latency_stats().DebugString();
403
404 if (!status.ok()) {
405 status.Save(ptr_trajectory_pb->mutable_header()->mutable_status());
406 AERROR << "Planning failed:" << status.ToString();
407 if (FLAGS_publish_estop) {
408 AERROR << "Planning failed and set estop";
409 // "estop" signal check in function "Control::ProduceControlCommand()"
410 // estop_ = estop_ || local_view_.trajectory.estop().is_estop();
411 // we should add more information to ensure the estop being triggered.
412 EStop* estop = ptr_trajectory_pb->mutable_estop();
413 estop->set_is_estop(true);
414 estop->set_reason(status.error_message());
415 }
416 }
417
418 ptr_trajectory_pb->set_is_replan(stitching_trajectory.size() == 1);
419 if (ptr_trajectory_pb->is_replan()) {
420 ptr_trajectory_pb->set_replan_reason(replan_reason);
421 }
422
423 if (frame_->open_space_info().is_on_open_space_trajectory()) {
424 FillPlanningPb(start_timestamp, ptr_trajectory_pb);
425 ADEBUG << "Planning pb:" << ptr_trajectory_pb->header().DebugString();
426 frame_->set_current_frame_planned_trajectory(*ptr_trajectory_pb);
427 } else {
428 auto* ref_line_task =
429 ptr_trajectory_pb->mutable_latency_stats()->add_task_stats();
430 ref_line_task->set_time_ms(reference_line_provider_->LastTimeDelay() *
431 1000.0);
432 ref_line_task->set_name("ReferenceLineProvider");
433
434 FillPlanningPb(start_timestamp, ptr_trajectory_pb);
435 ADEBUG << "Planning pb:" << ptr_trajectory_pb->header().DebugString();
436
437 frame_->set_current_frame_planned_trajectory(*ptr_trajectory_pb);
438 if (FLAGS_enable_planning_smoother) {
439 planning_smoother_.Smooth(injector_->frame_history(), frame_.get(),
440 ptr_trajectory_pb);
441 }
442 }
443
444 const auto end_planning_perf_timestamp =
445 std::chrono::duration<double>(
446 std::chrono::system_clock::now().time_since_epoch())
447 .count();
448 const auto plnning_perf_ms =
449 (end_planning_perf_timestamp - start_system_timestamp) * 1000;
450 AINFO << "Planning Perf: planning name [" << Name() << "], "
451 << plnning_perf_ms << " ms.";
452 AINFO << "Planning end frame sequence id = [" << frame_num << "]";
453 injector_->frame_history()->Add(frame_num, std::move(frame_));
454}
common::Status Plan(const double current_time_stamp, const std::vector< common::TrajectoryPoint > &stitching_trajectory, ADCTrajectory *const trajectory) override
Plan the trajectory given current vehicle state
std::string Name() const override
Planning name.
virtual void FillPlanningPb(const double timestamp, ADCTrajectory *const trajectory_pb)
apollo::common::Status Smooth(const FrameHistory *frame_history, const Frame *current_frame, ADCTrajectory *const current_trajectory_pb)
Definition smoother.cc:55
apollo::common::Status Execute(Frame *frame, ReferenceLineInfo *reference_line_info)
static std::vector< common::TrajectoryPoint > ComputeStitchingTrajectory(const canbus::Chassis &vehicle_chassis, const common::VehicleState &vehicle_state, const double current_timestamp, const double planning_cycle_time, const size_t preserved_points_num, const bool replan_by_offset, const PublishableTrajectory *prev_trajectory, std::string *replan_reason, const control::ControlInteractiveMsg &control_interactive_msg)
#define AINFO
Definition log.h:42
#define AWARN
Definition log.h:43
bool IsVehicleStateValid(const VehicleState &vehicle_state)
Definition util.cc:35
bool IsDifferentRouting(const PlanningCommand &first, const PlanningCommand &second)
Definition util.cc:46
std::shared_ptr< routing::LaneWaypoint > end_lane_way_point
Definition local_view.h:49
std::shared_ptr< localization::LocalizationEstimate > localization_estimate
Definition local_view.h:43
std::shared_ptr< PlanningCommand > planning_command
Definition local_view.h:48
std::shared_ptr< control::ControlInteractiveMsg > control_interactive_msg
Definition local_view.h:50
std::shared_ptr< canbus::Chassis > chassis
Definition local_view.h:42
LocalView contains all necessary data as planning input

该类的文档由以下文件生成: