使用样条曲线外推轨迹

问题描述 投票:0回答:1

我目前正在研究基于遥测数据的自主航行代理的模拟/防撞系统。目的是推断其他智能体的路线,以预测可能的碰撞。

目前我正在使用三次埃尔米特样条进行外推,但我得到的结果是我无法理解的。例如,推断的航向对我来说毫无意义。

我已经读过好几次了,样条曲线不适合外推,而多项式更可取。但是,我找不到具体的来源。一般来说,我几乎找不到任何关于样条或多项式外推的有用资料。但也许我只是盲目的。

下面我附上了我当前的代码和我正在使用的数据。排除其他外推方法,因为该任务需要样条或多项式。

也许有人给我一个建议。

数据:

# scenario 1
w1 = np.array([[0, 0], [0, 1], [2, 2], [3, 2]])
t1 = np.array([[0, 1], [0, 1], [1, 0], [1, 0]])

# scenario 2
w2 = np.array([[0, 0], [0, 1], [.5, 1.5], [1, 1]])
t2 = np.array([[0, 1], [0, 1], [1, 0], [0, -1]])

代码:

t = np.linspace(0, len(waypoints) - 1, 100)
ex = np.linspace(len(waypoints)-1, len(waypoints), 10)

chs = CubicHermiteSpline(np.arange(0, len(waypoints)), waypoints, tangents)

poly = chs(t)
extrapolated = chs(ex)

ax.plot(poly[:, 0], poly[:, 1], '-', label='cubic hermite spline')
ax.plot(waypoints[:, 0], waypoints[:, 1], 'o', label='waypoints')
ax.plot(extrapolated[:, 0], extrapolated[:, 1], 'o', label='extrapolated')

ax.quiver(waypoints[:, 0], waypoints[:, 1], tangents[:, 0], tangents[:, 1], color='green', label='direction', angles='xy', scale_units='xy', scale=1, alpha=.25)

ax.legend()
python numpy spline polynomials extrapolation
1个回答
0
投票

TL;DR——这些是该样条线的预期路径。在场景 2 的最新路径点时,样条线的路径正在主动变化,因此我们不应期望它直接推断。如果我们在 [1,0] 处有一个额外的路点,样条曲线将按照您的预期运行。

让我们从场景1开始

这是我所看到的场景 1 的情节(使用您提供的代码):

这对我来说实际上是有道理的。从 [2,0] 处的路点到 [3,0] 处的下一个路点的分段轨迹是直接向右的。不过,为了彻底起见,我们可以利用

derivative
对象的
CubicHermiteSpline
方法来查看最后一个路点的一阶导数:

chs.derivative(nu=1)(3)

产生

array([1., 0.])
,正如我们所期望的(这是我们为这个最新航路点提供的切线)。我们可以像这样检查最后一个路点的二阶导数:

chs.derivative(nu=2)(3)

产生

array([0., 0.])
,正如我们所期望的那样。这两个值一起描绘了一条向右延伸的直线。

场景 2 可能是事情变得棘手的地方。

现在,当我们检查最后一个路点的一阶导数时,现在我们得到

chs.derivative(nu=1)(3) = array([0., -1.])
。这与我们为该航路点提供的切线相匹配。

与之前不同的是,当我们检查最后一个航路点的二阶导数时,我们得到

chs.derivative(nu=2)(3) = array([-1., -1.])
。因此,在我们的最后一个路点,拟合线的斜率正在主动变化。这意味着,如果我们将其推断到最后一个航路点之外,我们的样条线将不会从最后一个航路点继续沿直线向下(如绿色箭袋所示)。

相反,我们应该预期斜率会继续变化。在 xy 平面中,这看起来像是在负 x 和 y 方向上以相同的速率增加。这正是我们从最后一个路径点开始的推断值所看到的情况。

我们的三阶导数是

chs.derivative(nu=3)(3) = array([0., 0.])
(值得检查三次!)。

© www.soinside.com 2019 - 2024. All rights reserved.