2010-12-06 16 views
13

Un poco de historia. Tengo una simulación que usa splines cúbicos para trayectorias 1D. En este contexto, una spline cúbica especifica la posición, la velocidad, la aceleración y la sacudida del objeto como una función del tiempo.Biblioteca para generar trayectorias spline cúbicas (no interpolación)?

Si usted tiene:

  • valores iniciales y finales para posición, velocidad, aceleración y tiempo
  • limitaciones constante de valor sobre la máxima y la velocidad mínima, aceleración y jerk

entonces hay una estría único. Si no especifica la hora final, sino que desea la trayectoria de tiempo mínimo, también hay una spline única.

En realidad la búsqueda de estas ranuras puede ser un dolor real, sin embargo. En el caso en que se especifique el tiempo, una spline consistirá en hasta 7 polinomios, y los nudos (puntos de transición entre polinomios) no se conocen con anticipación.

Este no es el caso habitual de ajuste de una spline para un conjunto de datos, se crean las estrías de las condiciones de contorno y algunas restricciones adicionales. He leído artículos en los que las personas han utilizado acuerdos similares y han tenido necesidades similares, pero nunca he encontrado bibliotecas (o incluso código fuente) que aborden la generación de splines de este tipo. He escrito un código que maneja la mayoría de los casos, pero no es demasiado robusto o rápido. No estoy muy preocupado de que sea rápido, pero más robusto sería genial.

¿Hay alguna biblioteca que pueda hacer esto disponible? ¿Código de código abierto, incluso si no está construido como una biblioteca? C, C++, Java o Python son preferidos, pero si es de código abierto, otros idiomas seguirán siendo útiles como referencia.

+1

me temo que tendrá que hacerlo usted mismo, utilizando algún algoritmo de minimización restringida, o alguna búsqueda de raíces múltiples dimensiones (en función de los dos casos usted describe). Esto no es especialmente difícil de hacer, pero puede beneficiarse enormemente de los ojos de un extraño si quiere algo sólido.¿Podría decirnos con más precisión qué ha implementado? –

+0

¿Puede comentar cómo su enfoque es diferente al habitual CAM? Por ejemplo, en http://homepages.laas.fr/xbroquer/publications/ICRA10.pdf –

+0

¿Aún está interesado en este? ¿Podría responder las preguntas y comentar las respuestas para refinar el enfoque? –

Respuesta

1

Hay una biblioteca impulso para C++ que es de código abierto y podría obtener a mitad de camino.

Tiene todos los bloques de construcción básicos que necesita, creo (polinomios de Legrendre/Laguerre/Hermite, hallazgo de raíz, etc ...), aunque no llega a calcular las splines.

La documentación de la biblioteca está aquí para que pueda comprobar por sí mismo: http://www.boost.org/doc/libs/1_45_0/libs/math/doc/html/index.html

0

SciPy's interpolation functions podría ayudar a ... Plus puede obtener los derivados o las integrales de las estrías fácilmente ... No estoy seguro de por qué dices "no interpolación" ... Me parece que eso es lo que estás tratando de lograr.

+0

no, no lo es. No hay datos para interpolar. –

+0

¿Ajustar una spline a puntos no es interpolación? – Benjamin

+0

Vea el diagrama allí: http://en.wikipedia.org/wiki/Jerk_%28physics%29. El OP quiere encontrar los puntos a través de los cuales pasará la spline. –

1

El problema de las estrías es que usted tiene que resolver ecuaciones lineales simultáneas para resolver las condiciones. Si su situación tiene más información acerca de algunos de esos derivados, es posible que pueda utilizar la interpolación Piecewise Cubic Hermite (PCHIP).

Por ejemplo, en lugar de definir ese idiota debe ser cero, se podría llegar a una restricción diferente, el uso PCHIP, y resolver su problema con avidez. De todos modos, es algo para recordar, incluso si no puedes usarlo esta vez.

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

Cuestiones relacionadas