lunes, 28 de marzo de 2011

Código fuente utilizado por el Robot Rescatista L.I.D.E.R

Hola a todos,

Acá ponemos el link al código fuente del robor rescatista L.I.D.E.R (Lanzador Inteligente de Dispositivos Especializado en Rescate).

http://rapidshare.com/files/454803381/RobotBalisticaV2-B.ic

Esperamos que hayan disfrutado de las demostraciones!

Fin de la presentación del perrito

Buenas gente,

Lunes de semana 12 ! Listo la última presentación por ahora del perrito. Tanto el grupo del colegio, como el de personas salieron encantados. Claro que hubo gente que se aburrió, como otras que les encantó la idea. Nada que hacer, así es la vida. Esperamos que a la mayoría hallan salidos fascinados !

Hubieron ciertos inconvenientes debido a la gran  cantidad de personas el perroito no tenia mucha movilidad ni capacidad de esquivar bien las cosas, por lo que a cada rato había que pararlo porque se salió una rueda. También hubo full mala suerte, justo un minuto antes de comenzar una de las presentacion uno de los servos se le salió un tornillo. Se tuvo que ponerle una probabilidad a lo de seguir a las personas, en vista a la cantidad tan grande de personas. En fin, como todo en los robots y programación, siempre hay un caso que no se toma en cuenta, lo que nos generó bastante fastidio y que las personas no pudieran ver al 100% al perrito: una lástima.

Bueno, como se prometió acá se sube el último código que se subio para hacer las pruebas. Acá el link:

http://rapidshare.com/files/454802147/mascota.ic

En fin, TERMINAMOS, los que deseen seguir con el proyecto, adelante acá se buscó explicar todo de la mejor manera.

domingo, 20 de marzo de 2011

Demostración de la Plataforma de Lanzamiento de DIspositivos de Rescate socorriendo a un edificio en Llamas!

He aquí el fruto de horas y horas y horas de calibraciones, arreglos de estructura, cambios y nuevas ideas en el código!

Disfrútenlo. Nosotros estamos que lloramos de alegría !

Mañana es el gran día del perrito

Buenas ! ,

Como dice el título ya en unas horas toca presentar al querido animal. La promoción del evento está excelente: en la cartelera del GIA sale una foto del canino y hasta en USB Noticias se habla e invita a la gente a asistir. Mañana sera un gran día para demostrarle a las personas nuestro trabajo e incitarlas a meter la materia. Ya el robot esta con todos sus últimos arreglos ! Se arreglaron errores de funcionamiento. Por ejemplo el seguir la pelota tenía un if de más que no dejaba alinear bien. Además se grabó en el aparato que se hablo en el post pasado que nos prestó la profesora Chang( se ve en una de las fotos el anarajando ) el ladrido del perrito, por lo que ahora cuando ande hará éstos. Éste va a ser colocado en el hocico donde hay un espacio perfecto para colocarlo y donde no se va a caer.

Se probó varias veces y se grabaron los siguientes videos ( sin el caparazón ):


 También se tomaron las siguientes fotos:

https://picasaweb.google.com/cfgrobotica/Perrito18032011#

El código final sera publicado el mismo día del evento ya que no se sabe si se hagan más ajustes.

Sin más nada que decir nos vemos el mañana!

sábado, 19 de marzo de 2011

Plataforma Móvil de Lanzamiento de Dispositivos de Rescate

Como tercer proyecto, Juan Martínez y yo, Sergio Martini, hemos estado trabajando en el diseño, construcción y programación de una Plataforma Móvil de Lanzamiento de Dispositivos de Rescate. 

La idea es crear un robot sobre ruedas que se encuentre inicialmente en un pequeño hangar adjunto a un edificio y, cuando se de una señal a causa de un incendio en el mismo, el robot salga de su hangar y se posicione frente al edificio y proceda a apuntar y disparar, con unos cañoncitos de lego, unos dispositivos amarrados con cuerdas de rescate (pabilo)  hacia las ventanas del edificio cercanas a donde se encuentren en llamas. De esta manera las personas que se encuentren en esa zona del edificio y por las llamas no puedan acceder a la escalera de emergencia, puedan ser evacuadas deslizándose con un arnés por la cuerda tensada por la plataforma de rescate.

