jump to navigation

Instalación sistema operativo Robot Linux 18 septiembre, 2008

Posted by ubanov in Electrónica, Informática-Linux, Robótica.
Tags: , ,
trackback

En este artículo voy a describir los pasos seguidos para la instalación del sistema básico del robot con linux que quiero hacer. Para ver toda la lista de artículos de este tema ver https://ubanov.wordpress.com/category/robotica/

La placa base, como dije en otro post, es una VIA (después de las primeras pruebas empiezo a pensar que va a ser poco esta placa, pero ya habrá tiempo de cambiar). Tiene procesador a 600Mhz (CPU sin ventilador), 512MB de RAM, como almacenamiento una Flash de 2GB.

Lo primero que he configurado está en la BIOS. Lo que he configurado es que al arrancar no se pare ante ningún error, y que nada más enchufar la placa se encienda (quiero que siempre esté encendida, no quiero manejar el botón de encendido).

Una vez hecho esto me he puesto a instalar el sistema básico de Debian 4.0. He particionado todo en una única partición EXT3, sin Swap. Como hostname le he puesto “robot”😀

# instalar sistema, no instalando ningun paquete (cuando pregunta
# el tipo de sistema quitar la marca de Sistema Estandar)
# Una vez instalado lo basico, vamos a por algunos paquetes:
# Primero actualizamos (por si acaso)
apt-get update
apt-get upgrade
# para ayudarnos con busqueda de hardware (lspci)
apt-get install pciutils
# gestion de frequencia del procesador (para reducir consumo)
apt-get install cpufrequtils
# configuracion de la wifi (iwconfig, iwlist…)
apt-get install wireless-tools
# instalar aumix para gestionar volumen audio
apt-get install aumix
# beep para poder hacer pitiditos
apt-get install beep
# Instalamos el ssh para poder controlarlo
apt-get install ssh
# un servidor web ligerito
apt-get install lighttpd
# festival para poder decir cosas
apt-get install festival
# sphinx2 para reconocimiento de voz
apt-get install sphinx2-bin
# compilador (a mi me gusta C para programar)
apt-get install gcc libc6-dev
# otras herramientas de programación
apt-get install make
# herramienta para que camara sea webcam (es una opcion)
apt-get install webcam-server
# Otra aplicacion de captura de video
apt-get install streamer
# con “streamer -o /tmp/pantalla.ppm” podriamos grabar una imagen, o video…
# some util applications
apt-get install screen
apt-get install vim
# program to view graphics in SVGA
apt-get install zgv
# install cvs
apt-get install cvs
# some programing languages that I don’t use
apt-get install perl
apt-get install python
apt-get install ruby
apt-get install tcl8.4
apt-get install php5-cli
# Open Computer Vision library
apt-get install libcv-dev opencv-doc
apt-get install python-opencv
# dpcp server (but disable it in runlevel 2)
apt-get install dhcp3-server
rm /etc/rc2.d/S40dhcp3-server

# Voz en castellano para Festival (Silvia y Antonio de guadalinex)
cd /tmp
wget http://forja.guadalinex.org/repositorio/frs/download.php/153/festvox-sflpc16k_1.0-1_all.deb
wget http://forja.guadalinex.org/repositorio/frs/download.php/153/festvox-palpc16k_1.0-1_all.deb
dpkg -i festvox-sflpc16k_1.0-1_all.deb
dpkg -i festvox-palpc16k_1.0-1_all.deb
# Para ponerla por defecto editar /usr/share/festival/voices.scm y ponerla como la primera opcion
# de default-voice-priority-list, deberia quedar (sin el simbolo de comentario de delante):
#(defvar default-voice-priority-list
# ‘(JAndalucia_Indisys_MP_es_pa_diphone
# JAndalucia_Indisys_MP_es_sf_diphone
# […]

# en mi caso ha sido necesario forzar que se cargue el modulo siguiente a mano
#para tener disponible el dispositivo /dev/dsp, no se si sera para todos igual
cat >>/etc/modules <<EOF
# IVAN: para que se cree /dev/dsp
snd_pcm_oss
EOF

# configurar pagina para acceder a camara web
mkdir /var/www/cam
cat >/var/www/cam/index.html <<EOF
<HTML><HEAD><TITLE>Robot Video Cam</TITLE></HEAD>
<BODY>
<APPLET code=”WebCamApplet.class” archive=”/cam/applet.jar” width=”320″ height=”240″>
<param name=URL value=”http://diripservidor:8888/”&gt;
<param name=FPS value=”5″>
<param name=width value=”320″>
<param name=height value=”240″>
</APPLET>
</BODY></HTML>
EOF
cp /usr/share/doc/webcam-server/applet/applet.jar /var/www/cam/
# NOTA: NO OLVIDEIS PONER diripservidor BIEN
# para arrancar el servidor ejecutariamos “webcam-server -s”
# consume bastante CPU!!!
# remove downloaded .deb files
apt-get clean

En un futuro en lugar de poner un file system ext3 seguiré las instrucciones de servidor-linux-en-modo-live para ponerlo en modo “live”

Para probar el hardware adicional, he ejecutado tres programitas.

Por una parte ejecutar “webcam-server -s” para ver la cámara desde http://servidor/cam/.

