¿Cuál es la forma recomendada de restringir la posición del cuaternión de base flotante y la velocidad angular?

Aug 20 2020

Para objetos con base flotante, la rotación en la posición generalizada se expresa como un cuaternión 4D. Sin embargo, la rotación en la velocidad generalizada aún se expresa como un vector de rotación espacial 3D.

¿Hay una forma recomendada de restringirlos, por ejemplo, hacia atrás euler?

prog.AddConstraint(eq(q[t+1], q[t] + h[t] * qd[t+1]))

¿Es apropiado convertir la velocidad angular en forma de cuaternión, por ejemplo, aquí ?

O como lo expresa John T. Betts en Métodos prácticos para el control y la estimación óptimos mediante la programación no lineal

Respuestas

1 HongkaiDai Aug 21 2020 at 00:16

Creo que para su caso de uso, desea imponer la restricción de integración entre puntos de ruta adyacentes en la planificación. En este caso, no sugeriría usar la integración de Euler q[n] = q[n+1] - qdot[n+1] * dtdirectamente. La razón es que el cuaternión siempre debe satisfacer la restricción de longitud unitaria (es decir, q[n]y q[n+1]ambos están en la superficie de la esfera unitaria en 4D). Por lo tanto, la derivada del tiempo qdotestá a lo largo de la superficie tangente de esta esfera unitaria, es decir, q[n+1] - qdot[n+1] * dtestá en esa superficie tangente. Ningún punto (aparte de q[n+1]) en la superficie tangente también está en la superficie del círculo unitario. Por lo tanto, la restricción q[n+1] = q[n] + qdot[n+1] * dtsolo puede cumplirse cuando dt=0, cuando la combina con la restricción |q[n]| = |q[n+1]|=1. Pictóricamente, podría usar la figura en la sección "tangente a un círculo" dehttps://www.toppr.com/guides/maths/circles/tangents-to-the-circle/. Observe que q[n+1] - qdot[n+1] * dtestá en la línea tangente de la esfera y q[n]está en el círculo, por lo que no puede tener q[n] = q[n+1] - qdot[n+1] * dt.

En cambio, sugeriría considerar la siguiente condición

q[n+1] = q[n] ⊗ Δq

donde q[n]es el cuaternión de la base flotante en el n'th waypoint, q[n+1]es el cuaternión de la base flotante en el n+1'th waypoint. es el producto hamiltoniano entre dos cuaterniones q[n]y Δq. Así que aquí necesitas calcular Δq a partir de la velocidad angular.

Suponga que la velocidad angular promedio entre los waypoints n'th y n+1'th es ω ∈ ℝ³. Esto significa que la base flotante gira alrededor de un eje a = ω/|ω|a razón de |ω|, por lo tanto

Δq = [cos(|ω|Δt/2), a*sin(|ω|Δt/2)]

Verhttps://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation#Using_quaternion_as_rotationspara obtener una explicación de la ecuación anterior.

Si usa ω[n+1]como la velocidad angular promedio desde el n'th waypoint hasta el n+1'th waypoint (análogo a usar v[n+1] en Euler hacia atrás), entonces su restricción de integración es

q[n+1] = q[n] ⊗ [cos(|ω[n+1]|Δt/2), a*sin(|ω[n+1]|Δt/2)]

También podría usar las otras cantidades como la velocidad angular promedio, por ejemplo (ω[n] + ω[n+1])/2.