Para ello es indispensable crear una base para los lanzadores que tenga dos grados de libertad, pitch y yaw. Sobre dicha plataforma estará ubicada la cámara del XBC para que la visión se mueva con ella y pueda apuntar. Usaremos cuadros rojos para indicar  las ventanas que están "en llamas" y será hacia estas que el programa hará que se muevan los motores a fin de alinearse y disparar a través de dicha ventana.

La primera prueba consistió en probar que tan confiables eran los disparadores. Para ellos los instalamos en un una base circular con piezas de lego y procedimos a fijarla en un punto de la mesa de trabajo. Luego colocamos con ayuda de unas cajas una hoja blanca en la cual disparamos 10 veces con cada uno de los 4 disparadores y con un marcador fuimos marcando donde había golpeado el proyectil. De esta forma calculamos a grosso modo cuál era el error. 

 










Img 1. Base de los disparadores para prueba. 
                  Img 2.  Prueba de error de los disparadores

 Img 3. Distribución de impactos obtenida. (Cada color es un disparador)

Para accionar los lanzadores incluimos en la plataforma  un servo motor y transformamos el movimiento de rotacional a lineal para hacer subir y bajar un brazo mecánico. Dicho brazo será el que presionará el mecanismo de disparo de los lanzadores.

Img 4. Accionador de los lanzadores con servo motor

El siguiente fué el primer prototipo de la plataforma. Se puede observar la posición de los motores para lograr los movimientos de pitch y yaw.
:
Img 5. Primer prototipo de plataforma

Un problema que surgió con este modelo fué que el XBC tiene sólamente 4 entradas para motores, y dos eran necesarios para las ruedas. No se puede apreciar en la foto, pero el primer prototipo usaba 3 motores, por tanto sólo hubieramos podido usar otro para el movimiento. Por tanto decidimos substituir uno de ellos por un servo motor: el que maneja el pitch.  Paa fijarlo usamos el soporte que se observa en la Img 6. para colocarlo en la articulación que se observa en la Img 7. El resultado se observa en la Img 8.:



  
   Img 6. Soporte de servo del pitch

   Img 7. Articulación del Pitch

Img 8. Servo motor encargado del pitch

Con respecto a la mobilidad, en un principio quisimos emplear orugas en lugar de ruedas, en caso de que hubieran escombros frente al edificio, pero debido a la difícil y frágil sujetación de las mismas y a la dificultad para los giros decidimos finalmente regresar a las confiables ruedas.






Img 9 y 10  . Base con orugas. Nótese la inclinación para escalar irregularidades.

Después de un prototipo fallido de base que sujetara la plataforma de lanzamiento llegamos a este, mucho más robusto que el anterior.

Img 11. Vista inferior del diseño final de la estructura del robot.


Img 12. Diseño final del robot.



En el siguiente video podemos observar un video que muestra las capacidades de giro de la plataforma y la activación de los lanzadores:


Al usar 4 dispositivos de rescate con cuerdas, nos costó tiempo e ingenio idear una estructura y configuración que permitiera que no se enredaran entre sí. En el siguiente video iliustramos el resultado:


El siguiente es un video demostrativo de la utilidad de la configuración de las cuerdas explicada en el video anterior. La desviación se debe a que aún no se había calibrado la visión de la cámara.



viernes, 11 de marzo de 2011

Aprendiendo con el perrito

Buenas gente !

Siguimos con el progreso del robot ! Ya se programo la mayoría de las funciones y se conectaron al robot las siguientes cosas:

  • Servo 0: Boca
  • Servo 1: Cola
  • Servo 2: Pata
  • Puerto 0 (analógico) : Infrarojo.
  • Puerto 14 (digital): Pulsador de regaño
  • Puerto 15 (digital): Pulsador de cariño
  • Motor 0: El izquierdo.
  • Motor 2: El derecho

Con respecto a la cámara los 3 modelos de colores son los siguiente:

  1. Zona de hacer las necesidades ( Roja )
  2. Pelota ( Amarilla )
  3. Humano ( Azul ) : Se quiere que siga los blue jeans, ya que es muy común

El robot va a hacer un ciclo infinito de la siguiente forma:

Inicializan las probabilidades ( bueno 5 y malo 15 )

