在Frenet坐标系的应用中,参考线是至关重要的。
Apollo对参考线做了详实的工作,且具备丰富的开源资料。
在 reference_line_provider.cc/h 中可以看到,目前Apollo中共有三种参考线平滑算法,分别为:
- qp_spline_smoother(样条曲线,五次多项式) OSQP
- spiral_smoother(五次螺旋线) IPOPT
- discrete_points_smoother(离散点)
参考线平滑中的主体部分,即smoother类下的smooth函数,Apollo 6.0中目前配置参数里正在使用的是discrete_points_reference_line_smoother下的smooth函数。该方法通过对原始参考线上的离散点的有限偏移对原始参考线进行平滑。可以看到的是,在这个类中还有两种不同的平滑算法,分别是:
- CosThetaSmooth(IPOPT+ADOL-C)
- FemPosSmooth(默认算法)OSQP求解
实际使用的算法在配置参数里设定,目前Apollo中用的为FemPosSmooth。
能否使用曲线来处理参考线平滑问题?曲线多用来做插值(要求插值函数精确地通过所有数据点)和拟合(数据拟合要求函数曲线在最小二乘意义下尽量靠近数据点)
几个学术界的工作:
1、北理 A Hierarchical Trajectory Planning Framework for Autonomous Driving
:在全局规划线之上使用二次优化,然后使用B样条曲线B-spline插值;
2、国防科大 Real-Time Trajectory Planning for Autonomous Urban Driving: Framework, Algorithms, and Verifications:共轭梯度优化(非线性优化),然后使用B样条插值;
3、韩国汉阳大学Myoungho Sunwoo 也有几项工作:Local Path Planning for Off-Road Autonomous Driving With Avoidance of Static Obstacles
Curvilinear-Coordinate-Based Object and Situation Assessment for Highly Automated Vehicles
Apollo6.0_ReferenceLine_Smoother解析与子方法对比_xl_courage的博客-CSDN博客
自动驾驶决策规划算法第二章第二节(中) 参考线算法_哔哩哔哩_bilibili
apollo reference_line_smooth_1 algorithm_哔哩哔哩_bilibili
【开发者讲堂】reference_line_smooth_算法2_哔哩哔哩_bilibili
分段五次螺旋线非线性优化拟合(基于Apollo) - Challenging-eXtraordinary
path planning-5次Spline样条曲线光滑算法Demo - Challenging-eXtraordinary
以下这篇文章,作者从算法层面进行了详细的分析:
需要推导公式和阅读代码
apollo介绍之参考线(二十七) - 知乎 王方浩-浩哥的总结
百度Apollo代码阅读:参考线平滑FemPosDeviationSmoother
Apollo 6.0 参考线 ReferenceLine 生成
不得不说,参考线平滑(离散点曲线平滑)涉及到的内容还是很多的。