2 votos

Derivada temporal de la mezcla de un par de curvas de cuaternión

Tengo dos curvas ${\bf q}_0(t), {\bf q}_1(t)$. Cada curva mapea el tiempo $t$ a un cuaternión unitario. La construcción de estas curvas no es importante aquí, aunque tenemos las respectivas derivadas temporales de las curvas dadas por $\dot{\bf q}_0(t), \dot{\bf q}_1(t)$. Mi objetivo es encontrar un cuaternión unitario y su derivada temporal de las dos curvas mezcladas por algún parámetro $p \in [0, 1]$. Utilizando un slerp para el cuaternión unitario mezclado obtenemos ${\bf q} = {\bf q}_0 ({\bf q}^*_0 {\bf q}_1)^p$, donde ${\bf q}^*$ es el conjugado del cuaternión, y ${\bf q}^p = e^{p \log({\bf q})}$. Para efectos de esta discusión, asumamos que $p$ no depende del tiempo. Será en la solución final, pero por ahora no nos preocupemos por eso.

Mi pregunta es cómo calcular la derivada temporal $\dot{\bf q}$. Intuitivamente, parece ser algo de la forma $\dot{\bf q} = ((1 - p)\dot{\bf q}_0{\bf q}^*_0 + p\dot{\bf q}_1 {\bf q}^*_1) {\bf q}$, que son velocidades angulares interpoladas linealmente multiplicadas por el resultado de la mezcla. Esta fórmula obviamente es correcta para $p = 0$ y para $p = 1$. Estoy tratando de encontrar algún respaldo matemático para el caso general.

Naïvemente, tomar $\dot{\bf q} = \dot{\bf q}_0({\bf q}^*_0 {\bf q}_1)^p + {\bf q}_0 p ({\bf q}^*_0 {\bf q}_1)^{p - 1} (\dot{\bf q}^*_0 {\bf q}_1 + {\bf q}^*_0 \dot{\bf q}_1)$ no puede ser correcto en el caso general, debido a que el operador de producto no conmuta.

Necesitaría ayuda para encontrar la derivada temporal correcta. En particular, me gustaría saber si existe una fórmula general para $\frac{d}{dt}{\bf q}(t)^p$, para $p \in [0, 1]$ constante. Quizás alguien con conocimientos en grupos/álgebras de Lie pueda arrojar algo de luz sobre esto. Gracias por tu ayuda.

1voto

Gino Puntos 11

Actualización (ver mi respuesta anterior abajo): A veces la única forma de ver una solución es cuando te está gritando en el texto que acabas de escribir. El log lerp es una geodésica si la línea a través de $\log({\bf q}_0)$ y $\log({\bf q}_1)$ contiene el origen. Una forma de mover el origen hacia la línea es rotando los dos cuaterniones por ${\bf q}^*_0$, poniendo $\log({\bf q}^*_0{\bf q}_0)$ en el origen. Al realizar la mezcla en los cuaterniones rotados, y luego rotar el resultado nuevamente por ${\bf q}_0$, obtienes el resultado de la mezcla original ${\bf q} = {\bf q}_0\exp(p \log({\bf q}^*_0{\bf q}_1)) = {\bf q}_0 ({\bf q}^*_0{\bf q}_1)^p$.

La ventaja de hacerlo de esta manera con respecto al método anterior, además de seguir una geodésica, es que ahora uno de los Jacobianos está en el origen, que trivialmente es la matriz identidad. El Jacobiano en $2 \log({\bf q}^*_0{\bf q}_1)$ se utiliza entonces para encontrar la derivada temporal en términos del mapa exponencial para $\dot{\bf q}_1$. La derivada temporal del resultado de la mezcla $\dot{\bf q}$ se puede encontrar como el Jacobiano en $2 p\log({\bf q}^*_0{\bf q}_1)$ multiplicado por las velocidades interpoladas linealmente en coordenadas del mapa exponencial.

Respuesta anterior: He encontrado una solución que no es exactamente una respuesta a mi pregunta original, pero que funciona en mi caso. En lugar de mezclar usando un slerp, encontré que al mezclar mediante un lerp de mapas exponenciales, ${\bf q} = \exp( (1 - p) \log({\bf q}_0) + p \log({\bf q}_1) )$, la derivada temporal correspondiente $\dot{\bf q}$ no es muy difícil de calcular. Aunque este log lerp generalmente no sigue una curva geodésica en $S^3$, la mezcla se comporta lo suficientemente bien para mi propósito.

La velocidad angular del resultado de la mezcla en un punto dado en el tiempo se encuentra al realizar un lerp de las velocidades angulares después de transformarlas al espacio de parámetros del mapa exponencial (ambos en $\mathbb{R}^3$) utilizando el Jacobiano adecuado para coordenadas exponenciales (Chirikjian, Modelos Estocásticos, Teoría de la Información y Grupos de Lie, volumen 2, página 40).

0voto

runway44 Puntos 184

Puedes escribir $\overline{q_0(t)}q_1(t)=\cos\theta(t)+\sin\theta(t)\,\mathbf{u}(t)$ donde

$$ \theta(t)=\cos^{-1}\mathrm{Re}\big(\,\overline{q_0(t)}q_1(t)\big), \quad \mathbf{u}(t)=\frac{\mathrm{Im}\big(\,\overline{q_0(t)}q_1(t)\big)}{\|\mathrm{Im}\big(\,\overline{q_0(t)}q_1(t)\big)\|} $$

Luego $(\overline{q_0}q_1)^p=\cos p\theta+\sin p\theta \,\mathbf{u}$, y puedes diferenciar a partir de ahí. Por supuesto, obtendrás problemas de continuidad e indefinición posibles siempre que $q_1=\pm q_0$. No sé cuál es el contexto aquí, pero podría ser posible decir $\overline{q_0}q_1=\exp(\mathbf{v})$ donde $\mathbf{v}(t)$ es una curva de espacio tridimensional (nota que $\mathbf{v}$ determina $\overline{q_0}q_1$ pero no viceversa, por lo que en cierto sentido $\mathbf{v}$ sería algo más fundamental que conocer). Si eliges ese camino, aún tendrías que expandir $\exp(p\mathbf{v})$ con la fórmula de Euler para diferenciar, o usar la serie de potencias (y ten en cuenta que la derivada de $\mathbf{v}(t)^n$ tendrá $n$ términos que no son "similares" y no se combinan).

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