【Autoware】Open Planner论文阅读 参数介绍
作者:互联网
文章目录
前言
Autoware这边也匆忙正式结项了,这OP也是最后一个flag… 在仿真里进行了测试,但是时间匆忙总觉得没有理解透,看了论文把主要和调参有关的提取出来了,因为是notion转markdown所以格式可能比较丑,介意的话,可以自行点击 notion外链: https://www.notion.so/kinzhang/Open-Planner-030ff7a9e7af4dca9c936ee274b3dd48
之前的一系列关于Autoware的总结:
- 【Autoware】Autoware安装教程
- 【Autoware】之ndt_mapping理论公式及代码对比
- 【Autoware】Ubuntu 18.04 ssdcaffe安装与Autoware 检测节点运行
b站的一系列操作视频:
至此Autoware的小部分探索可能到此结束了,有关几个问题的回复:
- 为什么用Carla做仿真,不用lgsvl
因为… 我对Carla比较熟 - 后面还会发布有关Autoware的嘛?
应该会 因为… 还有很多东西没总结,但是建议做的同学可以自行多看代码,真的是一个比较好的入门大礼包… 建图、定位、感知、规划一应俱全,就是调参可能有点费劲,如果是带着仿真,有时候和仿真的联合也需要考虑(比如carla的时间同步机制坑了我一上午 看现象以为是规划没跟上)
最后:包括这篇和前面的很多篇,可能都有遗留的一系列问题,欢迎大家评论区自行讨论… 如果有空/我知道的话 我也会尽量留言的,后面主要去准备毕业论文选题啥的去了… 探索其他cs285、carla系列、论文阅读应该还会继续的,以上,谢谢观看了;另外致谢Autoware的整个团队对于这个.ai系列的开源工作!TQL!!!
参考与引用
- Autoware Github地址: https://github.com/Autoware-AI
- OpenPlanner 论文地址: https://www.fujipress.jp/jrm/rb/robot002900040668/
前部分
关于此图片提到的,有在界面里进行设置:
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的时候有三个步骤
-
利用现在的位置和最大规划距离从全局路径中提取interest区域
-
sample 新的垂直路径点对应于全局路径中提取的区域,sample的点是从car-tip margin处出发的,但是横向的 lateral距离是0,然后再sample延伸到roll-in区域的边界,再根据有的路径计算roll_out density
-
使用conjugate gradient平滑每一个sampled的轨迹,conjugate gradient是一种非线性 non-linear iterative optimization technique 消除在sample过程中roll-outs之间的不连续的问题
这同时也improve curvature使得转弯更顺滑然后trajectory vertices的密度【很好奇这里为什么不是waypoint density】是通过piece wise interpolation 计算得到的【但是没有看到哪里可以调整这个的地方】
很多参数化的插值方法都对input noise非常敏感,从而影响到输出(比如cubic splines 在输入点距离较近时,输出会有随机的较大的震荡现象;所以这里使用的方法是结合piece wise interpolation和conjugate gradient smoothing去得到更为平滑的轨迹。因为我们输入了vectormap,结果的轨迹通常都满足了kinodynamic【但是如果vectormap的lane画的转弯半径小 那输出轨迹可能会不满足吗?】
5.2 Cost Calculation
这里主要讲的是避障,obstacle avoidance is the process of selecting the best possible trajectory from the roll-outs generated
输入:roll-outs的轨迹 和检测到的障碍物【会对障碍物在vectormap的某个区域有限制吗?】
输出:selected trajectory
所以我们需要additive cost function去评估每个轨迹,normalized cost measurements:
- Priority cost:[后面写的是center cost] 每一个roll-out出来的轨迹都会计算一下到这条路中心线的距离作为cost值
- Collision cost:
- 计算每个生成的路径与障碍物contour point的距离,因为最后的轨迹都是平行于中心轨迹的 所以我们不需要对roll-in的轨迹进行测试;测试使用"point inside a circle" 也就是每一个contour edge提高一个测试点,以此点最近的【论文里没说】waypoint作为中心,半径=半个车宽+detection margin error
- 在roll-in后计算轨迹与检测到的障碍物的距离【咦和上一点有什么区别嘛?】计算检测到的障碍物的contour point到中心轨迹的距离,使用从每个轨迹到中心轨迹的signed distance去得出collision cost【这里的sigened distance是啥】
- Transition cost: constrains the vehicle from jumping roll-outs 这可以使得转弯更顺滑,计算方法就是normalized perpendicular distance between roll-outs and currently selected trajectory
关于输入的障碍物,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
比如这里是8个contour point来构成的【emmm 那为啥我没输出呢!→ 因为filter cluster最后出来只有两个点了】contour point的计算流程:
- 将xy平面分成n个区域
- 找到每个点距离中心点的距离和角度,使用角度来划分每个contour point属于哪个区域
- 然后选择最后的contour point 也就是每个部分离中心点最远的点,连起来
6 Behaviour Generation Using State Machine
- 当障碍物距离我们很近时,行为规划器会将我们的状态在swerve 和follow之间转换。然后counter and timer会帮助打破这个循环切换的模式
- 当交通灯从红到绿,而检测交通灯不那么可靠时,就需要多次接收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 (但是需要勾选) |
标签:Planner,point,Autoware,roll,轨迹,距离,Open,contour 来源: https://blog.csdn.net/qq_39537898/article/details/118436448