Apollo问答 | 关于Lattice Planner规划算法的若干问答

 

上周,我们在Apollo开发者交流群内做了关于Lattice Planner的分享。这里,我们将社群分享里开发者提出的问题进行了归纳整理,现场没有得到回答的问题,大家可以从本期问答内寻找答案。

1

Q

Lattice Planner将规划统一成代价函数,寻找代价最小的。在规划的上层是否还需要决策层?

A

在规划上层的决策仅仅包含了来自交规的停车指令(比如红绿灯),其余的策略均有下层采样+cost来完成。

2

Q

Lattice Planner适用于哪些场景?

A

Lattice Planner现在已经在低速园区和高速公路的场景中由产品落地。对于普通城市道路,对于相对复杂的交规处理还有待完善。

3

Q

这个算法适合多弯道复杂的场景下吗?复杂的停车场等?

A

该算法可以处理多弯道的场景。对于停车场暂不使用,因为这个算法首先需要参考线,而复杂的停车场很难做出一条参考线。

4

Q

Cost里面已经考虑了碰撞,为什么还要做碰撞检测

A

Cost里面的碰撞仅仅是把有碰撞风险的轨迹的cost值设置的比较高,为了把这样的轨迹优先级排到比较后,从而使得我们能够优先考察其他更安全的轨迹,但它并没有起到删选轨迹的作用,是一个比较soft的限制。而后面的碰撞检测是出于安全的考虑,把这条轨迹筛除,这是一个hard的限制。

5

Q

Lattice Planner和EM Planner的区别是?或者说分别应用在什么场景下?

A

Lattice Planner主要基于采样+选择,而EM Planner的思路是逐层优化迭代。从规划层面来说,两者均可用于各种场景。从决策层来看,Lattice的决策相对简单,适用于相对简单的场景,如低速园区,高速公路。EM算法对交规的决策做的相对更完善,可以处理相对复杂的普通城市道路。

6

Q

高横向轨迹和纵向轨迹俩俩组合咋样理解?是横向的一条轨迹和纵向的所有轨迹组合吗?

A

两两组合指的是每一条横向轨迹和每一条纵向轨迹的组合。

7

Q

计算量是不是有点大?普通CPU可以吗?

A

以目前的经验来看,普通CPU是可以处理的。当然,这个算法可以随着计算机性能的提升,采样更多的轨迹,使得我们对解空间的涵盖更加完备。

8

Q

关于轨迹的生成,Lattice使用的是多项式拟合,一般使用三项还是五项?另外,老师说是在st图上下阴影处取样,那是取多少个点?那个末状态是指超车结束的状态点吗?

A

对于横向轨迹的多项式拟合,因为有有初始状态的零阶导,一阶导,二阶导,和末状态的零阶导,一阶导,二阶导,一共六个变量,所以拟合五次多项式。对于纵向轨迹,在停车和跟车状态,也都是五次多项式,但对于巡航状态,由于我们不需要确定末状态的S值,所以只有五个变量,那么用四次多项式就可以了。在ST图上下取样,点的数目可以由开发者自行决定,这个没有限制。末状态指的就是超车结束的状态点。

9

Q

只有起始状态和末状态怎么进行横向和纵向的拟合?

A

构建多项式,使得多项式在起始时刻和末时刻的各阶导数和起始状态末状态吻合。

10

Q

Lattice Planner是路径规划的算法,但也涵盖了部分行为规划的处理内容?

A

是的。横向轨迹主要针对路径,纵向轨迹主要针对速度、加速度等行为。

11

Q

多项式拟合,是什么多项式?拟合后如何保证满足无人车的运动学和动力学要求?

A

多项式指的就是普通的多项式,拟合时已经通过高阶导数考虑了动力学要求。

12

Q

Apollo的代码中出现了S-L坐标系和frenet坐标系的名称,这两个是否是指同一个坐标系?

A

这两个指的是同一个坐标系。

13

Q

高精度地图的输出格式是怎样的?包括用于导航的矢量图、用于定位的点云图以及全局的路径。对于高精度地图这一块希望能够有详细的介绍。

A

可以参考 https://github.com/ApolloAuto/apollo/blob/master/modules/map/data/README.md 如 README 所示,xml, bin, txt, lb1 都是不同的文件格式,适配不同的读取器,内容是一致的。

14

Q

多项式拟合具体方法是什么?如何避免拟合的曲线超出路面范围?

A

拟合的具体方法是求解多项式系数的线性方程组。开发者可以通过添加在路检测的检查validity check来避免曲线超出路面范围。

