Capítulo 13. Poses temporales y cadenas de poses

Tabla de contenidos

Notación
Poses estáticas y cadenas de poses estáticas
Entrada y salida
Constructores
Conversión de tipos
Accesores
Transformaciones
Sistema de referencia espacial
Operaciones de distancia
Comparaciones
Composición de cadenas de poses
Poses temporales y cadenas de poses temporales
Validez de las poses temporales y de las cadenas de poses
Entrada y salida
Constructores
Conversión de tipos
Accesores
Transformaciones
Modificaciones
Restricciones
Sistema de referencia espacial
Operaciones de cuadro delimitador
Operaciones de distancia
Relaciones siempre y alguna vez
Relaciones espaciotemporales
Comparaciones
Agregaciones
Operaciones espaciales
Simplificación
Indexación
Soporte de OGC GeoPose v1.0
Entrada y salida JSON
Renormalización de cuaterniones
Accesores de ángulos de Euler
Registro de metadatos de marcos
Transformación rígida cuerpo↔mundo
E/S JSON temporal
Documentos compuestos de cadena y de grafo

El tipo pose se utiliza para representar la ubicación y la orientación de objetos geométricos dentro de sistemas de coordenadas anclados a la superficie de la Tierra o dentro de otros sistemas de coordenadas astronómicas. La ubicación se representa mediante un punto 2D o 3D. Para las poses 2D, la orientación se define mediante un ángulo de rotación en (-π, π] expresado en radianes. Para las poses 3D, la orientación se define mediante cuatro valores flotantes W, X, Y, Z, que representan un cuaternión unitario Q = W , X , Y , Z donde Q2 = W2 + X2 + Y2 + Z2 = 1 .

El constructor de poses acepta cuaterniones cuya norma dista como mucho 1e-3 de la unidad (una tolerancia lo bastante amplia como para absorber la deriva del integrador típica de los clientes de fusión de sensores, como las IMU y los entornos de ejecución de RA/RV), y a continuación los renormaliza a norma exactamente unitaria antes de almacenarlos. Las normas muy alejadas (por ejemplo, el caso de error evidente (1, 1, 1, 1), donde |q| = 2), los cuaterniones nulos y los cuaterniones con componentes NaN/Inf se rechazan de entrada. La representación en disco es por tanto independiente de la higiene de coma flotante de quien llama, y el código posterior de comparación, hash, SLERP y descomposición de Euler puede confiar en el invariante de norma unitaria.

El grupo de trabajo de estándares GeoPose (SWG), que trabaja bajo los auspicios del Open Geospatial Consortium, ha definido un estándar para intercambiar información de poses entre distintos usuarios, dispositivos y plataformas. Se puede encontrar más información sobre el estándar en el repositorio de GitHub del SWG GeoPose.

El tipo pose sirve como tipo base para definir el tipo de pose temporal tpose. El tipo tpose tiene una funcionalidad similar al tipo de punto temporal tgeompoint. Por lo tanto, la mayoría de las funciones y operadores descritos anteriormente para el tipo tgeompoint también son aplicables para el tipo tpose. Además, hay funciones específicas definidas para el tipo tpose. En este capítulo cubrimos estas funciones.

El tipo tpose se utiliza para definir el tipo trgeometry (es decir, geometría rígida temporal) definido en el siguiente capítulo. La implementación de estos tipos en MobilityDB se ha estudiado en la siguiente tesis doctoral.

El tipo posechain representa un cuerpo cuyas partes se sitúan unas respecto de otras: una cámara sobre un cardán sobre un vehículo, o un brazo cuyo antebrazo se sitúa respecto del brazo. Una cadena de poses es una lista ordenada de al menos una pose. El primer eslabón se expresa en el marco exterior de la cadena, y cada eslabón posterior se expresa en el marco que define el eslabón anterior, de modo que un eslabón indica dónde se sitúa una parte respecto de la parte que la sostiene y no respecto del mundo.

El estándar OGC GeoPose denomina a esta estructura una cadena de transformaciones de marcos, donde cada transformación es un par de marcos de referencia en el que el marco exterior es el dominio y el marco interior es el rango. El estándar establece que un marco interior no puede ser un marco topocéntrico, por lo que una cadena lleva exactamente un marco que nombra un lugar sobre la tierra, en su exterior. De ello se derivan dos propiedades, ambas verificadas: toda la cadena tiene un solo SRID y todos los eslabones tienen la misma dimensión. Solo el eslabón exterior puede ser geodésico y solo el eslabón exterior puede llevar un SRID.

Cuando el marco exterior es geográfico, la posición del eslabón exterior está en grados mientras que la traslación de un eslabón posterior está en metros a lo largo de los ejes locales Este-Norte-Arriba en su marco padre. La composición realiza esa suma en coordenadas geocéntricas y lee de vuelta la posición como geográfica, de modo que una cadena sobre un marco geográfico se compone sobre el elipsoide y no en el plano, y la orientación se vuelve a expresar respecto de la base Este-Norte-Arriba en la posición que alcanza la composición.

La composición de todos los eslabones da la pose del marco más interior en el marco exterior de la cadena, que es lo que devuelve la conversión al tipo pose. Esa única conversión otorga a una cadena toda la superficie definida para las poses, de modo que el tipo en sí permanece reducido. Los dos tipos responden por tanto a las mismas preguntas, y este capítulo declara cada operación una sola vez, nombrando el tipo solo donde la respuesta depende de él.

Lo que declaraTipo baseTipo conjuntoTipo temporal
Una colocaciónposeposesettpose
Una composición de colocacionesposechainposechainsettposechain

Notación

La mayoría de las funciones y los operadores para tipos temporales descritos en los capítulos anteriores pueden aplicarse a las poses y a las cadenas de poses. Por tanto, en las signaturas de las funciones, la notación base representa una pose o una posechain y la notación ttype un tpose o un tposechain. Para evitar redundancia, presentamos a continuación solo lo que es específico de los dos tipos.

Una signatura que responden ambos tipos los nombra como una alternativa, {pose,posechain}, y una signatura que responde solo uno de ellos nombra ese. Una función cuyo nombre difiere entre los dos conserva una línea propia, de modo que tpose(pose,timestamptz) y tposechain(posechain,timestamptz) nunca se colapsan en un nombre invocable que no existe.