Apollo中Lattice规划器结构梳理

参考源

刚接触Apollo,代码看的实在头疼,自己之前一直用C,一开始感觉烦的一批(自己水平太菜)…直到现在逐渐体会到其奥妙之处,果然体会到了逼近大佬的快乐~关于planning代码部分,参考了几个前辈的,如下
阿波罗3.5的Cyber planning任务调度:https://blog.csdn.net/davidhopper/article/details/89360385
个人感觉最清晰的Planning解释:https://www.cnblogs.com/liuzubing/p/11058612.html
以及很容易就能搜到的其他资源:https://zhuanlan.zhihu.com/p/61982682https://zhuanlan.zhihu.com/p/103317794?utm_source=wechat_session
关于ST、SL图的构建、五次多项式以及OSQP求解原理,后续搞清楚后再更新…

Planning的Proc执行结构

Apollo启动完成初始化后,执行其主要部分proc:
Apollo中Lattice规划器结构梳理通过调用planning_base_->RunOnce()函数来开启决策规划之旅,目前含有两个大的规划器:navi_planning和on_lane_planning,至于选取那个,在程序初始化的时候被配置了,详情可以参考参考源中的介绍~目前学习lattice,位于on_lane_planning中
Apollo中Lattice规划器结构梳理

Planning搞起:RunOnce 结构

在这里,主要做了下图中的事:
Apollo中Lattice规划器结构梳理

RunOnce中使用的planner

在RunOnce执行中,调用了planner_->Plan,whose内部包含了:lattice、navi、public_road、rtk_replay四种规划器,找到了我们的lattice
Apollo中Lattice规划器结构梳理

默默展开lattice

主要七个步骤:
1.将参考线转变为离散地图点
2.计算参考线上初始规划点的匹配点
3.根据匹配点计算Frenet帧的初始状态
4.解析决策,得到规划目标
5.分别生成纵向和横向一维轨迹束
6.评价:首先,根据动态约束条件对一维轨迹的可行性进行评价;其次,评估可行的纵向和横向轨迹对,并根据成本进行排序。
7.返回无碰撞的、符合条件的轨迹
如下图所示:
Apollo中Lattice规划器结构梳理

ST、SL图

在采用Frenet坐标系后,ST和SL图极为便捷,位于第4部分实现
Apollo中Lattice规划器结构梳理

横纵向轨迹束的生成

位于第5部分,分为纵向轨迹、横向轨迹两个实现
Apollo中Lattice规划器结构梳理

纵向轨迹的生成

主要使用了四次和五次多项式,五次多项式可保证一阶导v、二阶导a、三阶导jerk等连续性(这块理解有误么…)
Apollo中Lattice规划器结构梳理

横向轨迹的生成

横向轨迹生成用了五次多项式和二次规划两套方法,就像图中的一样…二次规划求解我没看懂,等闲下来搞定它,只知道大致原理不能算懂~额额
Apollo中Lattice规划器结构梳理

轨迹的评价

对于lattice第6部分,看到很多介绍的材料里都有解释,集火在cost函数上,cost函数形式在很多论文里可以直接看到了
Apollo中Lattice规划器结构梳理

轨迹的挑选

在对轨迹进行筛选时,一开始没有看到对轨迹的剔除,后来才看到while循环时,不满足直接continue了…直接保证凡是执行到reference_line_info->SetTrajectory时,就意味着是成功符合的轨迹了,是在下村儿了
Apollo中Lattice规划器结构梳理

下一阶段

1.对ST、SL详细过程进行学习
2.OSQP实际应用求解学习
come on


相关文章:

  • 2021-05-21
  • 2021-08-25
  • 2022-12-23
  • 2021-11-21
  • 2021-05-24
  • 2021-08-02
  • 2021-10-25
  • 2021-10-17
猜你喜欢
  • 2021-07-02
  • 2022-02-18
  • 2021-09-08
  • 2022-03-01
  • 2021-06-16
  • 2022-01-05
相关资源
相似解决方案