Lihuen
RSSRSS AtomAtom

Instalación de myro en Lihuen 2

Myro es un paquete de módulos para python que permite controlar los robots del proyecto http://roboteducation.org/.

Myro depende del paquete python-imaging en una versión igual o superior a 1.1.6. Lihuen 2 lamentablemente trae una versión un poco más vieja la 1.1.5-11. Así que veamos como actualizar este paquete.

Nota: En Lihuen 3 no es necesario compilar python-imaging, simplemente instalarlo normalmente desde los repositorios

Instalación de python-imaging

Para esta guía usamos python-imaging 1.1.6-3 de Debian Lenny.

Descargando python-imaging

Para su instalación debemos bajar el paquete fuente de python-imaging (podemos buscarlo en el sitio http://packages.debian.org), éste paquete esta conformado por 2 archivos:

Debemos tener instalado los paquetes debhelper y fakeroot.

Así que vamos a descargarlo y descomprimirlo:

mkdir paquetes
cd paquetes
wget http://ftp.de.debian.org/debian/pool/main/p/python-imaging/python-imaging_1.1.6-3.dsc
wget http://ftp.de.debian.org/debian/pool/main/p/python-imaging/python-imaging_1.1.6-3.tar.gz
dpkg-source -x python-imaging_1.1.6-3.dsc

Ahora tenemos que compilar este paquete, es seguro que no funcione al primer intento, lo que va a pasar la primera vez es que nos mostrará la lista de paquetes necesarios para compilar python-imaging.

Compilando

Así que nos posicionamos en el directorio donde dpkg-source descomprimió el paquete y ejecutamos

fakeroot dpkg-buildpackage

Por ejemplo luego de hacer esto por primera vez en mi máquina dpkg-buildpackage devolvió

dpkg-buildpackage: source package is python-imaging
dpkg-buildpackage: source version is 1.1.6-3
dpkg-buildpackage: source changed by Matthias Klose <doko@debian.org>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 1.1.6-3
dpkg-checkbuilddeps: Unmet build dependencies: python-all-dev python-all-dbg python-tk-dbg (>= 2.4.3) libsane-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)

Ahora tenemos que instalar las dependencias, como este paquete es de Debian Lenny no vamos a encontrar todos los paquetes pero por suerte podemos compilar python-imaging puede ser compilado sin que estén absolutamente todos los paquetes.

Hay un paquete en especial que no vamos a encontrar en Lihuen que se llama python-all-dbg, en Lihuen éste paquete se llama python-dbg.

Así que instalamos los paquetes pedidos salvo python-tk-dbg que no está en el repositorio y python-all-dbg al cual reemplazamos por python-dbg:

apt-get install python-all-dev python-dbg  libsane-dev

Ahora corregimos un archivo de los fuentes para poder compilar este paquete, el archivo es python-imaging-1.1.6/debian/rules. Para corregirlo debemos abrirlo con un editor de texto y comentar las líneas donde aparezca "dh_movefiles"

Por ejemplo, si encontramos:

dh_movefiles -ppython-imaging-tk \
    --sourcedir=debian/python-imaging \
       usr/lib/python$*/site-packages/PIL/_imagingtk.so \
       usr/lib/python$*/site-packages/PIL/ImageTk.py

Debemos comentarlo de la siguiente manera:

#dh_movefiles -ppython-imaging-tk \
#    --sourcedir=debian/python-imaging \
#       usr/lib/python$*/site-packages/PIL/_imagingtk.so \
#       usr/lib/python$*/site-packages/PIL/ImageTk.py


Luego construimos el paquete, pero esta vez pasando el argumento "-d" para que dpkg-buildpackage no nos pida instalar todas las dependencias.

fakeroot dpkg-buildpackage -d

Al compilarlo veremos varios paquetes ".deb" en el directorio donde descargamos los fuentes de python-imaging.

Así que vamos a instalarlos con:

dpkg -i --force-all *.deb
dpkg --configure -a
apt-get -f install

Si quedan paquetes sin configurar o problemas de dependencias habrá que ver bien en que orden instalar estos paquetes.

Instalando otras dependencias

Para que todo funcione debemos instalar python-serial, python-numpy, python-xmpp y tkSnack Los primeros están en los repositorios de Lihuen, así que con lo siguiente alcanza:

apt-get install python-serial python-numpy python-xmpp

Terminando la instalación

Luego podemos terminar la instalación como se detalla en http://wiki.roboteducation.org/Linux_Setup.

Pronto ampliaremos este documento con más información en español.

Notas

En ocasiones, sobre todo cuando el robot (Scribbler) se empieza a quedar sin baterías, python puede quedarse bloqueado y el robot se queda también realizando la última instrucción recibida. En general con reiniciar el robot, y terminar con el proceso de python alcanza pero a veces quedan procesos utilizando el dispositivo serie relacionado con el robot.

Podemos ver que procesos usan el dispositivo del robot con el comando lsof, por ejemplo:

lsof /dev/rfcomm0

Si vemos que algún proceso está utilizando el dispositivo podemos intentar matarlo con kill. Si esto no es posible tendremos que asociar el robot con un dispositivo con otro nombre.

Por ejemplo:

rfcomm release /dev/rfcomm0
rfcomm bind /dev/rfcomm1 00:11:22:33:44:55 1

Y de ahora en adelante usamos /dev/rfcomm1 como argumento de init().

Como asociar un dispositivo serie con el robot de forma dinámica

Para esto podemos usar la aplicación rfcomm como se indica más arriba.

Para asociar un dispositivo serie:

rfcomm bind [dispositivo] [dirección] [canal]

Para liberar un dispositivo serie:

rfcomm release [dispositivo]