Para siempre

    Si hay obstaculo
        Esquivarlo
    Sino si hay pelota
        Agarrar pelota ( Color amarillo de cierto tamaño )
        r <- uniforme(0,20)
        Si (r < p. agarrar pelota mal)
             Soltar pelota
             Esperar regaño o cariño y actualizar las probabilidades ( Se aumenta y disminuye en 1 )
        Sino
            Buscar humano
            Seguirlo, llevarle la plota y soltarla
            Esperar regaño o cariño y actualizar las probabilidades ( Se aumenta y disminuye en 1 )
         Fin
    Sino si hay humano ( Color azul de cierto tamaño )
        Seguir humano
     Fin

    r < uniforme(0,500)

    Si ( r < 1 )

        r <- uniforme(0,20)
        Si (r < p. hacer necesidad mall)
            Levantar y bajar la pata
            Esperar regaño o cariño y actualizar las probabilidades ( Se aumenta y disminuye en 1 )
        Sino
            Buscar zona indicada
            Levantar y bajar la pata
            Esperar regaño o cariño y actualizar las probabilidades ( Se aumenta y disminuye en 1 )
        Fin
     Fin

Fin

uniforme: devuelce un entero entre los dos números que se le dan, usando una distribución uniforme.

Cuando se refiere a busca el robot va a girar poco a poco viendo si ve el color que necesita: humano azul, zona rojo y pelota amarillo.

Como se ve las probabilidades son enteras, en vista que la funcion random de xbc devuelve un entero entre cierto intervalo.

Otro detalle que se ve es que el perrito va a tener más probabilidad de equivocarse, la idea es ver que aprende!

Por ahora las probabilidades van a varias por 1. Es decir, si la buena estaba en 10 y la mala en 10. Si el perrito hizo algo bien y se le hace cariño, entonces la buena para a 11 y la otra a 9. Como el perrito se quiere que este un buen rato andando, de esta forma no aprende tan rapido. De todas formas se puede cambiar a la perfección estos valores.

Además de el código vale acotar que la profesora Carolina Chang, nos prestó un juguete que graba cierto sonido y lo reproduce dependiendo de la luz que sienta. La idea es usar este aparato para simular los ladridos del perro, lo que va a aumentar mucho el realismo del animal !

Ya lo que falta es asegurar que lo que se programo este bien, que todo ande bien calibrado y bueno ver que mejoras se le pueden colocar.

Finalemente es importante resaltar que la cámara del XBC no es muy buena dentro del salón del GIA: a veces ve una silla azul o una tabla amarilla lo que no permite probar bien. Se intento probar afuera, pero es peor porque la cámara practicamente ve todo rojo y alguno otra cosa amarilla. Por los momentos se tiene pensado es probarlo en el primero mencionado, ya que es el mejor lugar hasta los momentos, pero se tiene en cuenta este problema y se buscará a ver si hay un mejor lugar.

Acá el link para descargar el código:

http://rapidshare.com/files/452103662/mascota.ic

miércoles, 9 de marzo de 2011

Ya con forma el Perrito

Saludos gente,

Algo tarde este post, pero ya empezamos con la construcción de nuestro querido animal: creamos la estructura del lego y cortamos y pintamos el cartón. Ya tiene forma !

Éste va a tener dos aciones que aprendera: agarrar la pelota y hacer sus necesidades en la zona adecuada. La primera lo hace bien si busca un humano ( se guía por el azul, ya que los blue jean son las ropa más común )  y se la devuelve o mal si la suelta. La pelota va a ser amarilla y la zona adecuada rojo, y ya con eso se usan los 3 colores que puede configurarsele a la cámara.

Como se planeó se puso un servo adelante, que va a ser la boca, uno atrás que movera la cola y finalmente uno de lado y atrás que va a mover la pata derecha de la parte trasera.




Aún le faltan ciertos detalles, como una tapa adelante y otra atrá, que cuabran mejor todas las partes mecánicas. Y bueno ya con eso cuadrar hacer que la boca y cola funcionen bien con ellos. La cámara y el infrarojo se pondrán en dos huecos en la parte de adelante.

