Apollo 9.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 第 95 行定义.

95 {
96 if (reference_line_provider_) {
97 reference_line_provider_->Stop();
98 }
99 planner_->Stop();
100 injector_->frame_history()->Clear();
101 injector_->history()->Clear();
102 injector_->planning_context()->mutable_planning_status()->Clear();
103 last_command_.Clear();
104 injector_->ego_info()->Clear();
105}
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 第 109 行定义.

109 {
110 if (!CheckPlanningConfig(config)) {
111 return Status(ErrorCode::PLANNING_ERROR,
112 "planning config error: " + config.DebugString());
113 }
114
115 PlanningBase::Init(config);
116
117 // clear planning history
118 injector_->history()->Clear();
119
120 // clear planning status
121 injector_->planning_context()->mutable_planning_status()->Clear();
122
123 // load map
125 ACHECK(hdmap_) << "Failed to load map";
126
127 // instantiate reference line provider
128 const ReferenceLineConfig* reference_line_config = nullptr;
129 if (config_.has_reference_line_config()) {
130 reference_line_config = &config_.reference_line_config();
131 }
132 reference_line_provider_ = std::make_unique<ReferenceLineProvider>(
133 injector_->vehicle_state(), reference_line_config);
134 reference_line_provider_->Start();
135
136 // dispatch planner
137 LoadPlanner();
138 if (!planner_) {
139 return Status(
140 ErrorCode::PLANNING_ERROR,
141 "planning is not initialized with config : " + config_.DebugString());
142 }
143
145 PlanningSemanticMapConfig renderer_config;
147 FLAGS_planning_birdview_img_feature_renderer_config_file,
148 &renderer_config))
149 << "Failed to load renderer config"
150 << FLAGS_planning_birdview_img_feature_renderer_config_file;
151
152 BirdviewImgFeatureRenderer::Instance()->Init(renderer_config);
153 }
154
156
158 return planner_->Init(injector_, FLAGS_planner_config_path);
159}
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 第 107 行定义.

107{ 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 第 527 行定义.

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

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

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