Navegación en interiores, otra opción
¿Otro opción? Pues sí...
Y con "la carga", que lleva cámara de video incorporada...
Pronto un video ...
Lego Mindstorms es probablemente la forma más barata y fácil de construir un robot. Además de la enorme cantidad de piezas y conjuntos disponibles para la estructura, continuamente aparecen nuevos sensores que permiten nuevas capacidades al NXT.
Contenido de MindStorms NXT
Aprende a programar con Mindstorms NXT y Lejos (Java)
Sensores adicionales (aceleración/inclinación, giroscopio, brújula, ...):
Hitechnic,
MindSensors
Comparativa de software adicional. Incluyendo lenguajes como C, C++ (todavía algo verde), Java, pbLua,...
¿Otro opción? Pues sí...
Y con "la carga", que lleva cámara de video incorporada...
Pronto un video ...
¿Cómo? Bueno, bastantes meses después...
Los primeros tanteos de WallTracking (SigueMuros)
El objetivo final es un robot que "siguiendo las paredes", esto es, utilizando las paredes y otros obstáculos como referencia (como cuando andamos a oscuras por casa y vamos tocando las paredes para no partirnos la crisma), sea capaz de ir de un lugar determinado a otro. La idea es hacer una primera versión relativamente sencilla y a partir de ahí irle añadiendo más capacidades y precisión.
La idea es hacer una primera versión relativamente sencilla y a partir de ahí irle añadiendo más capacidades y precisión.

Unos diagramas (notación UML) con los primeros pasos que di este verano.
Está planteado con 2 NXT, pero es muy fácil utilizar sólo uno, de hecho actualmente sólo utiliza uno. En unos pocos días grabaré un video...
Siento que los textos estén en inglés, si saco un rato los traduciré :-[
Funciones principales a vista, no de pájaro, sino de satélite
Los componentes principales (pulsa sobre la imagen para ampliar)
Las clases actualmente existentes (pulsa sobre la imagen para ampliar)
El inicio y línea principal de ejecución es el siguiente:
De la clase "WallTracking" el método "void main (String [] args)"
public static void main (String [] args)
{
WallTracking wt=new WallTracking(30, 110, 20);
wt.startIt();
while (!Button.ESCAPE.isPressed());
wt.stopIt();
Utils.pause(100);
}
De la clase "WallTracking" el método "void startIt()"
public void startIt()
{
running=true;
boolean isError=false;
try
{
if (hb!=null)
{
hb.start();
}
}
catch(Exception e)
{
isError=true;
Utils.d(e.getMessage());
}
if (!isError)
heading.straight();
}
A partir de aquí el objeto HearBeat iniciado con "hb.start()" periódicamente irá llamando al método de WallTracking "void tick()" que es el responsable de:
public void startIt()
{
running=true;
boolean isError=false;
try
{
if (hb!=null)
{
hb.start();
}
}
catch(Exception e)
{
isError=true;
Utils.d(e.getMessage());
}
if (!isError)
heading.straight();
}
Y, finalmente, del objeto "heading" (clase "HeadingMotion"), se ejecuta el método "HeadingData doWallFollowing(int distance)", que a su vez llama a "steering.steer(hd)", que simplemente hace girar según el la información que contiene el objeto "hd" de la clase "HeadingData".
public void tick()
{
Sound.beep();
int lateralUSValue = lateralUSSensor.readValue();
Utils.d(0, "dist.", lateralUSValue);
dhis.add(-1, lateralUSValue);
heading.doWallFollowing(distance);
}