martes, 20 de enero de 2009

GPS para Linux (II)

Tras haber mostrado en el anterior artículo el proceso de instalación de Navit, ahora nos ocuparemos de instalar en el equipo lo necesario para recibir señal de los satélites y así poder utilizarlo como navegador GPS.

La primera cuestión es elegir el hardware adecuado. Afortunadamente en la actualidad hay una fuerte competencia entre los fabricantes de chips receptores GPS, lo cual lleva a una constante mejora en las características de los mismos así como un abaratamiento de los receptores. Hoy en día es posible conseguir receptores de última generación, de gran sensibilidad y consumo muy reducido por precios sorprendentemente bajos.

En este caso en particular, el receptor utilizado en un Globalsat ND-100. Se trata de un receptor muy interesante, pues aúna características tales como reducido tamaño, muy bajo consumo, rapidez de adquisición, alta sensibilidad y sobre todo un coste sumamente reducido (Se pueden conseguir en eBay por menos de 30 euros, gastos de envío incluidos).



Una de las cosas que me llamó la atención fue el hecho de que se anunciaba con drivers para Linux, pero lo que me desconcertó, es que estos drivers se anuncian para sistemas "RedHat 7.3 / 8.0 / 9.0". Algunos de estos sistemas tienen 7 años de antigüedad, y curiosamente no se menciona ningún Linux reciente. A pesar de lo desconcertante de los drivers anunciados para Linux, seguí adelante y decidí comprar uno de estos dispositivos.



La decisión no pudo haber sido mejor. Al conectar el dispositivo GPS-USB en un Ubuntu 8.10 instalado en un equipo Asus EeePC 701, éste reconoció automaticamente lo necesario para tratarlo como un dispositivo que transmite datos por un puerto serie (Prolific PL2303 USB to serial adaptor).


~$ dmesg | tail -10

[ 104.472054] usb 3-2: new full speed USB device using uhci_hcd and address 2
[ 104.639516] usb 3-2: configuration #1 chosen from 1 choice
[ 104.986259] usbcore: registered new interface driver usbserial
[ 104.989944] usbserial: USB Serial support registered for generic
[ 104.992020] usbcore: registered new interface driver usbserial_generic
[ 104.992020] usbserial: USB Serial Driver core
[ 105.011304] usbserial: USB Serial support registered for pl2303
[ 105.013390] pl2303 3-2:1.0: pl2303 converter detected
[ 105.025605] usb 3-2: pl2303 converter now attached to ttyUSB0
[ 105.028018] usbcore: registered new interface driver pl2303
[ 105.028018] pl2303: Prolific PL2303 USB to serial adaptor driver


En estas líneas de dmesg se nos indica la referencia (ttyUSB0) del puerto serie que recibirá los datos del receptor GPS.



El siguiente paso es instalar gpsd. Esta paquete contiene la utilidad gpsd (que actúa como demonio sirviendo datos del GPS a cuantas aplicaciones lo requieran) y permite ocultar los detalles de la configuración del GPS a las aplicaciones que hacen uso de éste. Dado que este paquete se encuentra en los repositorios de Ubuntu, su instalación es sumamente sencilla:


~$ sudo apt-get install gpsd


Una vez instalado el servicio gpsd y con el receptor GPS conectado en el ordenador, colocamos éste en un lugar despejado en el que pueda recibir la señal necesaria para estimar su posición. A los pocos segundos el dispositivo obtiene su localización y comienza a enviar información a gpsd.


~$ gpsd /dev/ttyUSB0


Podemos comprobar los datos recibidos con xgps (utilidad incluida en el paquete gpsd-clients, el cuál se habrá instalado automáticamente al instalar gpsd). Obtenemos algo como esto:



El software de navegación que habíamos elegido (Navit) viene preparado para obtener datos de posicionamiento a través de gpsd, y de hecho la configuración por defecto trata de obtener los datos del GPS a través de dicho servicio. No tenemos más que ejecutar la aplicación y a los pocos segundos mostrará nuestra ubicación (la representación en pantalla dependerá de los mapas que hayamos decidido instalar en Navit).



Así de sencillo. No hemos tenido ni que abrir el miniCD con los drivers proporcionados por el fabricante del GPS y en pocos minutos hemos conseguido tener perfectamente en funcionamiento un dispositivo GPS conectado a nuestro sistema Linux.

Actualización (5/08/2009):

Dado que en los comentarios no se permiten determinadas etiquetas, respondo aquí cómo incluir en Navit los mapas de Openstreetmaps: Para incluir los mapas de openstreetmaps en Navit, se pueden cambiar los permisos al fichero o bien editarlo como sudo:

$ sudo gedit /etc/navit/navit.xml

