Volver a Robótica

Sensores en el Robot

Sensores:

Definen el mundo del robot

De señales a símbolos

Diseño de la sensorización de un robot

Ejemplo

¿Cómo detectaríamos la presencia de gente?

Ejemplo

¿Cómo medimos distancias?

Integración de sensores

Sensores sencillos

División: sencillos/complejos, activos/pasivos Sensores sencillos:

Sensores de interruptor

Programación en LegOS

Programación en LegOS (ejemplo)

void sensor_toque() {
   cputs("toque");  /*indico en que función estoy*/
   lcd_refresh();
   msleep(500); 
   motor_a_speed(100);
   motor_c_speed(100);
   while(1)     {
      motor_a_dir(fwd);
      motor_c_dir(fwd);
 
      cputw(SENSOR_1); /*muestro el valor*/
      lcd_refresh(); 
      
      if(SENSOR_1!=0) {  /*sensor tocado*/
         motor_a_dir(rev);
         motor_c_dir(rev);
         sleep(1);
      }
   }
}

Sensores de luz

Programación en LegOS

Programación en LegOS (ejemplo)

void sensor_luz() {
   cputs("luz");  /*indico en función estoy*/
   lcd_refresh();
   msleep(500); 
   
   ds_active(&SENSOR_2);  /*activo la conversión A/D*/
 
   while(1) {
      lcd_int(LIGHT_2);
      lcd_refresh();
      msleep(250);
 
      if (LIGHT_2 < 50)
         cputs("oscuro");
      else
         cputs("claro");
       
      lcd_refresh(); 
      msleep(250);
   }
}

Botones en LegOS

Programación en LegOS (ejemplo)

 /* Sacado de simple-rover.c  */
 
 wakeup_t button_press_wakeup(wakeup_t data) {
    return PRESSED(button_state(),data); }
 
 wakeup_t button_release_wakeup(wakeup_t data) {
    return RELEASED(button_state(),data); }
[...]
int  task_swapper() {
 
  wait_event(&button_press_wakeup,BUTTON_PROGRAM); /*espera por el botón PROGRAM*/
  wait_event(&button_release_wakeup,BUTTON_PROGRAM);/*espera que lo suelten*/
  t2=execi(&motor_driver,2,DEFAULT_STACK_SIZE);    /*arranca el motor*/
  wait_event(&button_press_wakeup,BUTTON_PROGRAM); /*espera pulsación de PROGRAM*/
  wait_event(&button_release_wakeup,BUTTON_PROGRAM);/*espera que lo suelten*/
  kill(t2);  
}

Otros tipos sensores simples

Sensores Activos

Recordar división preliminar (activos/pasivos, simples/complejos)

Fotosensores activos

Reflexión (reflective):

Se colocan juntos y detectan la reflexión de los objetos.

Barrera (break-beam):

Se oponen y detectan cuando algo interrumpe el haz.

Uso de los fotosensores activos

Problemas con los fotosensores activos

Sensores de rotación

Sensores de rotación en LegOS

Programación en LegOS (ejemplo)

void sensor_rotacion() {
   ds_active(&SENSOR_3); /* lo activo*/
   ds_rotation_on(&SENSOR_3); 
   ds_rotation_set(&SENSOR_3, 0);
 
   while (!PRESSED(button_state(), BUTTON_VIEW)) {
      lcd_int(ROTATION_3);
      lcd_refresh();
      msleep(20);
   }
}

Modulación de luz

Sensores de infra-rojos

Sensores de ultrasonidos

Ejemplo: sensores de Polaroid

Problemas con ultrasonidos

Visón artificial

Funcionamiento biológico

Visión artificial

Imagen digital

Tratamiento de Imágenes (preliminar)

Consideremos un ejemplo de una cámara grises pixels

Tratamiento de imágenes (alto nivel)

Una vez determinados los bordes se trata de distinguir ``cosas''

Visión en tiempo real

Volver a Robótica