El cariño, es decir felicitarlo, es como hacerle un cariño en la parte superior, donde se colocó uno de los pulsadores. Su contra parte la de regañarlo se desea poner en la parte de atrás donde va a simular una nalgada.

También se pensó y analizó la forma de generar un aprendizaje fácil y creible. La idea es sencilla, se tienen dos probabilidades: bien y mal. Cuando el vaya a hacer una de las acciones de aprendizaje, se genera un número aleatorio entre 0 y la suma de la prob. de mal y bien. Puede caer entre [0..p. mal ) y [p. mal ... p. mal + p. bien). Si cae en la primea hace la acción incorrecta, sino hace la adecuada. Al terminar el se queda parado esperando un regaño o cariño. Si lo hizo bien entonces se aumenta la probabilidad de hacerlo bien y se dismimuye la contrario, manteniendo el mismo valor de la suma entre ambas. Hacerlo de esta manera es sencilla de programa y es bastante creíble a simple vista.

La pelota la va a buscar siempre que la vea, al igual seguir el humano. Sino el simplemente va a merodear evitando obstaculos y va a ir generando una probabilidad para ver si va a ir al baño.

El Perrito !

Buenas gente,

Yo (Federico) y Juan Carlos vamos a hacer como tercer proyecto un perrito. Es decir, vamos a crear un robot que simule el comportamiento de una mascota canina.

La idea es que el animal haga 4 acciones: seguir a un humano, buscar una pelota, hacer sus necesidades y merodear. Además de esto, éste va a aprender mediante reforzamineto, es decir se va a poder regañar o felicitar al robot, de modo que si hace algo bueno y se felicita va a ser màs probable que lo haga bien y el contario en caso que lo haga mal.

Para ello se tiene pensado usar un estructura muy similar a la del robot anterior: que mantenga la tarjeta y ruede.
Ésta va a estar recubierta con cartón que simule la forma de un perro. Además de ésto se le agregaran 3 servos con los siguientes objetivos: abrir la boca, levantar la pata y mover la cola. El primero es para ejecutar la acción de agarrar la pelota, el segundo para simular que esta haciendo pipi y el tercero para que cuando siga el humano sea lo más parecido a un perro real.

También va a tener dos puladores para indicarle al robot lo haga bien o mal. Posteriormente se explicará donde se desea colocar cada  uno.

Finalmente se va usar un sensor infrarojo para que evite los obstaculos cuando gire.

En la siguiente entrada, se explicará mejor cada uno de los detalles.

