Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

PyTrek

Última Actualización: 29 de noviembre de 2005 - Martes

Existen infinidad de programas de navegación urbana con GPS, pero no he encontrado ninguno especialmente orientado al senderismo o "trekking". Además, la inmensa mayoría de aplicaciones GPS requieren el uso de una unidad GPS "inteligente" y programable, o una PDA. Yo me propuse desarrollar algo "útil" utilizando Python y un teléfono GSM de última generación.

Desarrollar una aplicación de este estilo plantea retos únicos. Por un lado, la algorítmica es bastante trivial, pero el desarrollo en un entorno "simple" y limitado como el de un teléfono es un problema, sobre todo a la hora de diseñar una interfaz mínimamente atractiva y funcional. Además, la implementación actual (Marzo de 2005) de Python para los móviles Serie60 es bastante restringida. No se tiene acceso simple, por ejemplo, a sonidos o gráficos. Es previsible que la cosa cambie, pero ahora mismo la situación es ésta.

Aunque el proyecto PyTrek consta de varias aplicaciones, útiles en diversos entornos, para aprovechar todas sus funcionalidades se requiere una unidad GPS BlueTooth (por ejemplo, BT77) y un móvil Series60 con el intérprete de Python instalado.

El contenido de la distribución actual de PyTrek es:

  • gps2gnuplot.py: La entrada de esta filtro son coordenadas GPS recogidas con anterioridad. Su salida es un listado de coordenadas utilizables por GNUPLOT o aplicaciones de dibujo similares.

  • gps-pybluez.py: Aplicación de recogida de datos, directamente desde el ordenador. Requiere tener un ordenador con capacidad BlueTooth, y la librería "pybluez".

  • gps-series60.py: Aplicación de recogida de datos para teléfonos Series60. Se requiere instalar el intérprete de Python disponible para ese modelo de móvil. Yo utilizo un Nokia 6600.

  • latlong2utm.py: Aplicación que proporciona la posición UTM a partir de la latitud y longitud. El formato es "Grados Minutos . Decimales de minuto", seguido de la letra mayúscula que denota la dirección ("N", "S", "E", "W"). Por ejemplo, 40 grados, 20 minutos y 6 segundos norte, se escribe como "4020.10N".

    Los valores se redondean al metro más próximo, en cada eje.

  • Orbital_Elements/*: Por curiosidad, de vez en cuando realizo capturas de la situación actualizada de los satélites GPS. Es decir, la constelación GPS. Es un archivo histórico, aunque no es exhaustivo.

  • time2gps_closest.py: Esta aplicación toma en entrada un directorio local y un listado de coordenadas GPS previamente capturadas, y proporciona las posiciones GPS más próximas en tiempo a las fechas de los ficheros del directorio local. Su uso fundamental es el etiquetado de fotografías digitales.

    Obviamente, es imprescindible que la cámara digital tenga un reloj bien ajustado. De esta forma los ficheros tendrán una hora correcta. También hay que tener mucho cuidado al mover/copiar los ficheros en el ordenador, para preservar esa información.

    La latitud positiva es al norte del ecuador, y la longitud positiva es al este del meridiano cero.

  • time2gps_previous.py: Esta aplicación es similar a la anterior, pero en vez de proporcionar la posición más cercana en el tiempo, proporciona la posición más cercana anterior.

    La motivación para esta versión es la siguiente: Aunque a primera vista es preferible proporcionar la versión más cercana en el tiempo, en el caso concreto de las fotografías es muy normal detenerse en el camino un rato antes de sacar las fotografías. Pero una vez tomadas, volvemos a movernos rápidamente.

    En ese caso, que considero bastante habitual, es preferible dar una posición cercana anterior, no posterior.

  • TODO: Este fichero contiene ideas para el futuro desarrollo de PyTrek.

  • utm2latlong.py: Aplicación que proporciona la latitud y longitud a partir de una posición UTM.

    Este programa no admite formatos abreviados, es necesario especificar la zona y todos los dígitos. En caso de desconocer la letra, que es un valor redundante en UTM, se puede especificar "N" si la posición está en el hemisferio norte, o "M" si se trata del hemisferio sur.

    La respuesta sigue el formato descrito en latlong2utm.py.

    El resultado se redondea a la diezmilésima de minuto más próxima. Eso supone un error de 20 centímetros en el ecuador, en cada eje, aunque las fórmulas empleadas probablemente sean menos precisas que eso :).

Versiones

He ido etiquetando las versiones "estables" con las fechas y los nombres de las "salidas" en las que han sido probadas y validadas:

  • PyTrek-20050713-Zaragoza: (19Kbytes)

    Esta versión añade una pestaña adicional, "Astro", que muestra diversa información sobre el sol:

    • Alba: Hora y minuto en el que empieza a verse claridad en el horizonte.

    • Orto: Hora y minuto en la que aparece el primer rayo de sol. Se muestra, entre paréntesis, el azimuth del sol en ese instante.

    • Tránsito: Hora y minuto en el que el sol pasa por el meridiano local, que es el momento en que está más alto en el cielo. Entre paréntesis se indica la elevación del sol sobre el horizonte.

    • Ocaso: Hora y minuto en el que desaparece el último rayo de sol. No se muestra el azimuth en ese momento porque es igual a 360-azimuth del orto.

    • Crepúsculo: Hora y minuto en el que desaparece la luz del sol. Ya no hay luz suficiente para leer en el exterior.

    • Posición: Se muestra el azimuth y la elevación del sol en este preciso instante.

    La información de salida y puesta del sol es útil a la hora de planificar una excursión. La información de posición es útil a la hora de orientarse sin brújula.

    Toda esta información se calcula en función de la fecha, hora y posición GPS actual del observador. La precisión de los datos es mejor de cinco minutos, si bien los cálculos suponen que estamos a nivel del mar, o en una meseta más o menos llana. Se tiene en cuenta la refracción en la atmósfera, para el orto y el ocaso, y los tiempos del alba y el crepúsculo se dan para una posición del sol seis grados por debajo del horizonte (crepúsculo civil).

    ATENCIÓN: El programa *NO* funcionará correctamente dentro del círculo polar ártico y antártico.

    ATENCIÓN: Todas las horas se muestran respecto a la hora GMT. En España, hay que sumar una hora en invierno y dos horas cuando estamos en horario de verano, para ajustar el horario mostrado al tiempo civil español.

    Para realizar los cálculos, me he basado en esta página web.

  • 20050423-Alcala: (15Kbytes)

    La aplicación de recogida de datos para el móvil se ha ampliado considerablemente. Entre otras cosas, la interfaz de usuario se ha simplificado, de forma que el programa pueda ser utilizado de forma intuitiva por usuarios sin demasiada preparación. Se han añadido también muchas funcionalidades nuevas, cumpliendo "lenta pero inexorablemente" :-) con los objetivos iniciales de desarrollo de PyTrek.

    La interfaz de PyTrek (en el móvil) se ha convertido a "pestañas" ("tabs"). Su descripción es la siguiente:

    • Lat&Long:

      En la primera línea se muestra la hora del "fix" actual. Entre paréntesis se muestra la hora del "fix" anterior, para así conocer el período entre muestras.

      A continuación se muestra se muestra la latitud y longitud de nuestra posición. El formato es "Grados Minutos . Decimales de minuto". Es decir, "4026.1123N" significa 40 grados, 26.1123 minutos norte.

      En la siguiente línea se nuestra la altura a la que nos encontramos. Entre paréntesis se muestra la desviación respecto al elipsoide modelo de la Tierra. Es muy importante recordar que la precisión vertical del sistema GPS es bastante mala.

      El DOP nos da una idea de la precisión horizontal de la medida. Valores bajos implican mayor precisión. No se muestra la precisión vertical (VDOP).

      En la línea siguiente se indica el número de satélites que el receptor GPS está utilizando para darnos la posición. Si se usan menos de cuatro satélites, la posición se calcula suponiendo que estamos sobre la superficie del geoide terrestre. Si no es así, el error de posición puede ser importante. El siguiente dígito en esa línea indica si el "fix" es válido (valor "1") o no (valor "0").

      A continuación, se muestra la hora del último "fix" válido. Comparando ese valor con el de la primera línea podemos saber cuánto tiempo llevamos fuera de cobertura GPS y, por tanto, en una posición desconocida.

      Por último, se muestran los datos identificativos de PyTrek, que son sustituidos por un mensaje de error si hay algún tipo de problema en la conexión con el receptor GPS, vía BlueTooth.

    • UTM:

      Los primeros datos son iguales que en la pestaña anterior, al igual que la última linea de estado.

      En el centro de la pantalla se muestra "1" si estamos en cobertura GPS o "0" si no podemos obtener un "fix". En la misma línea, a continuación, se muestra la posición UTM en la que nos encontramos.

      Los datos de esta pantalla se actualizan en tiempo real.

      Esta información es muy útil para localizarnos en un mapa. Por ejemplo, los mapas del Instituto Geográfico Nacional, o los mapas del Ejercito español.

    • Waypoints:

      Esta pantalla nos da la distancia y el rumbo a diversos puntos de interés. La distancia se proporciona en metros. El rumbo se mide de forma horaria: "0" es norte, "90" es este, "180" es sur y "270" es oeste. Los puntos se listan por orden de distancia creciente.

      Los datos de esta pantalla se calculan cuando se accede a esta pestaña. Una vez visualizados, NO SE RECALCULAN EN TIEMPO REAL. Si se quiere obtener una nueva estimación, hay que salir de esta pestaña y volver a entrar en ella. Se ha programado así porque los cálculos matemáticos necesarios son muy lentos y complejos, y la batería es un bien preciado :).

      Si hay más puntos de interés de los que caben en la pantalla, podemos movernos utilizando el "joystick" del móvil, de forma vertical.

      El menú de PyTrek, cuando estamos en esta pestaña, cambia para que podamos añadir puntos de interés nuevos. Se pueden añadir tanto especificando nombre y coordenadas, como almacenando la posición actual.

      IMPORTANTE: Los puntos de interés introducidos de forma manual se pierden cuando se sale de PyTrek.

      A modo de demo, en esta versión de PyTrek se incluyen varios puntos de interés de ejemplo, referidos a puntos de GeoCaching en la zona metropolitana de Madrid.

    • Saver:

      Salvapantallas. Cuando tenemos activada esta pestaña, la pantalla se queda en blanco, y PyTrek hace el mínimo trabajo posible (básicamente, recoger los datos a través de BlueTooth y almacenarlos, si así se ha requerido). La idea es ahorrar el máximo de energía.

  • 20050318-Cuenca: (6Kbytes)

    La aplicación de recogida de datos para el móvil es prácticamente la misma que en la versión anterior, pero se han incluído muchas aplicaciones útiles: recogida de datos directamente desde un ordenador, paso de datos GPS recogidos a gráficos y mapas, y etiquetado de ficheros informáticos (concretamente fotografías digitales) con sus coordenadas geográficas.

  • 20050225-Roma: (4Kbytes)

    Esta versión permite recopilar posiciones GPS en la memoria interna del móvil. Dichas posiciones GPS pueden transferirse luego al ordenador, para procesarlas de la forma que se desee: obtención de mapas de recorrido, etiquetado de fotografías, etc. No obstante en este momento SOLO se dispone de la aplicación de recogida de datos.

    Las opciones disponibles son: cambiar el intervalo de recogida de datos (1, 5, 15, 60 segundos) y copiar el contenido de la RAMDISK interna del móvil (memoria volátil que se borra cuando el teléfono se apaga) a la memoria flash MMC externa.


Preguntas y respuestas frecuentes

  • ¿Por qué la aplicación de recogida de posiciones GPS del teléfono almacena los datos en la memoria interna en vez de en la memoria MMC?

    La memoria interna (RAMDISK) solo tiene unos 1.5 Mbytes de capacidad, y es volátil. Es decir, su contenido se borra cuando se apaga el móvil o éste se queda sin batería. Su gran ventaja es su velocidad de acceso, su bajo consumo y un número de escrituras ilimitado.

    En comparación, la memoria flash externa MMC conserva su contenido de forma indefinida y su capacidad es mucho mayor, pero adolece de un gravísimo problema: el número de escrituras que permite antes de empezar a fallar está muy limitado.

    En general, un sector de una memoria flash se puede escribir unas 100.000 veces antes de que se empiecen a corromper datos. Muchos sistemas de archivos, especialmente diseñados para entornos flash, intentan repartir las escrituras de forma más o menos uniforme por toda la memoria, de forma que todos los sectores se reescriban más o menos lo mismo, y la memoria dure lo máximo posible.

    La memoria flash interna del móvil utiliza un sistema de ficheros de este tipo.

    El problema de este tipo de formatos es que hay muchos diferentes, y no suelen estar disponible de forma nativa en los entornos informáticos habituales (léase, Windows). Por eso, el formato utilizado en la tarjeta externa es FAT, probablemente el formato más universal del mundo. Lamentablemente este formato sobreescribe constantemente los sectores iniciales de la memoria, cada vez que hay una escritura. Ello acorta considerablemente la vida útil de la misma.

    La estrategia obvia es reducir el número de escrituras externas. Es decir, en vez de realizar una pequeña escritura cada segundo, es preferible conservar varios datos en memoria y realizar una única escritura, larga, cada hora.

    El único detalle importante, que debemos recordar siempre, es que hay que "migrar" los datos de la memoria interna a la MMC manualmente. No solo porque esos datos podrían perderse, sino por su capacidad limitada. Por ejemplo, tomando datos cada segundo, la memoria interna se agota en unas cuatro horas.

    Esta operación se puede realizar cómodamente desde PyTrek, sin más que seleccionar la opción correspondiente del menú presentado en el teléfono móvil.

  • Lanzo los programas de recogida de datos y me dicen que no se pueden conectar con la unidad GPS

    En este momento (Abril 2005) las aplicaciones se conectan a la unidad GPS a través de su dirección BlueTooth. La dirección BlueTooth contenida en el código fuente es la de mi propia unidad GPS. Naturalmente lo primero que debe hacer alguien que se descargue PyTrek es introducir su propia dirección BlueTooth.

  • ¿Cómo sé la dirección BlueTooth de mi unidad GPS?

    Lo más sencillo es utilizar el explorador de dispositivos BlueTooth del ordenador.

  • ¿Cómo sé si PyTrek está grabando posiciones o no?

    Cuando accedemos al menú principal, si aparece la entrada "GRABAR" significa que NO estamos grabando. Si aparece "PARAR GRABACIÓN", entonces estamos grabando datos.


Ejemplos


Historia

  • 29/nov/05: Añado el enlace a las lecturas GPS de Cuenca 2005.

  • 11/abr/05: Añado el enlace a las lecturas GPS de Roma 2005.

  • 04/abr/05: Primera versión de esta página.



Python Zope ©2005 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS