7 votos

Lo que ' s el mejor 3D sistema angular coordinar para trabajar con aplicaciones para smartphone

Esto es de mucha de la aplicación de una pregunta de matemáticas. Estoy teniendo problemas con los ángulos de Euler en el contexto de aplicaciones de smartphone. He estado trabajando con Android, pero me imagino que el mismo problema se plantea en cualquier sistema operativo que uno usa.

En el contexto de que es en 3D de los sensores, el sistema operativo Android está configurado para calcular una matriz de rotación $\mathbf{R}$, el cual es definido por

$$ \mathbf{R}=\left[ \begin{array} [c]{ccc}% E_{x} & E_{y} & E_{z}\\ N_{x} & N_{y} & N_{z}\\ G_{x} & G_{y} & G_{z}% \end{array} \right] $$

donde $x$, $y$ y $z$ son ejes de relación con el smartphone,

pic of smartfone showing x, y and z axes

y donde

$$ \begin{align*} \mathbf{E} & = \left( E_{x},E_{y},E_{z}\right) =\text{a unit vector which points East}\\ \mathbf{N} & = \left( N_{x},N_{y},N_{z}\right) =\text{a unit vector which points North}\\ \mathbf{G} & = \left( G_{x},G_{y},G_{z}\right) = \begin{array} [c]{l}% \text{a unit vector which points away from}\\ \text{the centre of the earth (Gravity vector)} \end{array} \text{ .} \end{align*} $$

Una vez $\mathbf{R}$ ha sido calculado, el sistema operativo Android calculará para usted los ángulos de Euler $\phi$, $\theta$ y $\psi$ donde

$$ \begin{array} [c]{lll}% \text{azimuth} & =\phi & =\text{rotation about }\mathbf{G}\\ \text{pitch} & =\theta & =\text{rotation about }\mathbf{E}\\ \text{roll} & =\psi & =\text{rotation about }\mathbf{N} \end{array} \text{ .} $$

La relación entre el $\mathbf{R}$ y $(\phi$, $\theta$, $\psi)$ está dada por

$$ \mathbf{R}=\left[ \begin{array} [c]{ccc}% \cos\phi\cos\psi-\sin\phi\sin\psi\sin\theta & \sin\phi\cos\theta & \cos \phi\sin\psi+\sin\phi\cos\psi\sin\theta\\ -\sin\phi\cos\psi-\cos\phi\sin\psi\sin\theta & \cos\phi\cos\theta & -\sin \phi\sin\psi+\cos\phi\cos\psi\sin\theta\\ -\sin\psi\cos\theta & -\sin\theta & \cos\psi\cos\theta \end{array} \right] \text{ .} $$

El azimut $\phi$ es particularmente importante en el resultado, porque la $\phi=0$ corresponde a la dirección del norte. Sin embargo, hay un problema bien conocido con estos ángulos de Euler, la cual es conocida como Gimbal lock. Al $\theta=\pm\frac{\pi}{2}$ el sistema de coordenadas es denerate en el sentido de que la combinación de $\phi\pm\psi$ está definido, pero las cantidades individuales $\phi$ $\psi$ no están definidos.

En el contexto de aplicaciones de smartphone, esto significa que la determinación de la dirección del norte es difícil cuando el dispositivo no está en posición horizontal sobre una mesa. Cuanto más se acerque el dispositivo llega a ser vertical, la menos fiable para coordinar el sistema. En stackoverflow.com algunas personas recomiendan la conmutación de ejes al $\theta$ se mueve lejos de la $0$ a fin de evitar Gimbal lock, pero me parece que la solución que presenta otros problemas, tales como saltos en $\phi$, $\theta$ y $\psi$ cuando el sistema de coordenadas está conectado.

Así que mi pregunta es, en lugar de $\phi$, $\theta$ y $\psi$ como se definió anteriormente, existe una mejor manera de definir un angular del sistema de coordenadas para que expresan la orientación de un smartfone en relación a los vectores $\mathbf{E}$, $\mathbf{N}$ y $\mathbf{G}$? En particular, existe un sistema de coordenadas que es mejor para definir la dirección del norte, que funcionará si el dispositivo está en posición vertical o en posición horizontal sobre una mesa.

Aclaración Cualquiera que sea la mejor metodología es, en consecuencia, debe haber algún tipo de ángulo acimutal que puede ser explícitamente calcula a partir de la matriz de rotación $R$, lo que representa el ángulo a través del cual el dispositivo debe ser girado de manera que es apuntando hacia el norte.

4voto

