1 背景
前面已经整体介绍了Planning共有三大子模块:Routing,Behavioural Planning以及Motion Planning,虽然三个子模块的称呼在不同的公司有可能不同,但不影响大家理解。其实网上也有很多专业的解读,甚至深入到代码去解释,这可能不是笔者的风格,笔者在梳理/学习知识的时候,更多的是从外到内、从整体架构到细枝末节。如果对一个事物的整体有了一定的认识,再慢慢去了解内部构造是更容易的事情。
因此,针对Planning模块,笔者的写作顺序大概是Routing--->Behavioural Planning--->Motion Planning,同时可能结合实际量产,会对某个子模块内比较重要的小模块再拿出来解读。这次就主要解读Routing模块,依然以Apollo为介质,会结合部分代码(尽量少一些)。
2 Routing模块
2.1 Apollo Routing模块
本质上来说,Routing模块就类似手机上的导航软件,输入起点和终点,就能给你规划出一条最短路径(常用的算法有BFS---广度优先,DFS---深度优先,A*),基本的输入输出如下图所示。
有了高精地图信息,如何去生成参考线呢?主要包括以下两个步骤:
(1)读取base_ma