-
Notifications
You must be signed in to change notification settings - Fork 14
GPS Beagle
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.
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#
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
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
/dev/ttyUSB#
.
Como se puede ver el ID del conversor es 067b:2303.
Luego poner a correr el gpsd:./gpsd /dev/ttyUSB0
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.
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
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/
.
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í.
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
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