Mark Kelleher Puntos 32

La publicación de la pregunta de ayer se ha centrado mis pensamientos sobre este problema, y creo que he llegado a una respuesta. En términos de la matriz de rotación $\mathbf{R}$ que me define en la pregunta, creo que la mejor definición de la azimut $\phi$ (es decir, el ángulo a través del cual el teléfono debe estar girado de manera que es apuntando hacia el norte) está dada por

$$ \phi=\bronceado^{-1}\left( \frac{E_{y}-N_{x}}{E_{x}+N_{y}}\right) \text{ .} $$

Quiero dar una explicación completa a continuación, pero una de mis principales preocupaciones es la dirección de lo que la gente espera cuando el uso de un smartphone. Si el smartphone está acostado sobre una mesa y hay un compás de flecha apuntando hacia el norte en la dirección de la arista más larga del teléfono como se muestra en la siguiente imagen

smartphone showing compass pointing north

entonces, si el teléfono está rotado con respecto al plano de la posición horizontal a una posición vertical girando a lo largo del borde corto de teléfono, las direcciones cardinales y, por lo tanto el azimut $\phi$ no se debe cambiar. Por supuesto, con el teléfono en posición vertical en la flecha que apunta hacia el Norte cuando el teléfono era plana es ahora realmente apuntando lejos de la tierra y de la recta en el espacio, pero la gente interpreta que apunta hacia arriba flecha apuntando hacia delante en dirección horizontal. He probado la fórmula anterior para $\phi$ en mis dispositivos android y como lo que puedo decir que funciona bien. (PD: he publicado la correspondiente pieza de código que estoy usando aquí en stackoverflow.com.)

En la elaboración de mi respuesta, yo uso tres ángulos que yo llamo azimut $\phi$, cancha $\theta$ y el eje de cabeceo $\psi$ $$ \begin{array} [c]{lll}% \text{azimuth} & =\phi & =\text{rotation about }\mathbf{G}\\ \text{pitch} & =\theta & =\text{rotation about axis at angle }\psi\text{ in the horizontal }\mathbf{E}\text{-}\mathbf{N}\text{ plane}\\ \text{pitch axis} & =\psi & =\text{angle in horizontal plane for pitch rotation} \end{array} $$ Mientras que los tres ángulos de Euler corresponden a tres rotaciones, $\phi$, $\theta$ y $\psi$ aquí sólo corresponden a dos rotaciones, es decir,

$$ \mathbf{R}=\mathbf{R}_{\mathbf{G}}\left( \phi\right) \mathbf{R} _{\mathbf{EN}}\left( \theta|\psi\right) $$

donde

$$ \begin{align*} \mathbf{R}_{\mathbf{G}}\left( \phi\right) & \mathbf{=}\left[ \begin{array} [c]{ccc}% \cos\phi & \sin\phi & 0\\ -\sin\phi & \cos\phi & 0\\ 0 & 0 & 1 \end{array} \right] \\ \mathbf{R}_{\mathbf{EN}}\left( \theta|\psi\right) & \mathbf{=}\left[ \begin{array} [c]{ccc} \cos^{2}\psi+\sin^{2}\psi\cos\theta & -\sin\psi\cos\psi\left( 1-\cos \theta\right) & \sin\psi\sin\theta\\ -\sin\psi\cos\psi\left( 1-\cos\theta\right) & \sin^{2}\psi+\cos^{2}\psi \cos\theta & \cos\psi\sin\theta\\ -\sin\psi\sin\theta & -\cos\psi\sin\theta & \cos\theta \end{array} \right] \end{align*} $$ así que haciendo la multiplicación de la matriz de resultados en una matriz de $\mathbf{R}$, que está dada por $$ {\scriptsize \left[ \begin{array} [c]{ccc}% \cos\psi\cos\left( \phi+\psi\right) +\sin\psi\sin\left( \phi+\psi\right) \cos\theta & -\sin\psi\cos\left( \phi+\psi\right) +\cos\psi\sin\left( \phi+\psi\right) \cos\theta & \sin\left( \phi+\psi\right) \sin\theta\\ -\cos\psi\sin\left( \phi+\psi\right) +\sin\psi\cos\left( \phi+\psi\right) \cos\theta & \sin\psi\sin\left( \phi+\psi\right) +\cos\psi\cos\left( \phi+\psi\right) \cos\theta & \cos\left( \phi+\psi\right) \sin\theta\\ -\sin\psi\sin\theta & -\cos\psi\sin\theta & \cos\theta \end{array} \right]} $$ La idea de estas coordenadas es que siempre hay un ángulo de Euler tipo de sistema de coordenadas donde el rollo de ángulo es cero. Si el rollo de ángulo es siempre cero puede ser descartada, pero entonces uno necesita un ángulo adicional para especificar el eje de la cancha de rotación. El uso de los ángulos de Euler para describir la rotación de un smartphone de la horizontal $\mathbf{E}$- $\mathbf{N}$ avión, el tono corresponde a una rotación del plano a lo largo de un eje, el rodillo corresponde a una rotación del plano a lo largo de un segundo eje perpendicular, y rotaciones a lo largo de otros ejes son descritos por una combinación de pitch y roll. Con la $\left( \phi,\theta,\psi\right) $ coordenadas presentadas aquí sólo hay un ángulo de $\theta$ a describir la rotación del avión, pero entonces el ángulo de $\psi$ es necesario para describir cual es el eje para girar alrededor. En el contexto de los smartphones, el ángulo de paso $\theta$ sólo representa el teléfono de inclinación de fuera del plano horizontal, independientemente de que el eje se ha inclinado a lo largo.

