Aunque hace un tiempo ya se escribio un articulo respecto a este tema, he decido volver a reescribir en base a la cantidad de cambios que se han ido produciendo al cabo de estos años y adaptarlo a alguna distribucion mayoritaria. Mas concretamente, este tutorial esta destinado para aquellos desarrolladores ansiosos de hacer sus propios programas, o compilar otros ya existentes, bajo Ubuntu 9.10 (Koala Karmic).
Preparando el entorno
Lo primero que debemos de hacer es instalar los paquetes necesarios para compilar las SDK, esto lo hacemos mediante un gestor de paquetes, bien desde el entornos grafico o bien desde linea de comandos.Paro antes de esto, existe inciso que no podemos olvidar, dado que gcc 4.4 ha pasado a ser el compilador por defecto nos presente un problema, dado que las SDK estan preparadas para compilarlas mediante gcc 3.4. Pero no hay problema, por que todo es solventable, primero agregaremos a nuestro /etc/apt/sources.list un repositorio antiguo, mas concretamente Jaunty.
deb http://es.archive.ubuntu.com/ubuntu/ jaunty main universe
Actualizamos los repositorios
sudo apt-get update
Instalamos los paquetes pertinentes
sudo apt-get install gcc-3.4 g++ binutils patch bzip2 flex bison make gettext pkg-config unzip libz-dev
Cambiamos el compilador por defecto 4.4 por el 3.4
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-3.4 /usr/bin/gcc
NOTA: Al acabar, si queremos, se puede restaurar la version gcc:
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
Compilando las SDK
Enhorabuena, ya lo tienes casi en tu mano, ahora vamos a descargar las SDK y compilarlas. Primero cambiamos de directorio y obtenemos el codigo:
cd /usr/src/
sudo mkdir /usr/src/fonera
cd fonera
wget http://download.fon.com/firmware/fonera/latest/fonera.tar.bz2
Ahora descompimimos el fichero descargado:
tar jxvf /another/where/fonera.tar.bz2
Y procedemos a su compilacion:
make V=99
Este proceso puede durar bastantes minutos, nada mas lanzar el comando nos saldra un menu de configuracion, si deseamos alguna especifica podemos modificarlo y readaptarlo, si no, directamente podemos salir y quedara la configuracion por defecto. Pasado un tiempo ha de terminar la compilacion con exito.
Para dejar todo mas facil de trabajar, puedes poner la ruta donde hemos compilado las SDK, como variable del entorno, y asi no tener que ir al susodicho directorio cada vez que queramos compilar
PATH=$PATH:/usr/src/fonera/staging_dir_mips/bin
export PATH
Compilando nuestro primer programa
En este punto ya tenemos el compilador disponible, para comprobarlo ejecuta:
mips-linux-uclibc-gcc -v
Y obtendremos algo similar a:
Configured with: /usr/src/fonera/toolchain_build_mips/gcc-3.4.6/configure --prefix=/usr/src/fonera/staging_dir_mips --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=mips-linux-uclibc --enable-languages=c,c++ --enable-shared --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-nls
Thread model: posix
gcc version 3.4.6 (OpenWrt-2.0)
Ya puedes empezar tus desarrollos, como ejemplo haremos el mitico "hola mundo"
nano prueba.c
Introducimos el siguiente codigo fuente:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello World !\n");
}
Y los compilamos:
mips-linux-uclibc-gcc prueba.c -o prueba
Ya puedes pasarlo a la fonera, por ejemplo mediante scp, y ejecutarlo.
Hemos apliado los comandos con los que trabaja la parte hardware, y reestructurado gran parte de las DLL para poder ir ampliandolas (repositorio), en breve publicaremos un diagrama de clases para un mejor entendimiento.
Novedades
Sobre un motor:
*00# Avanza el motor derecho
*01# Retrocede motor derecho
*02# Para motor derecho
*05# Velocidad max
*06# Velocidad media
*07# Velocidad min
Sobre el otro motor:
*10# Avanza motor derecho
*11# Retrocede motor derecho
*12# Para motor derecho
*15# Velocidad max
*16# Velocidad media
*17# Velocidad min
Para tener la información de los sensores:
*20# , como respuesta a éste mensaje se enviarán 3 bytes
El primer byte:
Sensores ultrasonido:
Bit 0: Lee Ultrasonido derecho
Bit 1: Lee Ultrasonido frontal
Bit 2: Lee Ultrasonido izquierdo
Sensores infrarrojo:
Bit 3: Siguelineas derecho
Bit 4: Siguelineas izquierdo
Bit 5: Infrarrojo inferior
Sensores volumétricos:
Bit 6: PIR
Byte 2: Encoder derecho cuenta
Byte 3: Encoder izquierdo cuenta
El pasado dia 17 de Abril se realizo la entrega de premios en Ciudad Real del I Concurso de SL de CLM, en el cual el proyecto ThoRo fue premiado con el de Mejor Idea Original,