Separados :(!

Hola gente, el tercer proyecto es en grupos de dos, por lo que Sergio y Juan Martinez van a formar un grupo y Federico y Juan Carlos otro. Estos son libres, así que cada uno hará algo diferente. De todas formas los post van a continuar por esta misma vía.

martes, 1 de marzo de 2011

Código Final

Gente acá le colocamos el código final usado para la corrida de la presentación. Este lo pueden descargar de:

http://rapidshare.com/files/450500532/Bombero_final.ic

viernes, 18 de febrero de 2011

Entrega Final: Robot Rescatista

Para la cuarta y última entrega del robot rescatista debemos agregar las funciones que faltaban para realizar la tarea completa, es decir:

  •  Diferenciar a las diferentes tarjetas y actuar de acorde a cada una de ellas.
  • Mejorar la función de agarrar a las víctimas.
  • Diseñar la función de dejar a las víctimas una vez vuelva al Campo de primeros auxilios (Salida/Entrada del laberinto).
Debido a que los colores de las tarjetas no eran muy vivos y estábamos teniendo problemas con la calibración de los canales de color, editamos la imagen de la tarjeta para lograr que los colores fueran más intensos. A continuación imprimimos un total de 20 tarjetas de las cuales 7 son víctimas rojas, 7 víctimas amarillas, 3 son verdes y 3 más son fallecidos. 
Img 1. Tarjetas de las víctimas

Una vez calibrados los tres canales para captar los colores rojo, amarillo y verde se procedió a especificar qué hacer en cada caso. Todos los grupos acordamos en conjunto usar una pieza de Lego amarilla como víctima. En caso de encontrar a una víctima y no haber visto ninguna tarjeta antes, se supone que es el cuarto caso: se trata de un fallecido. Por tanto el robot lo evade dando una vuelta de 180°. 

Img 2. Víctima situada a un cuadro de su tarjeta.

En caso de encontrar una tarjeta roja, se inicia un DFS que busca  hacia todas las direcciones posibles a un cuadro de distancia. Al encontrar a la víctima en esa proximidad, la agarra y vuelve al lugar del laberinto donde vio a la tarjeta. Entonces prosigue con la navegación.
Si en cambio encuentra a una tarjeta amarilla, la evita y prosigue buscando a las rojas.
Una vez que haya recorrido todo el laberinto y dejado en el Campo de primeros auxilios a las víctimas en estado crítico (rojas), vuelve a entrar al laberinto pero en esta oportunidad en busca de las víctimas amarillas. Por tanto cuando las consiga las rescatará como hizo anteriormente con las rojas y al final las dejará también en el campo de primeros auxilios.

Img 3. Detalle del parachoques de calibración

Si encuentra una tarjeta verde en el primer recorrido, cuando está buscando a los rojos, inicia el DPS de búsqueda y cuando ubica a la víctima le hace un beep para “informarle hacia donde está la salida”. Durante el segundo recorrido, si encuentra una tarjeta verde, la evita dando una vuelta de 180° pues él ya sabe que le informó cómo escapar en el primero.

A pesar de que nuestro sistema de control para la navegación es satisfactoriamente bueno, va acumulando error y después de cierto tiempo (30 secs – 1 min) comienza a presentar oscilaciones de gran amplitud y por tanto a no ir en línea recta. Esto puede traer problemas impredecibles, como quedarse trancado contra alguna esquina. Como solución decidimos implementar una rutina de calibración que se ejecuta en ciertos eventos de frecuencia moderada. Dicha rutina consiste en avanzar a la mitad de la velocidad por un corto tiempo para chocar contra la pared y gracias a un parachoques, que además le evita cualquier daño, cuadrarse con ella para quedar derecho. A continuación retrocede un pequeño tiempo para quedar de nuevo en el centro del cuadro y proseguir con la navegación.

Para porder identificar la salida del laberinto, construimos en lego un indicador de colores verde y rojo. Elegimos éstos colores para que el programa no lo confundiera con ninguna tarjeta. Dicho indicador presenta una cruz roja para indicar que es el "campo de primeros auxilios". 

Img 4. Indicador de salida del laberinto (Campo de primeros auxilios).
 

A continuación una demostración del comportamiento del PROFETA DE LA DEVASTACIÓN realizando la tarea completa:






domingo, 6 de febrero de 2011

Tercera Entrega: Robot Rescatista

Para esta semana nuestro objetivo es lograr que nuestro robot sea capaz de recorrer el laberinto, reconocer los diferentes tipos de víctimas y rescatarlas en el orden establecido, es decir, primero a los rojos y luego a los amarillos, haciendo un beep a todos los verdes que consiga pero sin recogerlos.

También fué parte del trabajo de esta semana concretar el diseño y construcción del laberinto donde se van a desenvolver los robots de todos los grupos del curso.

Compramos las tablas que faltaban y con clavos las fijamos para formar el diseño de laberinto que decidimos todos los grupos en conjunto. 

Img 1 y 2. Construyendo el laberinto.










Un importante cambio que hicimos fue modificar el sistema de engranajes que transmite la potencia a las ruedas, pues el sistema anterior estaba haciendo mucho ruido, presentaba vibraciones y en general no cumplía con los patrones de calidad que deseamos. Por tanto decidimos transferir la energía a un engranaje más grande que el anterior y además cambiar las ruedas por unas más pequeñas. Para ello, fue necesario cambiar un poco la estructura de la base del robot, como se puede ver en la siguiente imagen.


Img 3. Última versión de los engranajes.



Se incorporó una "rueda loca" en la parte trasera, esta nos sirve de apoyo para sostener el peso del robot y al mismo tiempo eliminamos el problema de roce durante los giros. Se probaron una gran cantidad de ideas, pero nos encontrabamos con varios problemas como que la rueda era demasiado fragil, demasiado pequeña, demasiado grande o no giraba 360°. Finalmente conseguimos un modelo que cumplia con nuestras necesidades, el cual se presenta a continuación.


Img 4 y 5 "Rueda loca" en detalle.


Por último, agregamos una unas ruedas en la parte frontal del robot que nos sirven como protector contra los impactos y al mismo tiempo evitan el roce durante los mismos, permitiendo que el robot se continue moviendo con facilidad hasta que este corrija su rumbo. Así mismo, esta modificación brida al robot un aspecto más intimidante, por lo que decidimos agregarle algunos detalles decorativos que se pueden observar en las siguientes imágenes.
 
 Img 6. Parachoques anterior
Img 7. Parachoques nuevo




















Se implementó un algoritmo  de control PD (Proporcional Derivativo) que usa los sensores infrarojos laterales para ayudar a avanzar de forma recta. También de implementó un algoritmo de navegación en el que siempre sigue la "la mano izquierda" para recorrer el laberinto.




A continuación un video en dos partes (lo cortamos porque pensamos que no lograría seguir, pero al ver que si lo lograba, continuamos grabando en otro video) que demuestra el resultado del trabajo de esta semana ( nuevos engranajes, "rueda loca", control y navegación).

NOTA: La presentación amenazadora que adquirió nuestro robot para esta entrega nos inspiró en nombrarlo "EL PROFETA DE LA DEVASTACIÓN"

Parte 1:





Parte 2:


Actualizacion: Con algunas correcciones y entonación se logró recorrer todo el laberinto. A continuación un video:


martes, 1 de febrero de 2011

Segunda Entrega

Hola  a todos !

Para ésta se tenía que hacer que el robot recogiera una víctima (en consenso todos los grupos decidimos elegir unas fichas amarilla que hay en el laboratorio).

Primero que nada debemos mencionar que gran parte del carro fué remodelada. Se cambiaron las siguientes cosas:

- Ahora cada ruega funciona con dos engranajes, que van a lograr que el carro vaya mucho más rapido. Para lograr ésto se configuran de la siguiente forma: uno grande que esta pegado al motor para mover a otro pequeño, que está en el eje de las ruedas, de ese modo por cada vuelta que de el movimiento se traduce en varias vueltas de la rueda. En el siguiente link se puede ver mas información sobre esto: http://es.wikipedia.org/wiki/Engranaje

 Img 1. Sistema de engranajes para las ruedas.

- Se agrego un compartimiento para las víctimas. Éste consiste de una puerta que sube y baja mediante un servo motor. Además fueron agregadas dos piezas que sirven de parachoques y ayudan a ingresar a las víctimas, pues funcionan a modo de embudo.

 Img 2. Compuerta (color amarillo) controlada por el servomotor (a la derecha, azul). Parachoques con funcionalidad de embudo.

A continuación una explicación detallada de cómo sujetamos el servomotor de la compuerta:

 Img 3. Piezas necesarias para construir el soporte del servo motor.



- Se mejoró la estructura para que fuera más rígida.

- La base donde se encuentra el sensor infrarrojo fué mejorada y cambió para que se pudieran agregar dos más hacia los lados para detectar la distancia hasta las paredes del laberinto y así poder calibrar su avance. También serán útiles para detectar posibles caminos hacia los lados.

 Img 4. "Torreta" con los 3 sensores de distancia infrarojos Sharp.

Luego de esto se calibró la cámara y se programó al GBA para que reconociera el color de la víctima. Para ellos se ingresa en Vision->Color Model y se seleccionan los 3 "tipos de color" (canales) que se quieren reconocer. En nuestro caso configuramos el tercero para reconocer el color deseado: azul.

En cuanto al código que se uso, este hace lo siguiente además de si ve un obstáculo girar hacia la izquierda. Cuando detecte un blob de cierto tamaño del color de la víctima procede a llamar a agarrar_bloque().

Acá se hace lo siguiente:

1) Se paran los motores
2) Abre el servo
3) Hace un ciclo que va a ir alineando el carro con respecto a lo víctima. Para ello mueve una rueda más rápido que otra dependiendo si el objeto esta más de un lado u otro
4) Finalmente se sale del ciclo cuando lo deja de ver y simplemente es que lo tiene cerca por lo que se lo deja siguiendo cierto tiempo
5) Se cierra el servo de modo de empujar más para adentro a la víctima
6) Coloca el servo a 90 grados del suelo

