Apollo: Question: re-create reference_line_provider_

Created on 9 Jul 2018  ·  4Comments  ·  Source: ApolloAuto/apollo

HI Apollo Team,

我在學習Planning Source Code 中有個疑問,
關於eference_line_provider_ 在Init() 產生後, 每一段時間會在RunOnce()中重新產生新的reference_line_provider_

我的疑問是在Start()中, 對reference_line_provider_ ->Start()呼叫了這個Function 產生Thread出來工作
但又在之後的RunOnce()中產生新的reference_line_provider_, 如此舊的reference_line_provider_就被release了, 而新的reference_line_provider_也沒呼叫Start()

這樣的程序流程是正確的嗎?

謝謝

Planning Question

All 4 comments

Status Planning::Start() {
timer_ = AdapterManager::CreateTimer(
ros::Duration(1.0 / FLAGS_planning_loop_rate), &Planning::OnTimer, this);
// The "reference_line_provider_" may not be created yet in navigation mode.
// It is necessary to check its existence.
if (reference_line_provider_) {
reference_line_provider_->Start();
}
start_time_ = Clock::NowInSeconds();
AINFO << "Planning started";
return Status::OK();
}

  1. 创建定时器,之后调用RunOnce做相关planning规划工作,包括reference_line_provider_赋值等
  2. 如果reference_line_provider_ 不为null,启动reference_line_provider_ -Start(),理解为伴随planning进程的整个生命周期,获取启动参考线信息的获取

HI @douqian

整個流程為 Planning::Init() -> Planning::Start() -> spin()
所以整個Planning 的生命週期中
(A)reference_line_provider_->Start() 只會執行一次並產生ReferenceLineProvider::GenerateThread

我的困惑就是在於OnTimer() 中的RunOnce()內會一直重新產生新的(B)reference_line_provider_並呼叫(A)reference_line_provider_ 的destructor, 如此(A)reference_line_provider_ 的GenerateThread消失了
而(B)reference_line_provider_也沒機會產生GenerateThread

在學習的過程中對這段的不解這段設計的核心意義, 因為GenerateThread只存在非常短暫的時間

謝謝

RunOnce()中,在navigation mode的情况下会reference_line_provider_ = std::make_unique(hdmap_);, 非navigation mode在init()中创建。
navigation mode会实时生成基于车身坐标系的地图(使用以车辆当前位置为原点的相对坐标系)供planning使用。

if (FLAGS_use_navigation_mode) {
// recreate reference line provider in every cycle
hdmap_ = HDMapUtil::BaseMapPtr();
// Prefer "std::make_unique" to direct use of "new".
// Reference "https://herbsutter.com/gotw/_102/" for details.
reference_line_provider_ = std::make_unique(hdmap_);
}

Hi @douqian, 謝謝您的說明

Was this page helpful?
0 / 5 - 0 ratings