Pensando así, cualquier rotación 3D puede ser construido a partir de una rotación $\mathbf{R}_{\mathbf{G}}\left( \phi\right) $ sobre el eje vertical $\mathbf{G}$, y una segunda rotación $\mathbf{R}_{\mathbf{EN}}\left( \theta|\psi\right) $ a tener el dispositivo en el plano perpendicular a $\mathbf{G}$. Con $\mathbf{R}$ especificado anteriormente como una función de $\phi$, $\theta$ y $\psi$, es sencillo demostrar que $$ \begin{align*} \cos\phi\left( 1+\cos\theta\right) & =E_{x}+N_{y}\\ \sin\phi\left( 1+\cos\theta\right) & =E_{y}-N_{x} \end{align*} $$ y por lo tanto el $\tan^{-1}$ la fórmula para $\phi$ dado anteriormente. Vale la pena señalar que $$ \begin{align*} \sin\left( \phi+2\psi\right) \left( 1-\cos\theta\right) & =-E_{y}-N_{x}\\ \cos\left( \phi+2\psi\right) \left( 1-\cos\theta\right) & =E_{x}-N_{y}\text{ .} \end{align*} $$ También tenga en cuenta que si $\psi\rightarrow\psi+\pi$ $\theta\rightarrow-\theta$ $\mathbf{R}$ es invariable. Mientras que el ángulo de Euler sistema es degenerado cuando su $\theta=\pm\frac{\pi}{2}$, $\left( \phi,\theta,\psi\right) $ sistema de coordenadas es degenerado en$\theta=0$$\theta=\pi$. El $\theta=0$ degeneración se produce cuando el dispositivo está en posición horizontal sobre la mesa hacia arriba, y en esa situación no hay rotación de la horizontal $\mathbf{E}$-$\mathbf{N}$ plano es necesario para $\psi$ es indefinido. Sin embargo, $\phi$ está bien definido, por lo que si $\phi$ es la meta, entonces el hecho de que $\psi$ es indefinido no importa.

El $\theta=\pi$ degeneración se produce cuando el dispositivo está acostado boca abajo sobre la mesa, cuando las $E_x+N_y=E_y-N_x=0$, y este es un caso más interesante. En esta situación, $\phi$ es indefinido, a pesar de $\phi+2\psi$ está definido. El propósito de esta $\left(\phi,\theta,\psi\right) $ sistema de coordenadas es capturar la idea de que la gente espera que la dirección de la brújula (es decir, el azimut $\phi$) sin cambios cuando la rotación de un teléfono de una horizontal $\theta=0$ posición vertical $\theta=\frac{\pi}{2}$ posición. Sin embargo, si la rotación continúa y $\theta$ aumenta más allá de $\frac{\pi}{2}$, entonces como el teléfono enfoques de la horizontal $\theta=\pi$ posicion invertida, una brújula flecha que había estado apuntando hacia el norte cuando el dispositivo horizontal de ahora estará apuntando al sur si es la dirección que permanece fija en la pantalla del smartphone. Así como el $\theta=\pi$ degeneración se acercó, el teléfono inteligente es no comportarse de una manera apropiada. Una manera de lidiar con esto sería interruptor de sistemas de coordenadas en algún punto entre el$\frac{\pi}{2}$$\pi$, lo que podría alterar la dirección de la flecha por $\pi$ y hacer que el smartphone se comportan en una manera apropiada de nuevo. Sin embargo, cabe señalar que casi todo el tiempo cuando las personas están utilizando sus teléfonos $\left\vert \theta\right\vert\le\frac{\pi}{2}$, por lo que el comportamiento inapropiado cerca de $\theta=\pi$ cuando el teléfono está al revés no debería ser un problema en la práctica.