He aquí el código:

#use "xbccamlib.ic"

void rotate_bot(float turns)
{
    float half_width, radius, pi, ticks_per_robot_rev;
    float ticks_per_wheel_rev, robot_rev_circum, wheel_circum;
    long ticks_to_turn;
    //put in pre-defined values
    half_width=100.; radius=50.; pi=3.1416; ticks_per_wheel_rev=2000.;
    //calculate circumferences and ticks
    wheel_circum=pi*radius*2.0;
    robot_rev_circum=half_width*pi*2.0;
    ticks_per_robot_rev=
      ticks_per_wheel_rev*robot_rev_circum/wheel_circum;
    ticks_to_turn=(long)(turns*ticks_per_robot_rev);
    mrp(0,RUEDAD,ticks_to_turn); //move left motor forward
    mrp(2,RUEDAI,-ticks_to_turn); //move right motor backwards
    bmd(0); bmd(2); //wait for both motors to complete moves
}

//Esquiva cuando consigue algo
void girar(float grados){
    rotate_bot(grados);
}

#define RUEDAD 380 
#define RUEDAI 345

void main() 
{
    init_camera();
    enable_servos();    
    set_servo_position(0,180);
    sleep(1.0);
    
    mav(0,RUEDAD);
    mav(2,RUEDAI);
    
    while(1){
        track_update();
        
        if (analog(0) > 120){
            ao();
            girar(0.05);
            mav(0,RUEDAD);
            mav(2,RUEDAI);
        }
        
        else if(track_count(2) > 0 && track_size(2,0)>500){
            printf("ENCONTRE UN BLOQUE\n");
            agarrar_bloque();
            mav(0,RUEDAD);
            mav(2,RUEDAI);
        }
        
    }
    
    
}

