14 votos

La curva más rápida de $p_0$ a $p_1$

Estoy intentando resolver un problema de planificación de rutas:

Puntos dados $p_0$ y $p_1$ y vectores $v_0$ y $v_1$ ,

encontrar una función $p(t)$ st. $p(0) = p_0$ , $p(T) = p_1$ , $p'(0) = v_0$ y $p'(T) = v_1$

que minimiza $T$ (o $p^{-1}(x_1)$ ) dada la restricción $|p''(t)| \le 1$ .

Por lo que he leído, creo que esto podría resolverse utilizando el cálculo de variaciones. No sé mucho sobre cómo funciona, así que espero que alguien pueda ayudarme con algún material introductorio y quizás una pista sobre si el problema es resoluble en absoluto.

4voto

Han de Bruijn Puntos 6161

Descargo de responsabilidad: esto es sólo una respuesta parcial a la pregunta tal y como está formulada, principalmente porque no tiene en cuenta correctamente la condición de que el punto final $\vec{p_1}$ también se prescribe. Por favor, lea las líneas inferiores. Además se supone que el problema es bidimensional.

Es bien sabido que una línea recta es el camino más corto entre dos puntos, pero sólo se puede realizar con velocidades constantes, por ejemplo, como la dada por: \begin {eqnarray*} x(t) = v_x.t + s_x \\ y(t) = v_y.t + s_y \end {eqnarray*} $\vec{s} = (s_x,s_y)$ es una posición inicial, $\vec{v} = (v_x,v_y)$ es una velocidad (constante), $t$ es tiempo .
Sustituye la relación lineal por una cuadrática. Es algo razonable suponer que nos dará la solución más eficiente con velocidades no constantes velocidades no constantes, como lo requiere el OP. \begin {eqnarray*} x(t) = \frac {1}{2} a_x.t^2 + v_x.t + s_x \\ y(t) = \frac {1}{2} a_y.t^2 + v_y.t + s_y \end {eqnarray*} Aquí $\vec{a} = (a_x,a_y)$ es el constante aceleración. La curva resultante curva es una spline cuadrático .
Se dan los puntos de inicio y final. Es fácil ver, con $T$ como el final de los tiempos: $$ \vec{p_0} = \left[ \begin{array}{c} s_x \\ s_y \end{array} \right] $$ $$ \vec{p_1} = \left[ \begin{array}{c} \frac{1}{2} a_x.T^2 + v_x.T + s_x \\ \frac{1}{2} a_y.T^2 + v_y.T + s_y \end{array} \right] $$ Se indican las velocidades inicial y final. Es fácil ver, con $T$ como el final de los tiempos: $$ \vec{v_0} = \vec{v}(0) = \left[ \begin{array}{c} v_x \\ v_y \end{array} \right] $$ $$ \vec{v_1} = \vec{v}(T) = \left[ \begin{array}{c} a_x.T + v_x \\ a_y.T + v_y \end{array} \right] $$ A partir de las dos últimas ecuaciones encontramos: $$ \frac{v_x(T) - v_x(0)}{a_x} = T \quad ; \quad \frac{v_y(T) - v_y(0)}{a_y} = T $$ Y sabemos que $\sqrt{a_x^2 + a_y^2} = 1$ . Así que vamos a definir una aceleración constante y normada: $$ \left[ \begin{array}{c} a_x \\ a_y \end{array} \right] = \left[ \begin{array}{c} v_x(T) - v_x(0) \\ v_y(T) - v_y(0) \end{array} \right] / \sqrt{(v_x(T) - v_x(0))^2 + (v_y(T) - v_y(0))^2} $$ O $$\vec{a} = \frac{\vec{v_1} - \vec{v_0}}{\left|\vec{v_1} - \vec{v_0}\right|} $$ Ahora todo está definido. Por ejemplo, el tiempo $T$ es fácil de calcular: $$ T = \frac{v_x(T) - v_x(0)}{a_x} = \sqrt{(v_x(T) - v_x(0))^2 + (v_y(T) - v_y(0))^2} = \left|\vec{v_1} - \vec{v_0}\right| $$ Pero me preocupa un poco la "aceleración normalizada". Supongamos en cambio que: $$ \vec{a} = \frac{\vec{v_1} - \vec{v_0}}{\left|\vec{v_1} - \vec{v_0}\right|} \times A $$ Dónde $A$ (un escalar) tiene la dimensión de una aceleración. Entonces: $$ T = \frac{\left|\vec{v_1} - \vec{v_0}\right|}{A} $$ tiene la dimensión del tiempo. Lo que me parece mejor, como físico :-)

Como ya se ha dicho, esta es una respuesta parcial a la pregunta. La razón es que podemos calcular la posición final ahora, en lugar de imponerla: $$ \vec{p_1} = \vec{p_0} + \frac{\left|\vec{v_1} - \vec{v_0}\right|}{A} \frac{\vec{v_1}+\vec{v_0}}{2} $$ Una de las razones por las que he vuelto a borrar este post es que parece que hay no hay otra posibilidad que el spline cuadrático si se quiere mantener una aceleración óptima constante desde el principio hasta el final. Más información sobre las splines cuadráticas se encuentra en: Splines (PDF) .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X