2010-12-06 3 views
13

Немного фона. У меня есть симуляция, которая использует кубические сплайны для 1D траекторий. В этом контексте кубический сплайн определяет положение объекта, скорость, ускорение и рывок как функцию времени.Библиотека для генерации кубических сплайн-траекторий (не интерполяция)?

Если у вас есть:

  • начальные и конечные значения для положения, скорости, ускорения и времени
  • постоянной значение ограничений на максимальная и минимальная скорость, ускорения и рывка

то есть уникальный сплайн. Если вы не укажете конечное время, но вместо этого хотите использовать траекторию минимального времени, то есть также уникальный сплайн.

На самом деле найти эти сплайны может быть королевской болью. В случае, когда указано время, сплайн будет состоять из 7 полиномов, а узлы (точки перехода между многочленами) не известны заранее.

Это не обычный случай подгонки сплайна к набору данных, он создает сплайны из граничных условий и некоторые дополнительные ограничения. Я читал документы, в которых люди использовали подобные механизмы и имели схожие потребности, но я никогда не встречал никаких библиотек (или даже исходного кода), которые решали бы создание таких сплайнов. Я написал код, который обрабатывает большинство случаев, но он не очень надежный или быстрый. Я не очень беспокоюсь о том, что это быстро, но более надежным было бы здорово.

Есть ли библиотеки, которые могут сделать это доступным? Открытый исходный код, даже если он не построен как библиотека? C, C++, Java или Python, но если это открытый исходный код, другие языки по-прежнему будут полезны в качестве ссылки.

+1

Боится, вам придется сделать это самостоятельно, используя некоторый алгоритм минимизации с ограничениями, или некоторый многомерный корнем поиска (в зависимости от этих двух случаев вы описываете). Это не особенно сложно сделать, но вы можете сильно выиграть от глаз незнакомца, если хотите чего-то крепкого.Не могли бы вы рассказать нам более точно, что вы реализовали? – 2011-02-02 15:36:17

+0

Можете ли вы прокомментировать, как ваш подход отличается от обычного CAM? Например, в http://homepages.laas.fr/xbroquer/publications/ICRA10.pdf – 2011-02-03 03:23:34

ответ

1

Существует библиотека ускорения для C++, которая является открытым исходным кодом и может получить вас на полпути.

У этого есть все основные строительные блоки, которые вам нужны, я думаю (многочлены Legrendre/Laguerre/Hermite, поиск корня и т. Д.), Хотя он и не позволяет вычислять сплайны.

документация библиотека находится здесь, так что вы можете проверить сами: http://www.boost.org/doc/libs/1_45_0/libs/math/doc/html/index.html

0

SciPy's interpolation functions может помочь ... Кроме того, вы можете получить производные или интегралы этих сплайнов легко ... Я не знаю, почему вы говорите «не интерполяция» ... Мне кажется, это то, чего вы пытаетесь достичь.

1

Проблема с сплайнами заключается в том, что вам необходимо решить линейные уравнения, чтобы решить условия. Если в вашей ситуации больше информации о некоторых из этих производных, вы можете использовать Interpolation Piecewise Cubic Hermite (PCHIP).

Например, вместо определения того, что толчок должен быть равен нулю, вы можете найти другое ограничение, использовать PCHIP и с жадностью решить вашу проблему. Во всяком случае, это то, что нужно помнить, даже если вы не можете использовать его на этот раз.

http://www.mathworks.com/moler/interp.pdf

 Смежные вопросы

  • Нет связанных вопросов^_^