前言:
后台已经完成Apollo Planning决策规划算法的完整解析,从规划模块的入口OnLanePlanning开始,介绍到常见的规划器PublicRoadPlanner;接着介绍了在PublicRoadPlanner中如何通过类似有限状态机的ScenarioDispatch进行场景决策。之后又介绍了在每个场景Scenario中如何配置以及判断当前所处的stage,以及对于每个stage又是如何注册tasks来执行具体的规划任务。
现在回头来看,这个系列应该是目前全网最完整的apollo规划算法planning模块的解析教程了,所以现在阶段性的,想再对apollo整个规划算法的流程做一个总结,也可以当做是整个系列的文章的概述。
如果对apollo规划算法感兴趣,想学习完整的系列文章,可以订阅下面专栏:https://blog.csdn.net/nn243823163/category_11685852.htmlhttps://blog.csdn.net/nn243823163/category_11685852.html
也可以加我vx公众号(L5Player)进一步交流学习。
Apollo Planning决策规划算法解析的系列文章如下:
Apollo Planning决策规划算法代码详细解析 (1):Scenario选择
Apollo Planning决策规划算法代码详细解析 (2):Scenario执行
Apollo Planning决策规划算法代码详细解析 (3):stage执行
Apollo Planning决策规划算法代码详细解析 (4):Stage逻辑详解
Apollo Planning决策规划算法代码详细解析 (5):规划算法流程介绍
Apollo Planning决策规划算法代码详细解析 (6):LaneChangeDecider
Apollo Planning决策规划算法代码详细解析 (7): PathReuseDecider
Apollo Planning决策规划算法代码详细解析 (8): PathLaneBorrowDecider
Apollo Planning决策规划算法代码详细解析 (9): PathBoundsDecider
Apollo Planning决策规划算法代码详细解析 (10):PiecewiseJerkPathOptimizer_
Apollo Planning决策规划算法代码详细解析 (11): PathAssessmentDecider
Apollo Planning决策规划算法代码详细解析 (12): PathDecider
Apollo Planning决策规划算法代码详细解析 (13): RuleBasedStopDecider
Apollo Planning决策规划算法代码详细解析 (14):SPEED_BOUNDS_PRIORI_DECIDER
Apollo Planning决策规划算法代码详细解析(15): 速度动态规划SPEED_HEURISTIC_OPTIMIZ 上
Apollo Planning决策规划算法代码解析 (16):SPEED_HEURISTIC_OPTIMIZER 速度动态规划中
Apollo Planning决策规划算法代码解析 (17):SPEED_HEURISTIC_OPTIMIZER 速度动态规划下_
Apollo Planning决策规划算法代码详细解析 (18):SpeedDecider 障碍物纵向决策上
在本文将会讲解下面这些内容:
1、apollo规划算法整体运行框架pipline
2、常用的LANE_FOLLOW场景如何执行具体的规划任务;
3、LANE_FOLLOW_DEFAULT_STAGE有哪些tasks,这些task分别执行什么任务;
4、完整的决策规划流程
正文如下:
一、apollo规划算法整体运行框架
在每个运行周期内,可以理解为task是最小的执行单位;按照配置不同的task构成了stage;当确定所处stage后,会执行stage下注册的所有task。
apollo规划算法中,task的执行流程如下,下图便是apollo规划算法的完整运行流程:
二、apollo规划算法具体执行的task
上文讲到PublicRoadPlanner 的 LaneFollowStage 是在自动驾驶过程中使用频率最高的场景与stage,LaneFollowStage的配置如下,正是下面这些task组成了在LaneFollowStage状态下完整的决策规划算法。
scenario_type: LANE_FOLLOW
stage_type: LANE_FOLLOW_DEFAULT_STAGE
stage_config: {
stage_type: LANE_FOLLOW_DEFAULT_STAGE
enabled: true
task_type: LANE_CHANGE_DECIDER
task_type: PATH_REUSE_DECIDER
task_type: PATH_LANE_BORROW_DECIDER
task_type: PATH_BOUNDS_DECIDER
task_type: PIECEWISE_JERK_PATH_OPTIMIZER
task_type: PATH_ASSESSMENT_DECIDER
task_type: PATH_DECIDER
task_type: RULE_BASED_STOP_DECIDER
task_type: ST_BOUNDS_DECIDER
task_type: SPEED_BOUNDS_PRIORI_DECIDER
task_type: SPEED_HEURISTIC_OPTIMIZER
task_type: SPEED_DECIDER
task_type: SPEED_BOUNDS_FINAL_DECIDER
# task_type: PIECEWISE_JERK_SPEED_OPTIMIZER
task_type: PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER
task_type: RSS_DECIDER
}
三、apollo规划算法tasks最完整解析
上文提到task组成了在LaneFollowStage状态下完整的决策规划算法,本节将会完整介绍这些task设置的目的,具体执行什么样的任务:
1、LaneChangeDecider
LaneChangeDecider 是lanefollow 场景下,所调用的第一个task,它的作用主要有两点:
流程图如下:
2、PathReuseDecider
PathReuseDecider 是lanefollow 场景下,所调用的第 2 个 task,它的作用主要是换道时:
流程如下:
3、PathLaneBorrowDecider
PathLaneBorrowDecider 是第3个task,PathLaneBorrowDecider会判断已处于借道场景下判断是否退出避让;判断未处于借道场景下判断是否具备借道能力。
需要满足下面条件才能判断是否可以借道:
4、PathBoundsDecider
PathBoundsDecider 是第四个task,PathBoundsDecider根据lane borrow决策器的输出、本车道以及相邻车道的宽度、障碍物的左右边界,来计算path 的boundary,从而将path 搜索的边界缩小,将复杂问题转化为凸空间的搜索问题,方便后续使用QP算法求解。
5、PiecewiseJerkPathOptimizer
PiecewiseJerkPathOptimizer 是lanefollow 场景下,所调用的第 5 个 task,属于task中的optimizer类别它的作用主要是:
6、PathAssessmentDecider
PathAssessmentDecider 是lanefollow 场景下,所调用的第 6 个 task,属于task中的decider 类别它的作用主要是:
7、PathDecider
PathDecider 是lanefollow 场景下,所调用的第 7 个 task,属于task中的decider 类别它的作用主要是:
在上一个任务中获得了最优的路径,PathDecider的功能是根据静态障碍物做出自车的决策,对于前方的静态障碍物是忽略、stop还是nudge
8、RuleBasedStopDecider
RuleBasedStopDecider 是lanefollow 场景下,所调用的第 8 个 task,属于task中的decider 类别它的作用主要是:
9、SPEED_BOUNDS_PRIORI_DECIDER
SPEED_BOUNDS_PRIORI_DECIDER 是lanefollow 场景下,所调用的第 10 个 task,属于task中的decider 类别它的作用主要是:
(1)将规划路径上障碍物的st bounds 加载到路径对应的st 图上
(2)计算并生成路径上的限速信息
SPEED_BOUNDS_PRIORI_DECIDER 这个task 是 SpeedBoundsDecider 这个类的对象,使用SPEED_BOUNDS_PRIORI_DECIDER 的config进行初始化,相关代码在 http://task_factory.cc 中定义。
10、PathTimeHeuristicOptimizer
SPEED_HEURISTIC_OPTIMIZER 是lanefollow 场景下,所调用的第 11个 task,属于task中的optimizer 类别,它的作用主要是:
代码总流程如下:
11、SpeedDecider
SpeedDecider 是lanefollow 场景下,Apollo Planning算法所调用的第12个 task,属于task中的decider 类别它的作用主要是:
12、SPEED_BOUNDS_FINAL_DECIDER
SPEED_BOUNDS_FINAL_DECIDER 是lanefollow 场景下,所调用的第 13 个 task,属于task中的decider 类别它的作用主要是:
13、PiecewiseJerkSpeedOptimizer
PiecewiseJerkSpeedOptimizer 是lanefollow 场景下,所调用的第 14个 task,属于task中的decider 类别它的作用主要是:
四、文章推荐
Apollo Planning决策规划算法代码详细解析 (16):SPEED_HEURISTIC_OPTIMIZER 速度动态规划中_自动驾驶 Player的博客-CSDN博客
自动驾驶算法详解(5): 贝塞尔曲线进行路径规划的python实现_自动驾驶 Player的博客-CSDN博客_自动驾驶路径规划算法
Apollo Planning决策规划算法代码解析 (17):SPEED_HEURISTIC_OPTIMIZER 速度动态规划下_自动驾驶 Player的博客-CSDN博客
Apollo规划决策算法仿真调试(5):动态障碍物绕行_自动驾驶 Player的博客-CSDN博客_apollo 障碍物