Apollo決策規劃planning模組簡要分析

2021-10-03 06:08:38 字數 3029 閱讀 8101

planning模組的初始化見planning::init()(apollo/modules/planning/planning.cc)。

planning模組的業務邏輯見planning::runonce()(apollo/modules/planning/planning.cc),該函式每隔一段時間執行一次(100ms?),由定時器planning::ontimer定時呼叫。

定時任務planning::runonce()大體步驟如下:

計算拼接軌跡trajectorystitcher::computestitchingtrajectory根據拼接軌跡進行決策planning::plan()

決策planning::plan()大體步驟:

apollo::planning::planner

apollo::planning::emplanner

apollo::planning::latticeplanner

apollo::planning::rtkreplayplanner

子模組planner的基類是planner類,其包括3個具體實現類(如上)。planner會載入若干task,如以emplanner為例,主要載入decideroptimizer兩類:

優化器optimizer

emplanner::plan()方法中會呼叫emplanner::planonreferenceline(),然後這些註冊了的tasks均會被執行,各task負責各自業務。比如***olypathoptimizer通過動態規劃來進行路徑規劃。

apollo::planning::task

apollo::planning::pathdecider

apollo::planning::pathoptimizer

apollo::planning::***olypathoptimizer

apollo::planning::qpsplinepathoptimizer

apollo::planning::speeddecider

apollo::planning::speedoptimizer

apollo::planning::dpstspeedoptimizer

apollo::planning::polystspeedoptimizer

apollo::planning::qpsplinestspeedoptimizer

apollo::planning::trafficdecider

***olypathoptimizer為例,***olypathoptimizer類繼承自pathoptimizer類,pathoptimizer::execute()方法中呼叫pathoptimizer::process()虛方法,***olypathoptimizer::process()方法具體實現如下:

status ***olypathoptimizer::process(const speeddata &speed_data,

const referenceline &,

const common::trajectorypoint &init_point,

pathdata *const path_data)

check_notnull(path_data);

dproadgraph dp_road_graph(config_, *reference_line_info_, speed_data);

dp_road_graph.setdebuglogger(reference_line_info_->mutable_debug());

if (!dp_road_graph.findpathtunnel(

init_point,

reference_line_info_->path_decision()->path_obstacles().items(),

path_data))

return status::ok();

}bool dproadgraph::findpathtunnel(

const common::trajectorypoint &init_point,

const std::vector&obstacles,

pathdata *const path_data) ,

&init_sl_point_))

if (!calculatefrenetpoint(init_point_, &init_frenet_frame_point_))

std::vectormin_cost_path;

if (!generatemincostpath(obstacles, &min_cost_path))

std::vectorfrenet_path;

double accumulated_s = init_sl_point_.s();

const double path_resolution = config_.path_resolution();

for (std::size_t i = 1; i < min_cost_path.size(); ++i)

if (i == min_cost_path.size() - 1) else

} frenetframepath tunnel(frenet_path);

path_data->setreferenceline(&reference_line_);

path_data->setfrenetpath(tunnel);

return true;

}

這就是Apollo 5 規劃

這個問題怎麼解答呢,為什麼要規劃,就好像開車的時候要知道怎麼才能去到目的地,這是駕駛過程中所必須要進行的行為。無人車也是如此 apollo通過搜尋來查詢路線,但它使用了更智慧型的搜尋演算法。在進行智慧型搜尋演算法以前,我們需要將地圖資料重新格式化為 圖形 的資料結構。該圖形由 節點 node 和 邊...

第五章 百度Apollo規劃技術介紹(3)

約束問題的核心有三點 1.目標函式的定義 2.約束。如路網約束 交規 動態約束等 3.約束問題的優化。如動態規劃 二次規劃等 牛頓迭代法 研究導數變化,一階導 二階導 考慮斜率變化率,然後再用binary search去逼近。核心思想 泰勒展開 收斂次數 指數平方,二次收斂 求解全域性最優解 分塊,...

決策單調性的動態規劃 noi2009詩人小G

關於決策單調性在網上有一篇非常好的 1d1d動態規劃優化初步 那麼我們的任務就是證明決策單調性在直接套用模板即可,所謂決策單調性,就是我們要證明這樣乙個命題 如果 f k 的最優決策是j,f k 1 的最優決策是i,ik 使用j轉移都會比使用i轉移優,對於所有f l l k 使用i轉移都會比使用j轉...