void agarrar_bloque()
{
    ao();
    set_servo_position(0,60);//abrir
    sleep(1.0);
    while(track_size(2,0)>500) {
        track_update();
        mav(2, RUEDAI-100+(track_x(2,0)-176));
        mav(0, RUEDAD-100+(3*(176-track_x(2,0)))/2);
        //mav(2, RUEDAI+2*(track_x(2,0)-176));//mav(0, RUEDAD);
        printf("%d\n", track_x(2,0));
        sleep(0.1);
    }
    mav(0,RUEDAD);
    mav(2,RUEDAI);
    sleep(4.0);
    set_servo_position(0,210);//empujar
    sleep(1.0);
    set_servo_position(0,180);//acomodar
    sleep(1.0);
    printf("Y LO AGARRE\n");
    
}

Seguiremos publicando el progreso!

lunes, 24 de enero de 2011

Robot de Rescate: Primera Entrega

El segundo proyecto del curso consiste en diseñar, construir y programar un robot que sea capaz de entrar en un ambiente desconocido y recorrerlo en busca de víctimas heridas para rescatarlas, es decir, llevarlas fuera de dicho ambiente.

Dicho ambiente tendrá la forma de un laberinto y las víctimas que se encuentran en él tendrán cerca una etiqueta de colores que indicará el grado de gravedad de su estado, donde verde significa que no necesita rescate pues se encuentra bien y puede escapar solo, amarillo indica que requiere rescate pero no está en situación crítica, rojo quiere decir que la persona necesita rescate inmediato para salvarse y negro significa que la persona o ya ha fallecido o no tiene posibilidades de sobrevivir. El robot debe ser capaz de reconocer esta información y en función de ella establecer prioridades de rescate. Lo lógico sería que primero busque a los pacientes rojos, luego a los amarillos y por último a los verdes.

Ésta fué una explicación del proyecto completo, pero para la primera entrega del pasado lunes 24 de Enero lo que debíamos conseguir es crear un prototipo de robot que fuera capaz de avanzar y evitar chocar contra obstáculos.

 Img 1. En ésta imagen se puede observar como fijamos los motores al chasis del carro, lo cual no fué trivial debido a que los mismos no tienen conexiones tipo Lego y no queríamos que quedaran flojos sino bien firmes.










A continuación una explicación detallada de cómo solucionamos el problema de fijar los motores:

<<<Img 2. Base de Lego para el motor CS-60 

>>>Img 3. Piezas necesarias para la base del motor.                         