Agracedecer a la organizacion por el premio y el trabajo realizado y felicitar por sus proyectos al resto de los premiados:
Articulos relacionados:
Aqui os publicamos el video de la version presentada en al
I Concurso de SL de CLM, asi vereis al principal desarrollador de la parte hardware, que no ha podido asistir por un operacion (esperamos que te mejores).
Os escribo in-situ, despues de haber realizado la presentacion y disfrutando de los talleres (Joomla, Seguridad, Xen, PyGames) que nos ha preparado la organizacion.
Dada la cantidad de mails que ultimamente con ganas e intenciones de unirse al proyecto nos vemos olbigados activar la lista de correo, para apuntarse simplente has de dirigirte a la siguiente direccion de correo:
https://forja.rediris.es/mailman/listinfo/csl2-thoro-commits
Para enviar informacion, preguntas, ideas, .... simplemente has de escribir a:
csl2-thoro-commits@forja.rediris.es
He aqui un pantallazo de la interfaz inicial que controla al ThoRo:

Simplemente comentar que no es lo mas importante la actual interfaz, si no las SDK, que dan el soporte para que cualquier persona con unos conocimientos minimos de programacion pueda realizar cualquier tipo de automatismo.
//Declaramos nuestro juegute
ThoRo robot = new ThoRo() ;
//Le enviamos las ordenes deseadas
robot.Go();
robot.Back();
robot.Right();
robot.Left();
Ya veis que con simples instrucciones como esas despues de haber agregado la libreria que se adjunta, podras tener a tus ordenes una maquina para "dominar el mundo", je , je , ...
En proximas versiones iremos ampliando las funcionalidades, parametrizandolas, y adaptandolas a nuestras/vuestras necesidades.
Os dejamos la primeras imagenes de la Beta inicial y como reacciona nuestro Thorete, en los proximos dias saldra la primera version de las SDK para un facil desarrollo del mismo
Esperamos que os guste. ¿¿Quien quiere uno ?? ;)
Aprovechando las posibilidades de virtualizacion, hemos creado una maquina virtual para VMWARE Server con todas las necesidades para trabajar en el proyecto, desde el entorno MonoDevelop, hasta un compilador de mips.
Se trata de una Debian SID, la password de root es "mono", asi podreis usarla para lo que querais, incluso como S.O. alternativo.
La podeis descargar aqui.
Os presentamos el esquema (a muy grandes rasgos) que estamos siguiendo en el desarrollo del proyecto
Y el protocolo de comunicacion elegido sera el mismo para la interfaz <--> core, que para el core <--> arduino. De esta forma simplificamos posibles malos entendidos, siendo este el siguiente:
* X Y #
- X es el numero de dispositivo al que enviar los dispositivos.
- Y dato enviado al dispositivo.
Todo comando estara seguido en modo respuesta por el receptor por un nuevo comando que asegurara la recepcion del mismo, en este caso "ACK"
Los primeros comando implantados son:
*00# Avanza el motor1
*01# Retrocede motor1
*10# Avanza motor2
*11# Retrocede motor2
Dado que para respetar la tercera ley de Asimov, hemos decido implementar la posibilidad de autocontrol, pudiendo en un determinado momento activar/desactivar el control remoto desde la interfaz.
*90# Activamos el telecontrol
*91# Desactivamos telecontrol
Estamos acostumbrados a compilar nuestro software contra sistemas x86, pero .... ¿que pasa cuando queremos ejecutar nuestro software en otras arquitecturas? Basicamente que con un mero cambio de compilador si hemos seguido las directivas POSIX, y poco mas podremo migrar nuestras aplicaciones al sistema que deseemos.
Por ejemplo dispositivos como la fonera, el Linksys WRT54GL, el ASUS WL500G, ...... poseen este tipo de procesador y si queremos compilar contra ellos solo tenemos que seguir los siguientes pasos tan sencillos:
Descargar:
cd /usr/src
mkdir openwrt
cd openwrt
wget http://downloads.openwrt.org/whiterussian/newest/OpenWrt-SDK-Linux-i686-1.tar.bz2
Descompirmirlo:
bzcat OpenWrt-SDK-Linux-i686-1.tar.bz2 | tar -xvf -
export PATH=$PATH:/usr/src/openwrt/OpenWrt-SDK-Linux-i686-1/staging_dir_mipsel/bin/
mips-linux-uclibc-gcc ejemplo.c -o ejemplo
Enhorabuena!!!! ya eres programador de MIPS.
ACTUALIZACION:
Todo lo anterior es valido para compilar para el WRT54GL, Asus WL500GX, ...... pero no para la fonera, dado que se ha de usar las siguientes SDK: http://download.fon.com/firmware/fonera/latest/fonera.tar.bz2 en vez de http://downloads.openwrt.org/whiterussian/newest/OpenWrt-SDK-Linux-i686-1.tar.bz2 , con esto ya podras compilar para el pequeño router.
Después de un mes de largo trabajo entre un grupo de personas elegido cuidadosamente para poder llegar al máximo numero posible de personas damos por finiquitada primera de muchas posteriores que hacemos uso de nuestros seleccionados .
Resumen de conclusiones:
- Distintos modos de trabajo:
- Totalmente independiente del ser humano.
- Controlado por el usuario (teledirigido).
- Modo "Aprende ............. con Thoro".
- Abierto para nuevas posibilidades.
- Debe de respetar las tres leyes de la robótica de Asimov
- Podrá ser usado por los niños pequeños, lo que implica pasar procesos de calidad (piezas pequeñas, resistencia, ..... )
- Abierto para una fácil programación por desarrolladores sin conocimientos de electrónica (SDK)
- Abierto para una fácil ampliación por electrónicos sin conocimientos de programación
- Que se ajuste lo mas posible a los estándares actuales especificados por IEEE, ISO, .....
- Totalmente modular, en caso de cambio requisitos que tenga una fácil adaptación a un nuevo modelo.
Aunque como digo la primera fase esta finalizada dado que nuestra metodologia de trabajo es SCRUM, cada mes esperamos revisar de nuevo y adaptar a los nuevos requisitos, por lo que todo lo que creais basico para la mejora del proyecto estamos totalmente abiertos a vuestras peticiones, ya que un proyecto abierto como este todas las ideas que nos indiques le daremos cabida en cuanto nos sea posible.
Arrancamos este nuevo Blog para ir publicando todos los desarrollos del Proyecto ThoRo, que esteis informados y participeis en el, bien desarrollando, bien jugando o simplemente dando ideas.
¿Que es ThoRo?
Thoro sera tu mascota el día de mañana, con la que podrás jugar, pasar el tiempo, hasta incluso traerte tu "refresco" favorito.
Se basa en un procesador MIPS, y gracias a su diseño totalmente modular se le podrán adaptar nuevas funcionalidades.
En su diseño primario se presentara directamente para uso, pero dada su estructura podremos desarrollar desde aplicaciones hasta su propia IA de una manera fácil y cómoda usando las SDK con las que se distribuirá.
Actualmente el proyecto lo componen tres miembros:
Pedro Redondo Perez (Electronica y MicroElectronica)
Jonas Talvera Gomez (Interfazes y Desarrollo)
Jose Carlos Temprado (Desarrollo y Core)
El desarrollo del mismo se licencia bajo GPL por lo que podrás contribuir desde el primer día a su mejora y adaptación a las necesidades de cada uno.
![]()

Toda la información acerca del proyecto la iremos publicando en LaBloguera.Net acompañada por la pagina de la forja donde se ira subiendo todo el código, documentación , ....
https://forja.rediris.es/projects/csl2-thoro/