En el fichero, hay que buscar la seccion correspondiente a openstreetmaps. En mi caso, lo tengo así (he tenido que poner espacios adicionales dado que blogger no permite introducir determinadas etiquetas en el contenido):


< !-- Mapset template for openstreetmaps -->
< mapset enabled="yes">
< map type="binfile" enabled="yes" data="/usr/share/navit/maps/peninsula.bin" />
< /mapset>


Se trata de un mapa de la Península Ibérica.

8 comentarios:

mallow dijo...

hola! primero quería agradecerte por el post, me es de suma ayuda ahora que estoy comenzando con el soft libre. Quiero instalar el navit, y, siguiendo tus pasos llegué a tenerlo. El tema es que no puedo cargar los mapas, me bajé un .bin desde navit-project.org pero no logro ponerlo dentro del navit. Tambien sucede otra cosa: mi gps es por bluetooth, y no tengo muy claro como debería detectarlo. ¿Cómo se si lo detecta?

muchas gracias de nuevo por el post.

Miguel dijo...

Hola, yo tambien tengo un ND-100 y tambien uso ubuntu por lo que tu tutorial me ha venido de maravilla. De todos modos soy novato en ambos mundos (linux y GPS) y la verdad es que no se como se descargan los mapas :-( ¿Como se hace?

josean dijo...

Yo hasta ahora he utilizado únicamente los mapas de OpenStreetMap en Navit.

Tienes una entrada en su wiki indicando los detalles de cómo importar los mapas de OpenStreetMap

Anónimo dijo...

Aupa Josean, soy Miguel. Por motivos laborales he dejado un poco apartado el tema de mi receptor ND100 y mi eee 901 con UNR. La cosa es que ahora con las vacaciones lo estoy remontando pero es un rompecabezas...

Ya consegui los mapas pero no puedo visualizarlos de ninguna manera. Lei en alguna parte que hay que editar el archivo navit.xml pero no me deja editarlo ya que es un archicvo de solo lectura y segun me dice al no ser yo el propietario no puedo modificarlo ¿alguna idea?

Un saludo y gracias

josean dijo...

Te respondo en un añadido en la entrada principal, dado que me impide poner determinadas etiquetas en el comentario.

Anónimo dijo...

Gracias por responder tan rapido.
Le plantee la pregunta tambien a Jynus (http://jynus.com/blog/2009/03/navegando-con-gps-y-osm/). Ya veo que tu tambien participaste en su mensaje :-)

Al final he seguido tu consejo (aunque tengo los mapas en el mismo directorio de Jynus) y he usado el comando $ sudo gedit /etc/navit/navit.xml

No sabria decirte si me ha funcionado ya que ahora el problema es el siguiente:
-Hice una instalacion limpia de Ubuntu Netbook Remix 9.04
-y ahora el problema esta en que al meter

~$ gpg --recv-keys CB229096
gpg: solicitando clave CB229096 de hkp servidor keys.gnupg.net
gpg: clave CB229096: "Vincent Touchard vincent.touchard@telecom-bretagne.eu" sin cambios
gpg: Cantidad total procesada: 1
gpg: sin cambios: 1

~$ gpg --export -a CB229096 | apt-key add -
gpg: anillo de claves no escribible encontrado: eof
gpg: Error leyendo `-': Error general
gpg: import from `-' failed: Error general

-Ademas, si intento actualizar mediante el Gestor de actualizaciones me dice lo siguiente (me imagino que derivado de lo anterior):

W: Error de GPG: http://navit.latouche.info jaunty Release Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY 0CF2E2A8CB229096

¿que he hecho mal?

Por cierto, una pregunta tonta... ¿tengo que tener el receptor GPS conectado aunque tan solo quiera navegar de modo "offline"? es que ahora mismo abro el NavIt y no veo nada; ni mapas ni nada de nada y eso que ya he editado el navit.xml...

Bueno, y gracias de antemano ;-)

Usak dijo...

Buenas, Me he comprado hace poco el ND-100, en windows funciona perfectamente pero cuando lo intento arrancar en linux (ubuntu 8.1) se atora. Linux me lo detecta sin problemas pero el problema lo tengo con gpds, no hay manera. Intento leer los datos con gsppipe -r y no saca nada por pantalla, lo que confirma que gpds no lo configur correctamente. Sabes o tienes remota idea de lo que pudiera ser. Muchas gracias de antemano.

josean dijo...

Echa un vistazo al comando dmesg para ver por qué puerto está conectado el gps (es posible que sea otro diferente de /dev/ttyUSB0).

También puedes ejecutar gpsd en modo debug (no recuerdo si es con el parámetro -n), que realiza un volcado de toda la información por la pantalla. De este modo verás si detecta o no el GPS y si éste envía información o no al PC.