He buscado en el internet y tenía una mirada en el artículo Shuster, M., "Una Encuesta de actitud representaciones", en Revista de las Ciencias de la Astronáutica 41(4):1993 que fue sugerido en otra respuesta, pero no he sido capaz de encontrar ninguna referencia a las $\left( \phi,\theta,\psi\right) $ sistema de coordenadas definido aquí. En tales maduro de la zona como el 3D rotaciones, parece poco probable que nadie ha definido rotaciones de esta manera antes? Sin embargo, la aparición de los smartphones ha proporcionado una nueva aplicación para la rotación de las matrices, por lo que tal vez no ha sido previamente aplicaciones donde este tipo de sistema de coordenadas ha sido la adecuada?

2voto

user12289 Puntos 6

El pensamiento de los vectores que se han incrustado dentro de la matriz de rotación no es probablemente la mejor manera de mirar. En su lugar, piense en lo siguiente:

$\mathbf{v}^n = \mathbf{R}_{b}^{n} \mathbf{v}^b$

donde $\mathbf{v}^b$ es de algunos vectores $\mathbf{v}$ resuelto en el cuerpo fijo sistema de coordenadas y $\mathbf{v}^n$ es el mismo vector de resolverse en el nivel local ("navegación") de marco. El símbolo $\mathbf{R}_{b}^{n}$ lee como la matriz de rotación del bastidor del cuerpo para el local marco de nivel.

La matriz de rotación $\mathbf{R}$ únicamente define la rotación. y es válido para todas las posibles rotaciones. Todas las otras representaciones de la rotación de tener múltiples valores que representan la misma rotación (por ejemplo, Unidad de Cuaterniones), o de otras representaciones que no pueden ser limpiamente representados, tales como el gimbal lock problema con los ángulos de Euler como usted ha identificado previamente. Las otras representaciones (Cuaterniones en particular) tienen otras ventajas prácticas en algunos (muchos?) de las circunstancias.

Hay varios otros represenations de la actitud, la mayoría de los cuales son raramente utilizados en la práctica, o son de valor teórico único. Un buen resumen en un papel por Shuster, M., "Una Encuesta de actitud representaciones", en Revista de las Ciencias de la Astronáutica 41(4):1993, pero es bastante pesado de leer :)

Por lo tanto, esto responde a tu pregunta de ¿hay un sistema de coordenadas que es mejor para definir la dirección del norte, que funcionará si el dispositivo está en posición vertical o en posición horizontal sobre una mesa, pero sospecho que habrá más partes a la pregunta.

2voto

Muphrid Puntos 12245

Cuaterniones-o el de mi preferencia, rotores en un álgebra geométrica-que se hace referencia con respecto a los del norte no sólo te dice el ángulo a través del cual el dispositivo debe ser girado de manera que $Y$ coincide con $N$ pero lo que de plano el dispositivo debe ser girado en lograr eso.

Empezamos con una referencia de la orientación: $X = E, Y = N, Z = G$. Una rotación operador $\underline R$ mapas de $X \to X'$ y así sucesivamente--esto representa una rotación del dispositivo mientras se $E, N, G$ permanecen fijos. Para mí, esta es una buena interpretación.

Uno de los puntos importantes acerca de las rotaciones en el espacio 3d es que una composición de rotaciones es en sí mismo una rotación. Cada rotación tiene un único plano, y que la información es almacenada en el rotor 3d.

Vamos a trabajar un problema de ejemplo para demostrar el poder del álgebra geométrica y los rotores. Algunos de los conceptos involucrados aquí pueden ser extranjeros-en particular, la geometría del producto. Aquí están algunas de las propiedades básicas de la geometría del producto en una base ortonormales:

$$EE = NN = GG = 1, \quad EN = -NE, \quad NG = -GN, \quad GE = -EG$$

La geometría del producto es asociativo.

Ahora bien, consideremos el siguiente caso: se inicia el dispositivo en posición estándar $X = E$, etc. y es rotado en la $NG$ plano por $\pi/2$, y, a continuación, en la $EN$ plano por $\pi /2$. Queremos encontrar el ángulo de $Y$ $N$ - y $Y$ (después de estas rotaciones) en general. La respuesta debería ser obvia, gracias a nuestra elección de los ángulos. Primera $Y$$G$, y se queda allí después de la segunda rotación. Vamos a trabajar en él, sin embargo, con el formalismo de los rotores.

Rotores en 3d tomar de la siguiente forma: si $A$ $B$ son ortonormales de vectores en el plano de rotación, y la dirección de la rotación rotar $A$ a $B$, luego de una rotación en el plano de la $AB$ $\phi$ tiene el rotor $R$:

$$R = \exp(-AB \phi/2) = \cos \frac{\phi}{2} - AB \sin \frac{\phi}{2}, \quad \underline R(a) = R a R^{-1}$$

Vamos a calcular nuestros rotores para la secuencia descrita. Primero tenemos una rotación por $\pi/2$ $NG$ avión:

$$R_1 = \cos \frac{\pi}{4} - NG \sin \frac{\pi}{4} = \frac{1 - NG}{\sqrt{2}}$$

Del mismo modo, para la posterior rotación en el $EN$ plano, tenemos

$$R_2 = \frac{1 - EN}{\sqrt{2}}$$

La comodidad de los rotores es que podemos multiplicar a la cadena de rotaciones, sin tener que multiplicar conjunto de las matrices.

$$R = R_2 R_1 = \frac{1}{2} (1 - NG - EN + ENNG) = \frac{1}{2} (1 - NG - EN - GE)$$

Recuerde que $NN = 1$ para obtener la sobre simplificación. Podemos interpretar esto como la red de rotación como en el plano perpendicular a $N + E + G$. Tenga en cuenta que el ángulo de rotación es $2\arccos \frac{1}{2} = 2\pi/3$, aunque sabemos que $Y = G$ solo $\pi/2$ lejos de la posición estándar $Y = N$. Este es un punto importante. Esta $2\pi/3$ y el eje de rotación de $E + N + G$ describir completamente la rotación (y por lo tanto, cómo deshacer la rotación).

Usted puede, por supuesto, en lugar de decidir para el cálculo de la rotación de $N$ $\underline R(N)$y, a continuación, tomar el producto escalar, señalando que se obtiene que el ángulo entre el $N$ y su imagen. Que será el menor ángulo que restaurar $N = Y$, pero en general no restaurar el dispositivo a la posición estándar. Es, sin embargo, muy fácil de utilizar $N$ y a su imagen, $\underline R(N)$ a generar un nuevo rotor que gira de nuevo a $Y = N$ en el menor ángulo posible. Que requeriría introducir la cuña del producto, a pesar de que, así como la normalización de bivectors, que parece un poco fuera de alcance.

También hay algunos nitpicky detalles acerca de su problema y lo que Android proporciona a usted que serán de su interés. Por ejemplo, usted podría tener todo en términos de la $XYZ$ a empezar. Que no seriamente cambiar el método, sino que basta para hacer referencia a todo lo que en esa base, incluyendo su rotores y las rotaciones de los involucrados. Las sucesivas rotaciones sobre transformado ejes requieren un poco de cuidado, pero un resultado general es que no son equivalentes rotaciones que sólo utilizan ejes fijos en su lugar.

Edit: Oh, así que todo lo que realmente queremos es la proyección de $N$ a de la $XY$ plano. Bien, ¿por qué no se lo dices! Este cálculo se hace un poco tedioso, así que utiliza python geométrica del módulo de álgebra.

Empezar con un rotor $R = \alpha + \beta YZ + \gamma ZX + \delta XY$. La rotación de $Y$ debe, a continuación, señale el norte.

$$N = RYR^{-1} = 2(\alpha \delta + \beta \gamma)X + (\alpha^2 -\beta^2 + \gamma^2 -\delta^2) Y + 2(\gamma \delta - \alpha \beta) Z$$

Acaba de tirar el $Z$ componente, y ya está (usted tendrá que renormalize para obtener un vector unitario, pero usted puede conseguir el ángulo con respecto al $X$ en la forma habitual, utilizando arcotangente). Una cosa que podría plantear problemas es que si el dispositivo tiene su dimensión más larga apuntando directamente hacia arriba, a continuación,$N = Z$, y no puede haber ninguna proyección. Puede que simplemente no desea actualizar la brújula si hay un gran cambio o si usted puede reconocer que el $X$ $Y$ componentes del vector resultante $N$ son demasiado pequeños. Pero como usted ha dicho, es un caso extremo para el uso de un teléfono.

0voto

jlupolt Puntos 369

Una solución sería usar quaternions.

Conversión a y desde los ángulos de Euler se puede encontrar aquí.

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