15

Q

换道场景,是要提前获取目标车道和当前行驶车道的参考线吗?

A

是的,这个信息在Apollo里都是有的。

16

Q

Frenet坐标系下面是一个车道一个中心线?还是一条线一个中心线?这两的s值的0点是从什么地方开始算的?

A

一个车道一个中心线。S值的0点是从参考线的起点开始。参考线的起点会随着主车的位置做实时动态调整,通常是在主车车身后30米左右的位置。

17

Q

在障碍车辆较多的环境下可能需要频繁的规划路径,由于cost值有多个评价组成,有可能多次出现最佳轨迹的横向方向完全相反的情况,可能造成车辆左右微微摆动,如何解决这种情况?

A

在这种情况下,建议额外补充一个和上一个计算周期相似性的cost。

18

Q

对于单向双车道场景,规划的时候是只规划行驶车道还是规划双车道?

A

如果有换道需求的话,会同时规划两条车道。

19

Q

初始状态本车的theta是车头朝向还是指车速朝向, 初始状态曲率怎么计算,用方向盘角度推?

A

初始状态的theta是车头方向。曲率是基于IMU的信息计算出来的。

20

Q

在运行Apollo demo时 ,在只有软件模拟没有硬件的情况,能不能测试和调试规划算法,能的话怎么做?

A

Apollo有一个开放的仿真平台,azure.apollo.auto,开发者可以在仿真平台中调试规划算法。

21

Q

多项式具体形式如何?拟合拟合后如何保证满足无人车的运动学和动力学要求?

A

多项式就是普通的幂次多项式。拟合出来以后,可以通过限制检测来筛选出符合无人车动力学模型的轨迹。

22

Q

Lattice算法的输入也是referenceLine吧,这个是通过routing模块给出的route segment生成的,和EM Planner一样,理解正确么?

A

正确。

23

Q

有碰撞风险的轨迹为什么不在cost环节或者之前直接删掉?

A

Cost环节仅仅是一个soft的排序,并不做删除的工作。

2724

Q

如果如果在过弯道的时候,reference line上的end point有噪音,在不停都抖动,如何在这种情况下规划一条稳定的轨迹,谢谢。

A

这就需要我们不断优化reference line的平滑算法。

25

Q

现在Apollo的代码中设计了三个末状态横向偏移量,-0.5,0.0和0.5,以及四个到达这些横向偏移量的纵向位移,分别为10,20,40,80。能解释下为什么这样定意思这些常量?

A

这些常量是根据平时路测的经验得到的。开发者可以根据自己的产品和场景来调整这些常量。

26

Q

只有起始状态和末状态怎么进行横向和纵向的拟合?

A

通过求解多项式的系数是的起始点和终止点的各阶导数吻合。

27

Q

关于轨迹的生成,Lattice使用的是多项式拟合,一般使用三项还是五项?另外,老师说是在st图上下阴影处取样,那是取多少个点?那个末状态是指超车结束的状态点吗?

A

一般是5阶多项式,在cruise状态下,用4阶多项式。在st图中的取点个数没有规定,开发者可以根据需要来调试。

28

Q

       

图中确定了纵向拟合曲线之后,如何确定横向的拟合曲线?

A

横向轨迹在第18页ppt中有介绍。

29

Q

轨迹采样时纵向位移选取10 20 40 80 ,这是经验值吗?是不是需要根据车速进行调整?

A

这是经验值。我们也正在改进,使得它能根据车速调整。

30

Q

规划轨迹中的速度如何设定,是否根据起始点速度、终点速度、以及轨迹距离,计算出一个平稳加速度,然后平稳地加速过去?但是我看PPT中跟车的场景,到达reference speed的过程加速度似乎并非为一个常量。

A

轨迹的平稳性可以通过cost来筛选。所以就要求我们在sample的过程中涵盖面尽可能的广泛。

31

Q

横向运动是由纵向运动诱发的,该如何理解?

A

普通的车子的轮胎不会转到水平位置来做单纯的横向运动。

