【自动驾驶】运动规划丨知识分享| Apollo问答 | 轨迹规划中的关键问题汇总

轨迹规划(Trajectories Planning)主要指考虑实际临时或者移动障碍物,考虑速度,动力学约束的情况下,尽量按照规划路径进行轨迹规划。

轨迹规划是一个复杂的问题,首先,规划上加入了速度时间的信息,增加了规划的维度。其次,由于车辆是非和谐系统,具有特殊的运动学约束条件

轨迹规划的目标是计算出安全、舒适的轨迹供无人驾驶车辆完成预定的行驶任务。安全意味着车辆在行驶过程中与障碍物保持适当的距离,避免碰撞;舒适意味着给乘客提供舒适的乘坐体验,比如避免过急的加减速度,在弯道时适当减速避免过大的向心加速度等等;最后,完成行驶任务指规划出的轨迹要完成给定的行驶任务,不能因为过于保守的驾驶导致不可接受的行驶时间。

内容分享自:Apollo问答 | 轨迹规划中的关键问题汇总②


Q1:

Apollo 轨迹规划的起始条件之一是光滑的指引线,也就是说在获得指引线的情况下才开始做轨迹规划吗?如果是的话,那么该指引线本身是曲率可导,符合运动学规律的,为什么不在世界坐标系下作为无人车的可行轨迹,给到控制中,而要进一步在弗雷纳坐标系下进行一次规划?这样做有什么样的好处?

A1:

是的,必须在有光滑指引线的情况下做规划。在 Frenet 坐标系下做规划,是为了避免直接考虑朝向曲率等问题,避免在高维度上做规划。

Q2:

我们在实际使用 PublicRoadPlanner 时发现车辆总是倾向于以最大加速度加速,以最大减速度减速。这对于超车和紧急避障是合适的,但对于一般起步、过弯、调头、停车可能就不太合适。能否提供一套可以动态配置加减速力度的参数的方法?

A2:

理论上是可以的,可以通过上游的决策层根据规划目标动态调整参数。

Q3:

在路径规划中常三阶导数的物理含义以及在算法中的作用是什么?

A3:

三阶导数是加加速度,表示加速度的变化率。在物理上,是舒适性的一个重要指标。在算法中,相邻离散点之间的连接就是通过常三阶导数实现的。

Q4:

DpPolyPathOptimizer、QpSplinePathOptimizer、QpPiecewiseJerkPathOptimizer 、PiecewiseJerkPathOptimizer 这几个优化器有什么区别,应用的有什么不同?

A4:

前面的 3 个已经被 deprecate 掉了,使用 PiecewiseJerkPathOptimizer 替代。应用商 PiecewiseJerkPathOptimizer 能够覆盖前面的优化器。

Q5:

文章中主要介绍了 Apollo2.5 里 EM Planner 的设计思路,后续 Apollo 版本中还有 Lattice Planner 以及 Open Space 环境下的 Planner。能对 EM Planner  Lattice Planner 在 Public Road 场景下的表现进行比较吗?对于 Open Space中常见的倒车等轨迹规划,EM Planner 和 Lattice Planner能解决吗?

A5:

我们还没有综合性的对 EM 与 Lattice 进行比较。设计上,EM 适合解决复杂的城市道路,Lattice 适合解决相对简单的高速场景。倒车的话,EM 和 Lattice 是不能解决的。

Q6:

弗雷纳坐标系下,横向距离对于纵向路径的求导,是通过分段拟合后直接求导,还是离散化之后通过差分的形式?

A6:

三阶导数是通过差分的形式直接计算出的。

Q7:

EM Planner 规划器中,通过惩罚路径、速度曲线的一阶导、二阶导、三阶导来进行规划,这种方法会在哪些场景下失效,有没有必要将这些约束换成车辆的动力学约束来进行运动规划?还是说将动力学约束下放到控制环节去做?

A7:

我们会根据车辆的运动学模型,对一阶、二阶、三阶导数的取值范围做出估计,找出符合运动学的取值范围,约束求解轨迹的空间。

Q8:

在 EM planner 中,路径规划的起点 initpoint,会先计算该点的 dl 和 ddl,而在实车调试时,这两个值可能会因为前端输入的 heading 等数据有一些波动,导致这两个值偏大,最终规划的路径为沿参考路径呈 s 型。如何规避这个问题?

A8:

我觉得这是个综合的问题,如果 heading 出现抖动,不仅 planning 会受到影响,control 受到的影响更大,而且这个是上游模块来的信息,这个问题不好,我个人认为也不应该在 planning 中解决。

Q9:

想问一下 motion planning 中 auto tunning 的现状规划

A9:

现在 auto tuning 这块由于人员调动,工作有些停滞。

Q10:

车辆位置障碍物位置投影到指引线上。请问具体的怎样确定投影后的 s 值?

A10:

具体请参见相关代码:CartesianToFrenetConversion 这个类的实现。

Q11:

之前的 EM 规划器无论路径速度规划点与点之间以五次多项式相连,本文中所描述的方法貌似完全是在离散状态下计算与优化(包括目标函数),而不考虑点与点之间连接的函数表达,所以纵向点需要很密(路径规划中纵向点间距大概多远)。这种完全离散的方法与之前 EM 中 QP 规划方法相比好处在哪里?

A11:

路径规划中,离散的 s 在 0.5m 以下,路径有 200m 长。好处在于我们获得了对路径更大的控制权,能够在非常复杂的问题中计算出可行轨迹。

Q12:

“每两个离散点之间,有一个常三阶导数项”,是不是可以理解为以函数形式为三次多项式?或者说是上个问题中表述的一样,是在完全离散的状态下计算的?

A12:

可以这么理解,本质上也是一个多项式

Q13:

在如图的 Uturn 情况,主车在大概 s1 处,感知到了障碍物 box,但同一个 box 的四个 corner 点被映射到了不同的 s 处,重构障碍物 sl 边界时就出错了,构造了以最大最小 s 及最大最小 l 构成的错误 sl_boundary,最后造成障碍物未占据车道而无法通行,请问你们是如何解决的?

A13:

这个情况比较极端,现在我们是根据不同的情况做特殊处理,也没能很好的综合性解决方案

Q14:

路径规划算法中,保证三阶导是每段的常数,那每一段的三阶导这个数是怎么确定的?

A14:

通过差分二阶导数

Q15:

文章中提到“路径规划避让静态障碍物,速度规划避让动态障碍物”,而 2018 年的论文“Baidu Apollo EM Motion Planner”实验中路径规划中可以避让对向来车,这两个描述是否矛盾,怎样理解静态障碍物?对于速度较低的动态障碍物是否合适在路径规划中考虑?

A15:

静态障碍物可以以速度大小来区分。对于速度较低的障碍物,范围只要能够bound到一定的大小,也可以在路径规划中考虑。

Q16:

控制 kappa 相对控制角速度有什么优势吗?另外,纵向有考虑加速度,横向不考虑角加速度的原因?

A16:

角速度涉及了路径速度两个方面的综合因素。在我们的实现中,路径和速度分开考虑是为了降低难度。

直接考虑角加速度的算法我们正在开发,不久会发布。

Q17:

非和谐车辆系统就是非完整约束车辆系统吗?在路径规划时也需要考虑到当前车辆的运动状态而适当的调整车辆的几何形状,几何形状是指什么?多种平滑指引线的计算方法,有哪些常见方法?

A17:

是的。应该是根据车辆状态来调整路径的几何形状吧?平滑算法可以参见我们的实现:QP Spline,spiral curve……

Q18:

之前做控制看到用 MPC 的思想去做避障的轨迹规划,请问这种方法和现在这种在地图空间中采样的方法有什么优缺点?这两种方法有分类吗?

A18:

MPC 是 control-based 的方法,在地图坐标系做规划,与我们在Frenet坐标系下规划不同。具体我们可以线下交流。

Q19:

路径规划的求解用的什么方法?另外这种求解方式耗费算力吗?

A19:

使用的 OSQP,计算路径的话,0.5m 间隔 200m 总长,少于 10ms。

Q20:

请问在路径规划模块中需要考虑障碍物运动的不确定性吗?对于和其他车辆有交互的场景,例如堵车时加塞这样对路权有争夺的情况,如何去设计我们的决策方案?在实际路测中当前 Apollo 规划系统不能解决的主要有哪些问题?

A20:

这需要上游模块,比如预测模块提供比较好的预测。现在 planning 中还没有相应的解决方案。

Q21:

路径规划之前如何做出应该从某个障碍物上方绕过、下方绕过或者跟在障碍物后面的决策?

A21:

通过用户设置代价函数,比如加速度的权重等等,通过代价来进行判断。

Q22:

请问强化学习在目前规划中有使用吗?主要应用在什么场景?

A22:

目前还没有使用,我们现在还在探索。

Q23:

Apollo 基于场景、阶段和任务的理念进行规划,那么阶段(stage)该如何理解?这个过程做了什么?能否举例说明?

A23:

Stage 简要的说是一个场景中的一个阶段,几个 stage 顺序组合起来形成一个完整的场景。

Q24:

路径规划算法怎样在脱离实际车辆进行测试?测试通过需要哪些量化指标之后再上实车验证?

A24:

我们现在会通过仿真平台做初步验证,在 planning 成功率,轨迹质量加以检测之后,再做实车测试。

Q25:

在实际使用过程中规划路径经常出现跳变,导致控制不稳定,请问可以如何减小规划结果的跳动?

A25:

这个和实际的实现有关系,合理的跳变表明对动态环境做出了反应;不合理的跳变说明在设计代价函数的时候有欠缺,需要改进设计。

Q26:

对于档位切换时,加减速度会滞后的车辆实施自动驾驶时,如何改进控制跟不上规划步调导致频繁重规划的问题?

A26:

这个好像主要是控制的问题。在 planning 层面,我们可以适当的减小加速度的搜索范围,生成尽可能和缓的轨迹。

Q27:

目前针对前方低速前行(比自车速度低),这时候要不要换道是由上层的决策模块决定的吗?如果是,假如现在决策要换道,左右两边还有其它车辆的情况下,规划层如何根据左右两边的车辆运动情况进行规划?是先定一个沿参考路径方向的换道距离,确定当前决策下换道路径,后续不再改变这条路径,还是实时根据左右两边车辆运动轨迹,每一帧都规划一条与左右两边车辆没有碰撞的路径?

A27:

是后一种情况,实时根据左右两边车辆运动轨迹,每一帧都规划一条与左右两边车辆没有碰撞的路径。

Q28:

车辆沿着光滑的道路指引线运动时,突然出现紧急情况时(比如 cut in 工况),如何处理?决策层会优先执行预设的规避动作然后重新进行规划吗?

A28:

不会,我们以 10HZ 的方式进行规划就是为了能够及时更新轨迹,处理紧急情况。

Q29:

针对行人这类低速且方向随机的障碍物是否有专门的处理方式,举个例子,园区场景,单车道有行人自右侧向左横穿,走几步又停下再走,车辆如果按避障处理可能会在向左拐弯途中发现行人障碍物变到左侧,于是又试图向右避障,请问老师针对这种场景是否有对应解决办法?

A29:

这个就是预测的问题了,好像这个问题折磨了预测同学很久,我可以问问他们最新进展。planning 层面不适合对这样的情况做假设与处理。

Q30:

在路径规划中是怎么计算几何上,本车与障碍物是否碰撞,实时性能如何?通过什么方法求解?

A30:

二维 bounding box 碰撞,大概需要十几个向量点乘运算,可以参见 Separate Axis theorem,中文可能叫超平面分割定理

Q31:

如果目的地是在车后方不远处(eg:10m),规划的话是先掉头,还是直接倒车?这个权重如何取?

A31:

在我们的规划中(onlane planner),我们假设的是一般公路场景,算法中不允许向后移动。Open space planner 可以允许这样的操作。

Q32:

当规划路径,出现几种损失函数彼此不能兼顾,该优先选择哪些损失函数?

A32:

代价函数是几个因素加权的和。所以我觉得您指的是应该提高哪些的权重?这个可能需要根据不同的应用场景、车辆类型来决定。

Q33:

针对前方突发的障碍物(比如虚警或横穿马路的动物),按照技术文档的方式可以规划出避让的路径,但会有较大的离心加速度,实际最优选择似乎应该是紧急制动,就是与障碍物相交碰撞的路径,但是横向路径规划似乎一开始就剔除了这些可能碰撞的区间,不知道我的理解是否有问题?

A33:

如果突发障碍物的话,我们会当作动态障碍物处理,在生成路径的时候是不考虑的。所以在这个场景下,我们会在路径上继续直行,在速度上紧急制动。