El video con el procedimiento:











 Img 4, Img 5. Vemos la cara frontal en la que colocamos un parachoques para evitar cualquier daño accidental a la cámara o al equipo en su totalidad. También es visible la ubicación del sensor de distancia infrarojo, el cuál está colocado tan "atrás" por una muy buena razón.
Img 6. Observando la gráfica Distancia Vs Intensidad de la Señal de salida, notamos que para dos valores diferentes de distancia el valor de la señal analógica puede ser el mismo, por tanto al  digitalizar la señal podría surgir una ambigüedad: el objeto se encuentra a 3 cm, o a 18? (ver gráfica). Por lo tanto decidimos eliminar la región menos a 5 cm asegurándonos que el sensor nunca capte nada a menos de dicha distancia; ésto lo logramos colocando el sensor 5 cm "dentro" del chasis.




La programación para esta primera entrega fué muy sencilla: avanza, y si captas mediante el sensor infrarojo un obstáculo a cierta distancia, rota 90 grados a la derecha y sigue avanzando. Los detalles interesantes que podemos mencionar son las pruebas de calibración. Estamos en un mundo no ideal y por tanto los motores no son idénticos. Así que fuimos haciendo pequeñas variaciones en las veocidades de cada motor para tratar de lograr que el robot se moviera en línea recta y que realmente las rotaciones dueran de 90 grados.

Aquí podemos observar una prueba de calibración de giro:


En este video veremos el resultado final de esta primera entrega:





Máquina de Rube Goldberg

Bienvenidos a nuestra página del curso CI-4431: Introducción a la Robótica dictado por la profesora Carolina Chang.

Nuestro primer proyecto fué crear una máquina de Rude Golberg de al menos cinco pasos cuyo objetivo era apagar un bombillo colocado en una regleta o bien el interruptor de la luz del laboratorio. Para esta primera entrega, nos dividimos en grupos de dos personas, por lo que mostraremos fotos de ambas máquinas.

Como ya mencionamos, cada una debía contener al menos cinco pasos y apagar una luz, pero la profesora ofreció puntos extra si cada máquina se unía con otra formando así una secuencia para apagar al final el interruptor de la luz de GIA. Todos los grupos se pusieron de acuerdo y logramos unir las seis máquinas para la entrega y, salvo unos cuantos fallos debidos a la cantidad de pasos, conseguimos ejecutar los (aproximadamente) 30  pasos y finalmente apagar las luces del laboratorio.

A nivel personal, esta fué una experiencia bastante entretenida. Todas las personas del curso disfrutamos un montón esta experiencia.

Sin más que decir las fotos hablan por sí mismas:






Img 1. Aquí vemos a nuestro compañero Juan en pleno proceso de creación de la base que sostenía a la regleta de su equipo y al mecanismo destinado a accionar su interruptor.







Img 2. Aquí vemos en detalle el inicio de nuestra máquina. El equipo anterior libera la esfera que está a la extrema derecha, se transfiere el momentum y la esfera del otro extremo golpea al caucho, el cual se cae y libera a la pequeña rueda atada a la cuerda para que esta pueda ser llevada por la polea.







Img 3. El mecanismo de las dos poleas. El caucho que está en el extremo izquierdo es más grande y pesado que su contraparte en el extremo derecho, pero este segundo está delicadamente sujetado por un tercer caucho más pesado que los dos primeros sobre una base en precario equilibrio.



 Img 4. Nuestro compañero Sergio está calibrando al carrito con la vela para que quede exactamente en el punto donde el caucho (colgando en la parte superior), al caer, remueve el freno y éste pueda rodar librementedejando así libre al mecanismo que apaga la regleta y pasar a la siguiente etapa donde la vela quemará una cuerda que dará inicio a la máquina del siguinte equipo.










Img 5. Máquina de Juan Carlos y Federico, a sus comienzos, antes de unirla con las demás














Img 6. Todos los grupos poniéndose de acuerdo y trabajando en sus máquinas









El siguiente es un video de nuestra máquina por si sola (la de Juan y Sergio), aún sin interconectar con las demás:




Aquí presentamos el video de las máquinas en su primera corrida (cortesía de la proferora Carolina Chang):




He aquí el link a la nota de prensa: http://usbnoticias.com/post/1813