Skip to content

GPS Beagle

rlrosa edited this page May 11, 2012 · 14 revisions

Este tutorial pretende hacer andar el GPS Canmore GT-730-F que se adjunta en la foto, primero en la computadora y luego en la BeagleBoard xM

![gps](http://www.gpsdgps.com/product/img_gpsdgps/pr_canmore_gt_730f_01.jpg)

También se adjuntan instrucciones para compilar desde el código fuente, que fue agregado como submodulo a nuestro repo.

Como usar

Una vez que se tenga el gpsd y los correspondientes drivers, el procedimiento para usar el gps es el siguiente:

  • Conectar el GPS.
  • Verificar que apareció un nuevo /dev/ttyUSB#.
  • Ejecutar, con el /dev/ttyUSB# correspondiente:
    stty -F /dev/ttyUSB# 38400
    
  • Ir a la carpeta del gpsd y ejecutar:
    ./gpsd /dev/ttyUSB#
    

Para debuggear el gpsd puede resultar útil ejecutarlo con los siguiente parámetros:

./gpsd -N -D 9/dev/ttyUSB#
Esto lo hace correr al frente (no queda como daemon) y mostrar información en stdout.

Para que ande en la compu

sudo apt-get install gpsd
sudo apt-get install gpsd-clients

El GPS envia datos mediante comm serie, y luego algo en el dongle GPS convierte a USB. El módulo usbserial entiende lo que llega del GPS al puerto USB. Iniciar usbserial, indicándole que debe buscar un dispositivo USB identificado por 0x067b:0x2303:

modprobe usbserial vendor=0x067b product=0x2303

Es necesario setear la velocidad de la comm serie con el GPS. Si el dispositivo serie fue mapeado a /dev/ttyUSB0 por la interfaz usb-serie:

stty -F /dev/ttyUSB0 4800

El gps envia mediante comm serie, e internamente lo convierte a algo compatible con USB. En linux todo es un archivo, en particular el lugar a donde llega la info, que en nuestro caso es /dev/ttyUSB0. Correr el programa que interpreta NMEA (info que viene del GPS), indicándole donde debe buscar dicha info:

gpsd /dev/ttyUSB0

Para que aparezca la consola con el formato lindo y ver las cosas

cgps

Y para verlo con entorno gráfico

xgps

Para leer las sentencias crudas de la línea de comando ejecutar

cat /dev/ttyUSB0

Esto anda en la compu del Pater pero en la de Mati no.

Fijarse la sentencia que se llama GPGGA que se interpreta así:

eg2. $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx

hhmmss.ss = UTC of position 
llll.ll = latitude of position
a = N or S
yyyyy.yy = Longitude of position
a = E or W 
x = GPS Quality indicator (0=no fix, 1=GPS fix, 2=Dif. GPS fix) 
xx = number of satellites in use 
x.x = horizontal dilution of precision 
x.x = Antenna altitude above mean-sea-level
M = units of antenna altitude, meters 
x.x = Geoidal separation
M = units of geoidal separation, meters 
x.x = Age of Differential GPS data (seconds) 
xxxx = Differential reference station ID

En la BeagleBoard xM

Instalar drivers para la comm con el gps:

opkg update
opkg install kernel-module-pl2303

Ahora la beagle debería reconocer el USB una vez que se conecta. Para saber a que puerto fue asignado, hacer:

dmesg | tail
y buscar algo de la forma /dev/ttyUSB#.

Como se puede ver el ID del conversor es 067b:2303.

Luego poner a correr el gpsd:./gpsd /dev/ttyUSB0

Compilando en beagle XM

No encaramos con compilar gpsd en la beagle, así que los cross-compilamos usando el método que hay más abajo en esta wiki.

Una vez compilado, hay que copiar el directorio src/submodules/gpsd de la pc a la beagle (al mismo lugar) y copiar librerias de src/submodules/gpsd/ a /lib/ para q las beagle las encuentre. En un rato actualizo cuales hay q copiar.

Compilando en Ubuntu 11.04

No encontré las libs entre los paquetes de Natty, pero capaz al instalar el programa te las instala. De cualquier forma, es probable que tengamos que cross-compilar para hacerlo funcionar en el beagle, así que ya queda una parte lista.

Para compilar hace falta scons y algunos headers que no vienen por defecto:

sudo apt-get install scons libncurses5-dev python-all-dev

El paquete python-all-dev puede pedir:

libpython2.6
libssl-dev
python-all
python-dev
python2.6
python2.6-dev
python2.6-minimal
python2.7-dev
dale el gusto.

Yo no tuve que agregar más cosas. Si falta algún header xxxx.h buscarlo en google como "xxxx.h ubuntu" y en general sale la solución de toque.

Una vez que satisfechas las deps ir a uquad/src/submodules/gpsd/.

Compilando para correr en una pc

Ejecutar

scons

Con eso alcanza para generar libs y binarios en uquad/src/submodules/gpsd/. Para armar un programa que las usé hay que compilar indicando donde están, ya que por defecto se buscan headers en /usr/include/ y libs en /usr/lib/, y las cosas que acabamos de compilar no están ahí.

Compilando para correr en el beagle

El proceso de cross-compiling es un poco más complicado. Tenés que tener una toolchain, como la generado por bitbake console-image, y tenés que tener los compiladores en tu PATH. Para lograr esto, modificar tu ~/.bashrc, agregando las siguientes líneas:

export OE_BEAGLE_TOOLCHAIN=$OE_BUILD_TMPDIR-eglibc/sysroots/x86_64-linux/usr/bin/armv7a-angstrom-linux-gnueabi/
export PATH=$PATH:$OE_BEAGLE_TOOLCHAIN
Esto define dos variables en el entorno de cualquier consola que abras de ahora en más (no en la que tenés abierta ahora). La variable PATH tiene rutas donde el sistema busca ejecutables.

Hay que avisarle a scons que tiene que compilar para arm. Para esto, ir a la carpeta scripts y hacer

./create_scons-option-cache.sh

El script create_scons-option-cache.sh crea un archivo de configuración para scons en la carpeta gpsd, con las rutas a las cosas hechas por bitbake.

Dicho script deshabilita cosas que no queremos, como python, y otras que no funcionan, como ncurses (el cross compilador busca en el lugar equivocado y dsp se atreve a quejarse)

Ahora debería estar listo. Ir a la carpeta de gpsd y hacer:

scons
Clone this wiki locally