【Autoware】Open Planner论文阅读 参数介绍

前言

Autoware这边也匆忙正式结项了,这OP也是最后一个flag… 在仿真里进行了测试,但是时间匆忙总觉得没有理解透,看了论文把主要和调参有关的提取出来了

之前的一系列关于Autoware的总结 博文Blog:

  1. 【Autoware】Autoware安装教程
  2. 【Autoware】之ndt_mapping理论公式及代码对比
  3. 【Autoware】Ubuntu 18.04 ssdcaffe安装与Autoware 检测节点运行

b站的一系列操作视频:

  1. 【Autoware与Carla】OpenPlanner 仿真示意 无避障
  2. 【Autoware】建图ndt_mapping示意
  3. 【Autoware与Carla】OpenPlanner 仿真示意 带避障

至此Autoware的小部分探索可能到此结束了,有关几个问题的回复:

  • 为什么用Carla做仿真,不用lgsvl

因为… 我对Carla比较熟

  • 后面还会发布有关Autoware的嘛?

应该会 因为… 还有很多东西没总结,但是建议做的同学可以自行多看代码,真的是一个比较好的入门大礼包… 建图、定位、感知、规划一应俱全,就是调参可能有点费劲,如果是带着仿真,有时候和仿真的联合也需要考虑(比如carla的时间同步机制坑了我一上午 看现象以为是规划没跟上)

最后:包括这篇和前面的很多篇,可能都有遗留的一系列问题,欢迎大家评论区自行讨论… 如果有空/我知道的话 我也会尽量留言的,后面主要去准备毕业论文选题啥的去了… 探索其他cs285、carla系列、论文阅读应该还会继续的,以上,谢谢观看了;另外致谢Autoware的整个团队对于这个.ai系列的开源工作!TQL!!!

参考与引用 [reference]:

  1. Autoware Github地址: https://github.com/Autoware-AI
  2. OpenPlanner 论文地址: https://www.fujipress.jp/jrm/rb/robot002900040668/

同时OpenPlanner也在更新第二版

更新日记:

20220523:更新评论区讨论至文中,在轨迹判断时使用更为准确性的描述

20220522:修改markdown 重构文章内容,删除notion外链

0. 前向参数

界面里进行设置的这两个参数:

【Autoware】Open Planner论文阅读 参数介绍_第1张图片

为下图中所示的car tip和roll in距离

【Autoware】Open Planner论文阅读 参数介绍_第2张图片

The closest section to the vehicle is the car tip margin, which is the distance from the center of the robot to the point of lateral sampling, the length of which determines the smoothness of steering when switching between trajectories.

The next section is called the roll-in margin, which is the distance from the outer limit of the car tip margin to the point of parallel lateral sampling, the length of which is proportional to the vehicle’s velocity. The faster the vehicle is traveling, the longer this section should be to generate smooth change.

The section farthest from the vehicle is called the roll-out section, which runs from the outer limit of the roll-in zone to the end of the length of the local trajectory.

原始参数设置是在:op_trajectory_generator这个节点

  • 有待看具体的代码 看看单位是m嘛?如果是m会不会太长了一点

  • 下面这里最大规划距离maximum planning distance应该怎么确定?

    在common参数里有Path distance,确定一下是否是这个

  • 这里的垂直路径点是指?垂直于什么的?垂直区域的话就直接指向天了

    这里指出了横向距离是0,所以为啥还要写垂直路径点,直接longitudinal不就行了?