Para probar que el sonido funciona bien ejecutar festival y teclear (SayText “hello, my name is Ivan”). A mi el audio no me funcionaba al principio bien por que no tenía el dispositivo /dev/dsp y en su lugar tenía el /dev/dspW (debe ser interface de audio de 16 bits), después de darle unas cuantas vueltas y buscar por google, cargando los módulos snd_pcm_oss y snd_mixer_oss, ya ha aparecido /dev/dsp. Después se seguía sin oir, pero ajustando los volúmenes con aumix ha empezado a funcionar todo bien (hay que hacerlo cada vez que arrancas).

Lo ultimo en probar probar ha sido el reconocimiento de texto. Para ello he ejecutado “sphinx2-demo” y a decir cosas por el micro… No se si será cosa mía (al final tengo que hablar en inglés y eso no se me da muy bien) o de la máquina, pero sólo me reconoce la palabra exit (este consume como toda la CPU!!!)

Por último he probado la captura de video (lo he probado con el webcam-server). Ejecutar el programa anterior y acceder por navegador a http://direccionip/cam/ (lo malo es que en la máquina que tengo webcam-server se come como el 70% de la CPU).

Lo siguiente a hacer es habilitar el cpufreq (para que consuma menos). Para ello voy a seguir las instrucciones de gestion-velocidad-cpu-en-linux-cpufreq. En esta máquina en concreto he necesitado cargar los módulos: longhaul y cpufreq-ondemand. Después ejecutar “cpufreq-set -g ondemand”.

Para comunicarme con el robot voy a empezar usando el microcontrolador que tenía en mi robot anterior (al final tiene un puerto serie y unas cuantas salidas, por lo que para empezar será más rápido usar esto). El robot era un PicBot 3D.

La caja he empezado a hacerla, pero al final va a ser un poco más grande de lo que había dicho inicialmente. Será de 30x30x25. La batería irá en la parte inferior tumbada (pesa un poco más de 2Kg), encima irá la placa y la fuente de alimentación (quizás incluso meto toda la caja que tengo, ahora que tengo sitio al hacerla más grande…).

Por otra parte he comenzado a pensar cómo va a ser el sistema que gestione el robot. Quiero que haya un proceso que se encargue de arrancar los módulos del robot (para que sea modular). Quiero que toda la comunicación con los módulos se haga en forma de texto, y haciendo llamadas en stdin, stdout, de forma que sea muy sencillo programar módulos (parecido a como se hace en los cgi de web).

De esta forma el programa cuando reciba un mensaje de un módulo se lo reenviará al resto, para que ellos lo traten. Creo que se entenderá mejor con un ejemplo. Digamos que tenemos un módulo que se encargue de manejar el movimiento del robot, y otro módulo que se encargue de las comunicaciones con el microcontrolador que gestione los motores y servos. Supongamos que un determinado módulo de repente diga “Andar hacia delante a la velocidad máxima”, este comando se lo enviaríamos a los dos módulos anteriores, el módulo encargado de manejar el movimiento del robot interpretaría este comando y mandaría otro mensaje (para que lo atendiese el módulo de comunicación con el microcontrolador) diciendo que se mandasen girar a los motores en sentido delante y al 100%… el de gestión del microcontrolador también habría recibido la orden de “Andar hacia delanta a la velocidad máxima”, pero simplemente la habría ignorado (dado que no la entiende). Imaginemos que esto lo aplicamos a otro tipo de robot que tiene otro tipo de forma de moverse (más ruedas, piernas o lo que sea), sólo tendremos que cambiar el módulo que se encarga de la gestión de movimiento, el del microcontrolador será el mismo y el módulo que ha originado la orden también… Que queremos hacer un módulo de habla, pues hacemos un módulo que atienda al mensaje SayText y se lo pase a festival…

Será necesario documentar todas las ordenes básicas, para que esté estandarizado… y de repente si más de una persona usa este sistema que todos tengan la misma orden (que no sea para unos Andar, para otros Anda, para otros Walk…).

Creo que esto, como es paja mental, me está quedando un poco espeso, esperemos que con el ejemplo programado pueda quedar más sencillo.

Creo que ahora podéis empezar a ver las ventajas que va a tener este robot con este sistema operativo… no era cuestión de meter linux en cualquier tipo de sistema, es cuestión de darle flexibilidad y potencia para hacer robots que puedan hacer más cosas que seguir una simple línea. Por eso también he elegido una placa de PC normal (tengo linux en otros dispositivos, pero no van a tener chicha para hacer cosas).

Si a alguien le parece interesante el proyecto, y vaya a hacer algo, me gustaría que se pusiera en contacto conmigo para llevar el proyecto de forma conjunta con alguien…

Comentarios»

1. Sphinx - 2 febrero, 2010

Me parece muy interesante tu proyecto Ubanov.
Animo.
Y si tienes imágenes, sería una gozada verlas.

Saludos,
sphinx.

2. ubanov - 2 febrero, 2010

hice una caja en madera… le metí la batería dentro y el ordenador, pero no llegué a ponerle ruedas por que pesaba la leche…. y entonces la caja se la di a mis hijos para que guardasen juguetes…. descarté ese diseño y tengo que hacer uno nuevo… estube pensando en fibra de vidrio y cosas así pero no he llegado a hacer nada más😦

En medio me estoy dedicando más a la parte software…


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: