Foto: José Gabriel Almánzar/Christian Gómez. El trabajo de campo en el campus no es que sea “campo a través”, pero parece que pone a la gente contenta.
Ver portal de la asignatura
Familiarizarse con el procesamiento de datos GNSS: Los y las estudiantes aprenderán a descargar, convertir y analizar datos GNSS recolectados en el campo utilizando diferentes herramientas, con el fin de obtener soluciones precisas de posición.
Evaluar la calidad de datos GNSS crudos: A través de la inspección visual de los archivos en formato RINEX y el uso de herramientas especializadas como RTKLib, los estudiantes identificarán posibles problemas en las observaciones, como saltos de ciclo o interrupciones en las señales.
Convertir coordenadas a WGS84: Los estudiantes utilizarán el servicio HTDP del NGS (NOAA) para convertir las coordenadas obtenidas del procesamiento GNSS a WGS84, ajustándose a las normas de referencia geodésica internacional.
Generar soluciones fijas mediante posprocesamiento GNSS: A través de herramientas de posprocesamiento como RTKPOST, los estudiantes utilizarán las coordenadas de la base para obtener soluciones de alta precisión para las coordenadas del rover, consolidando el ciclo de procesamiento de datos GNSS.
Vídeo
Vídeo de apoyo para obtener soluciones fijas usando observables del rover y observables de ocupación estática de la base. El vídeo muestra el proceso completo de obtener soluciones fijas por posproceso. Lo grabé hace unos dos años en el aula FC-203 para estudiantes que estaban, en ese momento, usando algunas de las PC en dicho espacio (escucharán personas preguntando sobre el proceso). La versión mencionada de RTKLib en el vídeo es vieja, así que descarga la más reciente (ver abajo enlace para descargar RTKLib-Ex). Otro detalle importante: dado que en dicha práctica colocamos una base móvil, en el vídeo me verán obtener las coordenadas precisas de dicha base móvil. En este caso, es decir, en la práctica actual, la base es fija, y sus coordenadas precisas ya fueron obtenidas por medio de solución PPP (ver más abajo), por lo que no tendrás que obtener las coordenadas de la base por solución PPP. Eso sí, tendrás que convertir la coordenada que se encuentra actualmente en ITRF a WGS84, pues RTKLib-Ex sólo trabaja con coordenadas en WGS84.
-Software:
Converter de Unicore. Para convertir archivos Unicore (normalmente son de extensión .log
, pero a veces vienen en extensión .unc
), usar Converter, que se encuentra aquí
RTKLib-EX, antiguamente “Demo5”. Descarga la versión más reciente de “RTKLIB-EX”. A la fecha de elaborar esta práctica, la más reciente era “RTKLIB-EX 2.5.0”. Con independencia de cuál sea la versión, si estás usando como sistema operativo Windows, te convendrá descargar el binario compilado, el cual se encuentra en el archivo de extensión .zip
(por ejemplo v2.5.0.zip).
u-center. Sirve para convertir archivos de formato u-blox. ¡¡Importante, descarga la versión 25.06 o la que se encuentre vigente para trabajar con archivos generados por hardware F9; no descargues ni instales u-center 2 para esta práctica!!
Convierte tus archivos de observaciones crudas (raw) a formato RINEX v3.04. Las observaciones crudas contienen las mediciones GNSS (pseudorango, fase portadoras, doppler, SNR, etc.) y las efemérides (órbitas de los satélites). Los archivos de observaciones crudas pueden estar en distintos formatos, dependiendo del hardware usado. En este caso, tienes dos tipos de hardware.
Tengo por costumbre guardar las soluciones RTK (las que se tomaron en terreno) junto con las observaciones crudas (me gusta quedarme con todo para tener más elementos de comparación). Por lo tanto, los archivos
.ubx
y.log
contienen también soluciones RTK en formato NMEA, las cuales puedes visualizar en RTKPLOT (de RTKLib-Ex) o con cualquier otro software capaz de “parsear” sentencias NMEA (investiga qué son sentencias NMEA). Sin embargo, en esta práctica lo que te pido es que generes soluciones fijas por posproceso usando las observaciones crudas, y las efemérides contenidas en los archivos.ubx
y.log
y usando dos bases. Por lo tanto, no usarás las soluciones RTK que ya vienen en los archivos.ubx
y.log
, pero las tienes en los archivos por si quieres verlas y contrastar.
Los archivos Unicore (casi seguramente tienen extensión .log
, pero también podrían ser .unc
), los podrás convertir con la herramienta Converter
; ahora también RTKLIB-EX los convierte, pero había algunos problemillas meses atrás (desconozco si se resolvieron; en las últimas releases se asegura que sí, pero habría que hacer pruebas y no me fío). Te recomiendo que conviertas tus archivos Unicore (extensión .log
), de base y de rover, a formato RINEX (v 3.04) usando la herramienta Converter
; desmarca la opción Obs2Range, y desmarca teqc. Documéntate sobre el formato RINEX.
En el caso de los archivos u-blox (extensión .ubx
), con cualquiera de las herramientas de RTKLib, denominadas, RTKCONV (interfaz gráfica) o convbin
(terminal), convierte los archivos de formato U-blox (extensión .ubx
) a RINEX v3.04.
En ambos casos, además de los observables, obtendrás las efemérides (órbitas de los satélites) en formato RINEX, las cuales necesitarás en el posproceso. Las efemérides tienen extensión ..rnx
, .nav
, o también .##N
, ##.G
, .##L
, .##C
o .##P
(donde ##
son dos dígitos que indican el año). Cuando RTKCONV convierte un archivo .ubx
a RINEX, las efemérides se almacenan en un archivo .nav
(todas las constelaciones mezcladas, GPS, GLONASS, Galileo, BeiDou). Por otro lado, Converter
genera las efemérides en archivos separados por constelación, pero también produce un archivo mezclado de extensión .##P
(en tu caso seguramente será .25P
); dicho archivo es más cómodo de usar en RTKPOST, pues al igual que el .nav
, contiene las efemérides de todas las constelaciones.
Simple inspección visual de los RINEX, tanto los de las bases como los de los rovers
Con RTKLib, identificando si hay saltos de ciclo (cycle slips), observaciones interrumpidas, *DOP. Tendrás que documentarte al respecto.
Para obtener soluciones precisas (de error centimétrico y subcentimétrico) por posicionamiento diferencial (usando, como mínimo, un equipo base y otro móvil o “rover”) es necesario conocer las coordenadas precisas de la base. Dichas coordenadas pueden calcularse usando observaciones de larga duración; una semana de observaciones reduce el error al milímetro. Para esto, se usa software de escritorio (e.g. GAMIT/GLOBK) o servicios en línea. En esta práctica, te facilitaré las coordenadas de las bases que opero ya calculadas por un servicio en línea, por lo que no tendrás que obtenerlas, PEEEEERO, tendrás que transformarlas de ITRF a WGS.
Aclarar que, para fines de reproducibilidad, necesito dejar documentado cómo obtuve las coordenadas de la base (algunos detalles no te servirán para la práctica, pero debes conocerlos). Igualmente, te explico a continuación cómo las bases que opero transmiten mensajes de corrección en tiempo real para RTK.
Para hacer RTK, que es el mecanismo por el cual obtuvimos soluciones precisas en el terreno, usamos mensajes RTCM, los cuales son transmitidos por un caster NTRIP (busca y aprende sobre estos protocolos). Como cualquier streaming NTRIP, la coordenada de la base se transmite en uno de los mensajes RTCM (aprende sobre los identificadores numéricos de los mensajes RTCM). El servicio de transmisión que uso es rtk2go.com, un caster NTRIP basado en SNIP (busca SNIP y aprende sobre dicho software).
La “base u-blox” usa un módulo u-blox ZED-F9P (archivo extensión .ubx
en la carpeta “bases”). Estos son los detalles de la solución obtenida por PPP:
geofis_ovni
La “base Unicore” usa un módulo UM980 (archivo extensión .log
en la carpeta “bases”). Estos son los detalles de la solución obtenida:
geofis_mbase
Conserva dicha coordenada, pues es la que deberás usar en RTKLib-Ex para generar las soluciones fijas por posproceso.
Usa RTKLib-Ex para hacer posproceso. Si tienes otro software, mientras sea de código abierto, úsalo; de lo contrario, si es de código privativo, úsalo sólo para tus propios fines, pero no lo uses para reportar tus resultados en la práctica.
En RTKLib-Ex puedes usar la herramienta RTKPOST (interfaz gráfica) o rnx2rtkp (línea de comandos). Necesitarás las coordenadas de las bases en WGS84 para esto. Para facilitar las cosas, obtén las soluciones respecto del punto de referencia de la antena (Antenna Reference Point, ARP), por lo que tendrás que restar los 2 metros de jalón. Esto se lo debes indicar a RTKPOST (o a rnx2rtkp si usas línea comandos) en el argumento “Delta-E/N/U (m)”.
Deberás generar cuatro soluciones. Dado que tienes dos colectas de rover (u-blox y Unicore) y dos bases (u-blox y Unicore), deberás generar las siguientes soluciones:
En cada caso deberás realizar dos procesamientos, por lo que te saldrán dos archivos por cada solución: uno para obtener la solución fija promediada, y otro para obtener las soluciones de cada época (“época por época”, epoch-by-epoch). En total, generarás 8 archivos.
Muestra los resultados de tus soluciones promediadas en una tabla como ésta:
Rover | Base | Resultado (LLH o XYZ) | Observaciones |
---|---|---|---|
u-blox | u-blox | ||
Unicore | u-blox | ||
u-blox | Unicore | ||
Unicore | Unicore |
O si lo prefieres, en una tabla como ésta (en cada celda, colocarías tus soluciones promediadas en formato LLH o XYZ):
Rover \ Base | u-blox | Unicore |
---|---|---|
u-blox | ||
Unicore |
Para gráficar las soluciones, ve a tu cuenta en el servidor RStudio, sube tus archivos de soluciones .pos
, carga la función personalizada pos_read_violin
usando el comando siguiente …
devtools::source_url(
paste0('https://raw.githubusercontent.com/geomorfologia-master/',
'datos-gnss-soluciones-fijas/refs/heads/main/R/funciones.R'))
… y evalúa dicha función con este comando …
archivos_pos <- list.files(pattern = '*.pos')
res <- pos_read_violin(archivos_pos, q_filter=1, export='gpkg',
export_path = "ppk_fix.gpkg",
export_layer = "ppk_fix",
plot_stat = "raw", stat_by = "archivo")
… y finalmente imprime el resultado en consola con esto …
res
… lo cual imprimirá un extracto de la tabla y un gráfico de violín. Si notas mucha dispersión, o si quieres ver cuál de las soluciones presenta mayor dispersión respecto de la media, podrías correr esto:
res <- pos_read_violin(archivos_pos, q_filter=1, export='gpkg',
export_path = "ppk_fix.gpkg",
export_layer = "ppk_fix",
plot_stat = "z", stat_by = "archivo")
res
El argumento export='gpkg'
genera un archivo GeoPackage (ppk_fix.gpkg) que puedes descargar y abrir en QGIS para representar cartográficamente las soluciones. El argumento export_layer
permite definir el nombre de la capa dentro del GeoPackage.
Compara los resultados obtenidos. Dado que obtendrás las soluciones época por época, con la prueba t de Student no emparejada, compara los siguientes pares de muestras en cada una de las componentes de coordenadas (X, Y, Z o Lat, Lon, H) para un nivel de significancia de 0.05:
Componente | Media de las diferencias | p | Sign. o no sign. |
---|---|---|---|
Lat / X | |||
Lon / Y | |||
H / Z |
Componente | Media de las diferencias | p | Sign. o no sign. |
---|---|---|---|
Lat / X | |||
Lon / Y | |||
H / Z |
Componente | Media de las diferencias | p | Sign. o no sign. |
---|---|---|---|
Lat / X | |||
Lon / Y | |||
H / Z |
Componente | Media de las diferencias | p | Sign. o no sign. |
---|---|---|---|
Lat / X | |||
Lon / Y | |||
H / Z |
Representa tus soluciones promediadas o época por época en RTKPLOT, el cual te permite mostrar dos archivos de soluciones a la vez. Si lo haces con QGIS, asigna simbología que permita distinguir qué soluciones estás mostrando.
Prepara un informe breve con estructura IMRaD (Introducción, Métodos, Resultados, Discusión), usando IA como apoyo si lo deseas (para bosquejar texto, tablas o figuras). Todo debe ser conciso: cada sección debe tener entre 3 y 4 párrafos cortos. Añade lista de referencias al final y citas en el texto (mínimo 3 fuentes).
Uso de IA: puedes apoyarte en herramientas de IA para redactar, resumir o formatear, pero debes verificar los contenidos, números y citas; no entregues texto sin revisar. Añade al final una breve nota: “Se utilizó IA para apoyo en redacción/edición/formato; verificación humana realizada.”
Tabla(s) y figura(s) numeradas: incluye al menos una tabla de promedios por combinación y una o dos figuras (p. ej., gráficos de violín de E/N/H; mapa opcional).
Hallazgos principales: reporta tendencias concisas (p. ej., menor varianza en Unicore@Unicore; sesgo vertical en u-blox@u-blox).
Pruebas de hipótesis: resume p-valores por componente y la significancia (p<0.05), referenciando una tabla de contraste (ver Tabla 2).
Calidad y anomalías: menciona FIX/float, outliers y cualquier incidencia (saltos de ciclo, pérdida de solución).
Incluye mínimo 3 fuentes y cítalas en el texto (elige un estilo y sé consistente: autor–año o numérico).
Sugerencias típicas (elige las reales que uses):
Formato de ejemplo (autor–año):