使用局部路径规划算法生出roll-outs的时候有三个步骤

  1. 利用现在的位置和最大规划距离从全局路径中提取interest区域

  2. sample 新的垂直路径点对应于全局路径中提取的区域,sample的点是从car-tip margin处出发的,但是横向的 lateral距离是0,然后再sample延伸到roll-in区域的边界,再根据有的路径计算roll_out density

  3. 使用conjugate gradient平滑每一个sampled的轨迹,conjugate gradient是一种非线性 non-linear iterative optimization technique 消除在sample过程中roll-outs之间的不连续的问题
    这同时也improve curvature使得转弯更顺滑

    然后trajectory vertices的密度,是通过 piece wise interpolation 计算得到的

    • 很好奇这里 [trajectory vertices的密度] 为什么不是waypoint density
    • 但是没有看到哪里可以调整这个 [ piece wise interpolation ] 的地方

    很多参数化的插值方法都对input noise非常敏感,从而影响到输出(比如cubic splines 在输入点距离较近时,输出会有随机的较大的震荡现象;所以这里使用的方法是结合piece wise interpolation和conjugate gradient smoothing去得到更为平滑的轨迹。因为我们输入了vectormap,结果的轨迹通常都满足了kinodynamic

    • 但是如果vectormap的lane画的转弯半径小 那输出轨迹可能会不满足吗?

1. Cost计算

这里主要讲的是避障,obstacle avoidance is the process of selecting the best possible trajectory from the roll-outs generated

输入:roll-outs的轨迹 和检测到的障碍物【会对障碍物在vectormap的某个区域有限制吗?】

输出:selected trajectory

【Autoware】Open Planner论文阅读 参数介绍_第3张图片

所以我们需要additive cost function去评估每个轨迹,normalized cost measurements:

1.1 Priority cost:

后面写的是center cost,每一个roll-out出来的轨迹都会计算一下到这条路中心线的距离作为cost值

1.2 Collision cost:

  1. 计算每个生成的路径与障碍物contour point的距离,因为最后的轨迹都是平行于中心轨迹的 所以我们不需要对roll-in的轨迹进行测试;测试使用"point inside a circle" 也就是每一个contour edge提高一个测试点,以此点最近的【论文里没说】waypoint作为中心,半径=半个车宽+detection margin error

  2. 在roll-in后计算轨迹与检测到的障碍物的距离【咦和上一点有什么区别嘛?】计算检测到的障碍物的contour point到中心轨迹的距离,使用从每个轨迹到中心轨迹的signed distance去得出collision cost

    • 这里的sigened distance是啥 -> 见下讨论

1.3 Transition cost

constrains the vehicle from jumping roll-outs 这可以使得转弯更顺滑

计算方法就是normalized perpendicular distance between roll-outs and currently selected trajectory

相关讨论及详细阶段描述


关于碰撞测试,基于评论区网友的讨论

@ 车辆_小学生
关于文中的Collision cost的计算,我提供我自己的一点理解,不知道理解的对不对,希望共同探讨一下。 原论文的意思好像是这样。 第一阶段,计算roll in部分的cost:使用point inside a circle的方法来计算。每一条轨迹都需要计算
第二阶段:计算roll out部分的cost:首先只计算障碍我的轮廓点到中心轨迹的距离,然后计算其他和中心轨迹平行的轨迹的cost,方法是在利用不同的轨迹和中心轨迹的的signed distance 来计算。这里signed distance 的意思我的理解是:一个带有正负号的距离。例如:定义中心轨迹的左侧距离为正,右侧距离为负数。

补充以下几点:我重新又阅读了一下阅读,基于之前的理解:
第一阶段:使用point inside a circle的方法来计算,不是每条轨迹都算,而是障碍物的边缘边取一点,以此点做车身+探测误差之和为半径作圆,这一条是障碍测试,不算精确cost,即 一旦有轨迹在圆内,此轨迹就直接被排除外
第二阶段,你说的很有道理,即signed distance是带正负的,按原文的意思是仅计算与中心的轨迹的距离值,剩余都按signed distance来正负offset一下就好了

@ 零尾

第一阶段这块感觉不是很准确,“The obstacle test is achieved using a “point inside a circle” test, where each contour edge provides the test points, circles centers are the way-points, and the radius of each circle is half the vehicle width plus a detection margin of error.” 原文这里说的是:(1)每个轮廓提供测试点;(2)圆的中心是路径点way-points;(3)半径是一半车身宽+检测误差;所以感觉应该是以路径上的路径点画很多圆,然后判断轮廓提供的测试点是否落在这个圆里面。

赞同,第一阶段的判断实际是通过轮廓测试点是否落在圆内判断的

实际.ai测试中

关于输入的障碍物,Autoware的实现在core_perception包里,两种类型:bounding boxes 和cluster of point cloud

  • Bounding boxes的一直没有输出 建议再次检查一下原因 April 28, 2021

    直接拿了groud_truth来做的; July 3, 2021 后面做纯点云识别的时候,发现可能是点云的稀疏程度的原因,也就是Autoware本身拿的64线激光雷达,但是我们是16线的(Carla仿真当时用的也是16线的)

为了保证精度和performance

  • bounding boxes 可以提高检测障碍物的过程
  • Cluster 可以提高精度但是degrades performance drastically

所以trade-off是:使用小部分sample的contour point from cluster,然后每个障碍物最多用16个点来表示【咦咦咦咦!!】

题外话:如果是传统机器人方法是可以直接cluster of point cloud然后走到costmap再到global 是混合A*

这个max number of contour point也是可以调整的一个参数

Max number of contour point: increasing this number we can achieve finer representation, lead more accurate obstacle avoidance

【Autoware】Open Planner论文阅读 参数介绍_第4张图片

比如这里是8个contour point来构成的【emmm 那为啥我没输出呢!→ 因为filter cluster最后出来只有两个点了 → 很大可能因为激光雷达线束太低,没有进行调参】contour point的计算流程:

  1. 将xy平面分成n个区域
  2. 找到每个点距离中心点的距离和角度,使用角度来划分每个contour point属于哪个区域
  3. 然后选择最后的contour point 也就是每个部分离中心点最远的点,连起来

3. Behaviour Generation Using State Machine

  1. 当障碍物距离我们很近时,行为规划器会将我们的状态在swerve 和follow之间转换。然后counter and timer会帮助打破这个循环切换的模式
  2. 当交通灯从红到绿,而检测交通灯不那么可靠时,就需要多次接收signal来保证信号灯状态的可靠性并切换车辆状态,所以在初始化行为规划器的时候我们会设置minimum transition time,然后状态自身会运行除非是遇到了a set amount of time elapsed或是紧急情况

其中一些比较浅显的我就不列入表格中了,可以自行到各自代码的调用出查看 使用条件

参数 解释
path density 两个waypoint点之间的距离,如果是0.5的话 就是生成的点之间距离0.5m
Plan Distance 局部规划的最远距离(默认是80m 但是 因为传感器的限制 其实40m 估计都足以)
Rollouts Number 也就是第一部分提到的lattice分出来的支干有多少,在视频里我设置的是8,不然不好切换道路
Follow Distance 跟随距离 但是我没用到 没感觉的一个参数(因为会超车)
Avoiding Distance 躲避距离 用了 设的比较远(15-20m)这样可以早一点开始避障
Avoidance Limit
Lateral Safety 横向安全距离 建议设大一点 比如1m-2m 不过不用太大了 不然开出车道外面去了
Longitudinal Safety 纵向安全距离 没感觉的一个参数(因为会躲避)
Distance to closest lane 也就是多近之内的waypoint算数
Prediction distance 预测的距离 25m其实算远的了 一般看激光雷达的最远测距(但是我仿真直接用的直值)
Enable Particle Filter prediction 开启粒子滤波预测?具体代码我没找对应(可以找一下)TODO (但是需要勾选)

4. 仿真测试截图

注意是在CARLA内的仿真测试截图,并不是实车测试,相关视频及碎碎念【Autoware与Carla】OpenPlanner 仿真示意 带避障

你可能感兴趣的:(Self-Driving,无人驾驶,autoware,无人驾驶)