生成三次样条轨迹的库(非插值)?

13

简单介绍一下背景。我有一个使用三次样条曲线的1D轨迹模拟。在这种情况下,三次样条曲线指定了一个物体的位置、速度、加速度和扰动作为时间的函数。

如果你有:

  • 位置、速度、加速度和时间的初始和最终值
  • 关于最大和最小速度、加速度和扰动的常量约束条件

那么就有一个唯一的样条曲线。如果没有指定最终时间,而是想要最短时间轨迹,则也存在唯一的样条曲线。

然而,实际找到这些样条曲线可能会很困难。在时间被指定的情况下,样条曲线将由多达7个多项式组成,而节点(多项式之间的过渡点)事先是未知的。

这不是将样条拟合到数据集的常规情况,而是从边界条件和一些额外约束条件中创建样条。我读过一些论文,人们使用了类似的安排,并且有类似的需求,但我从未找到过任何处理生成这种样条的库(甚至没有源代码)。我已经编写了一些代码来处理大多数情况,但它并不是非常健壮或快速。我不太担心它的速度,但更健壮会很好。

有没有可以处理这个问题的库?即使不是构建为库,也要开源代码?C、C++、Java或Python优先考虑,但如果是开源的,其他语言仍然有用作为参考。


1
恐怕你必须自己动手,使用一些受限制的最小化算法或者多维根查找(取决于你所描述的两种情况)。这并不是特别难做,但如果你想要得到一个稳健的结果,你可能会从外部人员的视角中获益匪浅。你能否更精确地告诉我们你实现了什么? - Alexandre C.
你能否评论一下你的方法与通常的CAM方法有何不同?例如在http://homepages.laas.fr/xbroquer/publications/ICRA10.pdf中。 - Dr. belisarius
你还对这个感兴趣吗?你能回答问题并评论答案以完善方法吗? - Dr. belisarius
3个回答

1
样条曲线的问题在于你必须解决同时线性方程组以满足条件。如果你的情况有更多关于某些导数的信息,你可以使用分段三次Hermite插值(PCHIP)。 例如,你可以想出一个不同的约束条件,使用PCHIP并贪心地解决你的问题,而不是定义jerk必须为零。无论如何,即使这次不能使用它,也要记住这一点。 http://www.mathworks.com/moler/interp.pdf

1

有一个开源的C++ boost库,可能能帮你节省一半时间。

它具备我认为你所需的所有基本构建模块(Legrendre/Laguerre/Hermite多项式、根查找等),但缺乏实际计算样条曲线的功能。

这里是该库的文档,你可以自行查看:http://www.boost.org/doc/libs/1_45_0/libs/math/doc/html/index.html


0

SciPy的插值函数可能会有所帮助...此外,您可以轻松地获得这些样条的导数或积分...我不确定您为什么说“不是插值”...在我看来,这似乎是您想要实现的。


请看这里的图表:http://en.wikipedia.org/wiki/Jerk_%28physics%29 。OP想要找到样条曲线应该经过的点。 - Alexandre C.
1
现在我明白了区别。你不能使用运动方程从参数中推导出曲线吗? - Benjamin
这是一个很好的观点...为什么我们要用样条曲线来解决问题,而不是使用古典物理学呢? - J T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接