42 if (!ControlTask::LoadConfig<ReplanTaskConf>(&replan_task_conf_)) {
43 AERROR <<
"Failed to replan control task config";
44 return Status(ErrorCode::CONTROL_INIT_ERROR,
"Failed to load replan control task conf");
48 safety_decision_reader_config.
channel_name = replan_task_conf_.guardian_decision_topic();
49 safety_decision_reader_config.
pending_queue_size = replan_task_conf_.guardian_decision_msg_pending_queue_size();
51 safety_decision_reader_ = node_->CreateReader<
SafetyDecision>(safety_decision_reader_config,
nullptr);
67 auto replan_debug_info =
injector_->mutable_control_debug_info()->mutable_replan_debug();
68 replan_debug_info->set_control_task_name(name_);
69 replan_debug_info->set_trajectory_replan(planning_published_trajectory->
is_replan());
71 bool replan_request =
false;
73 std::string replan_request_reason =
"";
74 if (safety_decision_reader_ !=
nullptr) {
75 ADEBUG <<
"Received safety decision data.";
77 safety_decision_reader_->Observe();
78 const auto &safety_decision_msg = safety_decision_reader_->GetLatestObserved();
79 if (safety_decision_msg ==
nullptr) {
80 AERROR <<
"safety decision msg is not ready!";
82 ADEBUG <<
"safety_decision_msg is " << safety_decision_msg->ShortDebugString();
83 OnSafetyDecision(safety_decision_msg);
85 if (decision_.has_safety_mode_trigger_time()) {
86 ADEBUG <<
"Safety mode triggered, need to replan.";
87 replan_request =
true;
89 replan_request_reason =
"Safety function mode triggered, need to replan.";
92 AERROR <<
"safety decision reader is not ready!";
96 ADEBUG <<
"chassis safety triggered, need to replan.";
97 replan_request =
true;
99 replan_request_reason =
"Chassis safety mode triggered, need to replan.";
102 auto control_interactive_info =
injector_->mutable_control_interactive_info();
103 control_interactive_info->set_replan_request(replan_request);
105 if (replan_request) {
106 control_interactive_info->set_replan_req_reason_code(replan_req_reason_code);
107 control_interactive_info->set_replan_request_reason(replan_request_reason);
110 control_interactive_info->set_replan_request_reason(
"No triggered, do not need to replan");
113 replan_debug_info->set_is_need_replan(replan_request);
common::Status ComputeControlCommand(const localization::LocalizationEstimate *localization, const canbus::Chassis *chassis, const planning::ADCTrajectory *trajectory, control::ControlCommand *cmd) override
compute brake / throttle values based on current vehicle status and target trajectory