关于Lattice Planner规划算法的若干问答的更多相关文章

  1. lattice planner 规划详解

    大家好,我是来自百度智能驾驶事业群的许珂诚.今天很高兴能给大家分享Apollo 3.0新发布的Lattice规划算法. Lattice算法隶属于规划模块.规划模块以预测模块.routing模块.高精地 ...

  2. RRT路径规划算法

    传统的路径规划算法有人工势场法.模糊规则法.遗传算法.神经网络.模拟退火算法.蚁群优化算法等.但这些方法都需要在一个确定的空间内对障碍物进行建模,计算复杂度与机器人自由度呈指数关系,不适合解决多自由度 ...

  3. PRM路径规划算法

    路径规划作为机器人完成各种任务的基础,一直是研究的热点.研究人员提出了许多规划方法:如人工势场法.单元分解法.随机路标图(PRM)法.快速搜索树(RRT)法等.传统的人工势场.单元分解法需要对空间中的 ...

  4. 路径规划: PRM 路径规划算法 (Probabilistic Roadmaps 随机路标图)

    随机路标图-Probabilistic Roadmaps (路径规划算法) 路径规划作为机器人完成各种任务的基础,一直是研究的热点.研究人员提出了许多规划方法如: 1. A* 2. Djstar 3. ...

  5. 全局路径规划算法Dijkstra(迪杰斯特拉算法)- matlab

    参考博客链接:https://www.cnblogs.com/kex1n/p/4178782.html Dijkstra是常用的全局路径规划算法,其本质上是一个最短路径寻优算法.算法的详细介绍参考上述 ...

  6. RRT路径规划算法(matlab实现)

    基于快速扩展随机树(RRT / rapidly exploring random tree)的路径规划算法,通过对状态空间中的采样点进行碰撞检测,避免了对空间的建模,能够有效地解决高维空间和复杂约束的 ...

  7. DWA局部路径规划算法论文阅读:The Dynamic Window Approach to Collision Avoidance。

    DWA(动态窗口)算法是用于局部路径规划的算法,已经在ROS中实现,在move_base堆栈中:http://wiki.ros.org/dwa_local_planner DWA算法第一次提出应该是1 ...

  8. 基础路径规划算法(Dijikstra、A*、D*)总结

    引言 在一张固定地图上选择一条路径,当存在多条可选的路径之时,需要选择代价最小的那条路径.我们称这类问题为最短路径的选择问题.解决这个问题最经典的算法为Dijikstra算法,其通过贪心选择的步骤从源 ...

  9. State Lattice Planner(状态栅格规划)

    参考文献: Efficient constrained path planning via search in state lattices Differentially Constrained Mo ...

随机推荐

  1. zeroclipboard复制插件兼容IE8

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 因子分析spss怎么做 spss因子分析教程及结果解释

    因子分析spss怎么做 spss因子分析教程及结果解释 因子分析spss可以简化数据结构,将具有错综复杂关系的变量综合为数据较少的因子,在信息损失最小的情况下对变量进行分类,不过有些朋友多spss因子 ...

  3. oracle习题练习-表空间-用户-表-约束

    题一 1.       创建名字为hy_tablespace的表空间,默认大小为10M;@@ 2.       创建一个用户,用户名以自己名字命名,并指定命名空间为hy_tablespace;@@@@ ...

  4. oracle建立job定期运行存储过程

    1 首先查看 SQL> show parameter job NAME TYPE VALUE------------------------------------ ----------- -- ...

  5. Leetcode8.String to Integer (atoi)字符串转整数(atoi)

    实现 atoi,将字符串转为整数. 该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字 ...

  6. vue-eslint配置文件

    做项目的时候,我把eslint设置为了false,可想而知提交会产生的冲突 让我一个一个解决肯定不可能的,eslint的rule很多 在vue的配置文件.eslintrc.js中配置以下选项 这样只需 ...

  7. PHP--反射的方法

    反射,直观理解就是根据到达地找到出发地和来源.比如,一个光秃秃的对象,我们可以仅仅通过这个对象就能知道它所属的类.拥有哪些方法. 反射是指�php运行状态中,扩展分析PHP程序,导出或提出关于类.方法 ...

  8. 陈云川的OPENLDAP系列

    前言 本 来,我应该准备一篇精彩的演说辞,从LDAP应用的方方面面讲起,细数LDAP在各种场合应用的成功案例,大肆渲染LDAP应用的辉煌前景,指出有多少机 构和组织的关键业务是建立在LDAP的基础上的 ...

  9. SQLServer2005 没有日志文件(*.ldf) 只有数据文件(*.mdf) 恢复数据库的方法

    代码如下: exec sp_attach_db exun,'d:\exun2.mdf' (可能执行一次不能成功,测试了下,有时候需要执行2次以上命令才行) 执行了之后,记得刷新数据库,不然是不会显示的

  10. python 类属性、静态方法与类方法

    1. 类属性 1.1 定义 在类中方法外通过属性名 = 属性值定义的属性 访问方式: 类名.属性名 对象名.属性名 class Student: cls_id = 102 stu = Student( ...