task::
decider是决策
1.换道
首先考虑由参考器生成线生成的数量,如果只有一条参考线就不会产生换道,如果多条参考线,机会根据障碍物是否满足条件而做出决策
2.路径重用
如果上一个路径没有与障碍物发生碰撞,就会沿用上一个路径,防止生成路径不稳定。
如果重用就会直接进行速度规划,如果存在碰撞,就路径规划
3.借道
4.路径边界
Nudge::对障碍物的绕行
5.路径优化
6.路径评价
7.路径决策
该决策用在后面速度规划上
基于二次规划的路径规划算法::
有很多现成的求解器,Apollo用的OSQP
定义优化变量、目标函数设计【是由优化变量组起来的函数】、满足约束,带入求解器求解::
设置系数矩阵
求解
获取优化结果
代码执行流程
1.换道决策
产生的换到状态会保存到injector中,injector在planning中是一个单独的类,可以在不同帧(?)之间共用,所以换道也是观察好几帧产生的决策。
2.借道
保存到referenceline_info里,
3.路径边界
最后通过SetCandiadatePathBoundaries函数保存到referenceline_info里,下一步调用
4.路径优化
在piecewise_jerk_problem中进行求解,设置权重系数和约束,最后在Optimize中优化求解
然后保存到referenceline_info中
5.选择最优路径
两两比较,然后选择的路径信息保存到referenceline_info中的mutable_path_data中同时也保存障碍物的信息,供速度规划进一步处理,在ST图中使用。
算法实践
在Layer Manu的planning可以选择边界的可视化
二次规划路径规划的所有参数,权重项,配置文件
planning.conf中存的是命令行参数,FLAGS参数,在整个代码里是一个全局变量,所以可以在planning.conf中修改。
【FLAGS:: 】
思考::