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. bzoj 1053 [HAOI2007]反素数ant——关于质数的dfs / 打表

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1053 写了个打表程序. #include<iostream> #include& ...

  2. 主流浏览器HTML5视频格式差异

    因最近在研究video.js,现在遇到的问题是在js中设置了swf,但是在ie8下只是显示黑屏并没有播放视频,在网上进行搜索时查到了有关各个浏览器支持哪些视频格式的文章,现在此记录下,方便以后查阅. ...

  3. H5C3--圆角

    /*添加圆角 规律:顺时针方向 一个值:代表四个方向 二个值:左上+右下 / 右上+左下 三个值:左上 / 右上+左下 / 右下 四个值:左上/ 右上 / 右下/ 左下*/ /*border-radi ...

  4. IE9没有内置鼠标手势,还要自己写

    写了个IE插件,然后获取鼠标,信息, 模拟了鼠标手势,在虚拟机里面测试,完全好使,但是现在又不敢在Win7上用了. 愁死了... 为了实现一个鼠标手势. 写的那破玩意,竟然50多K.....太大了.. ...

  5. JavaScript 中的多线程通信的方法

    在Html 5诞生之后,我们可以使用javascript来实现多线程处理.H5 新增了一个web workers api,使用这个API,用户可以很容易地创建在后台运行的线程,H5 中被称为workd ...

  6. VMware ESXi 6.7服务器设置开机自动启动虚拟机

    VMware ESXi 6.7服务器设置开机自动启动虚拟机,具体操作步骤如下 1.登陆到VMware ESXi 6.7  web 界面 2.导航器-->主机-->管理  将自动启动修改为 ...

  7. 基于spring-boot的测试桩设计-添加配置文件(properties)

    编写测试时,有些内容可以放到配置文件中. 第一步:新增配置文件 conf.properties 第二步:编写配置文件类 MockConf package mock.mockdemo.conf; imp ...

  8. golang学习资料必备

    核心资料库 https://github.com/yangwenmai/learning-golang

  9. Codeforces 451D

    题目链接 D. Count Good Substrings time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  10. Python中 sys.argv的用法简明解释

    Python中 sys.argv[]的用法简明解释 sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得 ...