Cambio de orientación aplicando pares

9

Supongamos que tienes un objeto flotando libremente en el espacio. Tiene un vector al que desea que apunte este objeto, y un vector que representa la dirección en la que se encuentra actualmente. De estos dos, puede obtener la rotación (matriz, cuaternión, lo que sea) que representa el cambio de orientación para alinear los dos vectores.

Si solo tiene la capacidad de aplicar torque (derivada de la velocidad angular) a su objeto, ¿cuál es un buen algoritmo para aplicar torque a lo largo del tiempo que no sobrepasará / subestimará el destino?

(En este caso, es una nave espacial que quiere orientarse automáticamente en la dirección del viaje usando propulsores. El desplazamiento es irrelevante).

Karantza
fuente
¿Está tratando de optimizar el uso de combustible (par total ejercido) o la velocidad? Además, ¿el barco comienza con velocidad angular cero al comienzo de esta operación?
Justin L.
Bueno, optimizar la velocidad sería tener una aceleración casi infinita, y optimizar el uso de combustible sería tener una aceleración casi nula. Entonces, en la práctica, usaré una compensación que se ve bien. En cuanto a la velocidad angular inicial, espero poder incluir eso en el cálculo de forma natural.
Karantza

Respuestas:

4

Esto se puede manejar como el caso similar para la aceleración lineal.

Primer hecho a tener en cuenta: Debido a que la nave comienza con una velocidad angular de cero, y desea que termine con una velocidad angular de cero, esto significa que el cambio total en la velocidad debe ser igual a cero.

De esto podemos ver que la integral de la aceleración en el tiempo debe ser igual a cero: debe haber exactamente "tanta" aceleración positiva como la aceleración negativa.

Por lo tanto, su solución, sea cual sea, debe limitarse a esta propiedad: aceleración "total" igual hacia adelante y hacia atrás.

Esto es lo que debe seguir la forma de su gráfico de aceleración en el tiempo:

Gráfico de aceleración en el tiempo.

Mirando esto, ¡hay tantas formas y formas posibles en las que podría estar tu aceleración! Hagamos algunas suposiciones para la forma de aceleración que desee, para dar una respuesta fácil / concisa.

En aras de una respuesta simple, tendré la aceleración en uno de tres estados: adelante, atrás o cero. Hacia adelante y hacia atrás serán de igual magnitud, y los estados se pueden cambiar instantáneamente. (no hay aceleración gradual de la aceleración)

Puede encontrar el cambio en la distancia para una aceleración dada durante un período de tiempo dado con esta ecuación:

s = 0.5*a*t^2

La solución más simple aquí sería acelerar hasta llegar al punto medio, luego desacelerar el resto del camino.

Tomaremos Pcomo la distancia total que desea mover:

s = P/2
P/2 = 0.5*a*t^2
P = a*t^2
t^2 = P/a
t = sqrt(P/a)

Así que básicamente:

  1. Acelerar a apor sqrt(P/a)unidades de tiempo (unidades basadas fuera de sus unidades para la aceleración)
  2. Desacelerar a la misma magnitud por la misma cantidad de tiempo

Esta no es la única solución. Te llevará allí en el menor tiempo posible ( 2*sqrt(P/a)). Pero, ¿y si quieres una versión más relajada?

En este caso, puede acelerar 1/3 del camino, avanzar por el 1/3 y desacelerar el resto del tercero. O 1 / 4th, costa por 1/2, desacelerar 1 / 4th también.

O tal vez podría acelerar durante una cantidad fija de tiempo, y luego desacelerar durante una cantidad fija de tiempo, pero espere hasta llegar a la posición exacta antes de comenzar a desacelerar.

Justin L.
fuente
Tienes mucha razón acerca de que este es el caso del movimiento lineal. Mi principal preocupación era usar un algoritmo como este con un motor de física que solo me proporciona control de guiñada, cabeceo y balanceo para el torque. Esos ejes no son ortogonales una vez que comienzas a girar, así que esperaba que hubiera una mejor solución. Sin embargo, su enfoque de sincronización aún se aplicará independientemente.
Karantza
Ah lo siento, no debo haber entendido tu pregunta. No estoy seguro de poder responder más a fondo sin ver las especificaciones de su motor. ¿Pero seguramente hay una manera de aplicar un par constante en una dirección constante?
Justin L.
Sí, tu respuesta es probablemente lo más cercana posible. Resolví mi problema particular pirateando los cuaterniones hasta que obtuve algo a lo que se aplicaría el algoritmo lineal. ¡Gracias!
Karantza