请问一下apollo routing模块中Routing Response消息定义内的Passage是什么含义?与真实的道路是什么样的对应关系?
Fibonacci43 opened this issue · comments
Zhu Xiaolong commented
zero commented
@Fibonacci43
事实上,passage是lane的一个集合,向前行驶的lane和下一条lane做了合并,称为一个passage.
如果当前lane是向前,它将会和下一条lane合并为一个passage,如果当前lane是左拐或右拐,那么它和下一条lane会分别当做一个passage。也就是说passage把routing中直行的节点做了合并,对生成路径做了优化。
调用生成passage:
result_generator_->GeneratePassageRegion(
graph_->MapVersion(), request, result_nodes, topo_range_manager_,
response)
具体的实现:
bool ResultGenerator::ExtractBasicPassages(
const std::vector<NodeWithRange>& nodes,
std::vector<PassageInfo>* const passages) {
CHECK(!nodes.empty());
passages->clear();
std::vector<NodeWithRange> nodes_of_passage;
nodes_of_passage.push_back(nodes.at(0));
for (size_t i = 1; i < nodes.size(); ++i) {
auto edge =
nodes.at(i - 1).GetTopoNode()->GetOutEdgeTo(nodes.at(i).GetTopoNode());
...
if (edge->Type() == TET_LEFT || edge->Type() == TET_RIGHT) {
auto change_lane_type = LEFT;
if (edge->Type() == TET_RIGHT) {
change_lane_type = RIGHT;
}
// 1. 如果当前lane是向左或向右拐弯,保存合并到一个passage的lanes,并开启新的passage
passages->emplace_back(nodes_of_passage, change_lane_type);
nodes_of_passage.clear();
}
// 2. 如果当前lane是直行,则合并当前lane为一个passage
nodes_of_passage.push_back(nodes.at(i));
}
passages->emplace_back(nodes_of_passage, FORWARD);
return true;
}