在自动驾驶中,多项式曲线经常用于路径规划和速度规划。
在apollo/module/planning/math/curve1d中,已经给出了多项式曲线类,如下
cubic_polynomial_curve1d,三次多项式曲线
1 三次多项式曲线
三次多项式函数表达式如下
f(x) = c3x^3 + c2x^2 + c1x +co (1-1)
对(1-1)依次求一阶导和二阶导,得到
f'(x) = 3c3x^2 + 2c2x + c1 (1-2)
f"(x) = 6c3x + 2c2 (1-3)
1.1 已知起点的函数值、一阶导、二阶导和终点函数值
将起点 x = xo = 0 时的函数值 f(0)、一阶导数值 f'(0)、二阶导数值 f"(0)代入(1-1)~ (1-3),有
f(0) = co
f' (0) = c1
f"(0) = 2c2 (1-4)
将终点 x = xp 不等于0 的函数值 f(x1) 代入 (1-1),有
f(xp) = c3xp^3 + c2xp^2 + c1xp + c0 (1-6)
可以得到
C3=f(xp) -co - c1xp - c2xp^2/xp^3 (1-7)
对应的代码如下
// cubic_polynomial_curve1d.cc
void CubicPolynomialCurve1d::ComputeCoefficients(const double x0,
const double dx0,
const double ddx0,
const double x1,
const double param) {
DCHECK(param > 0.0);
const double p2 = param * param;
const double p3 = param * p2;
coef_[0] = x0;
coef_[1] = dx0;
coef_[2] = 0.5 * ddx0;
coef_[3] = (x1 - x0 - dx0 * param - coef_[2] * p2) / p3;
}