robot

Paso 7. Montando los bigotes

Paso 7. Montando los bigotes

     Última actualizacón: 16 noviembre 2017 a las 17:00

cartel-robotica

Muchas máquinas robotizadas dependen de una variedad de interruptores táctiles para, por ejemplo, contar objetos en una línea de producción o alinearlos durante los procesos industriales. En estos casos los interruptores ofrecen una entrada de datos que ordenan otro tipo de salida programada de datos.

En el paso anterior enseñamos a andar al robot, pero lo hacía a ciegas ya que si tropezaba con un obstáculo allí se quedaba. Ahora vamos a colocarle unos sensores que le avisen de la presencia de obstáculos en su camino, además de indicarle si dicho obstáculo se encuentra a la derecha o a la izquierda. Con esa información podremos indicarle que realice un movimiento de desvío que lo evite y así pueda proseguir hacia su objetivo.

Para ello vamos a emplear dos bumpers, nombre técnico con el que se conoce a ciertos interruptores que cierran sus contactos cuando se presiona uno de ellos. En nuestro caso, los bumpers están conformados por dos alambres de acero y tienen el aspecto de bigotes o antenas. Los llamaremos bigotes porque sirven para detectar objetos como lo hacen los bigotes de un gato. En este paso los utilizaremos solos, pero pueden ser combinados con otros sensores como veremos más adelante.

Montando los bigotes

Antes de grabar un programa para que robot se mueva en función de lo que encuentra en su camino, necesitamos montarlos y probarlos primero. Vamos a utilizar los siguientes materiales:

  • Dos alambres de acero.
  • Dos tornillos de cabeza plana de 3×15 mm.
  • Dos separadores metálicos de 3×10 mm.
  • Dos arandelas de baquelita de 3 mm.
  • Dos conectores de tres pines.
  • Dos resistencias de 220 Ω.
  • Dos resistencias de 10 Ω.
Material para el montaje de los bigotes.

Material para el montaje de los bigotes.

Material para el montaje de los bigotes.

Material para el montaje de los bigotes.

Primero debemos quitar los tornillos que unen la tarjeta Home Work con los dos separadores frontales. Colocamos un separador y una arandela de baquelita en cada uno de los tornillos.

Retirar el tornillo.

Retirar el tornillo.

Colocamos el separador y la arandela.

Colocamos el separador y la arandela.

Colocamos los tornillos sobre los agujeros de la tarjeta y atornillamos a los separadores que hay debajo, pero no debemos apretarlos completamente todavía. Enganchamos los bigotes a los tornillos y colocamos uno por encima de una de las arandelas y el otro por debajo, de tal forma que no se toquen entre sí.

Insertamos los bigotes.

Insertamos los bigotes.

Ahora podemos terminar de apretar los tornillos y colocar los conectores de tres pines:

Resultado.

Resultado.

Colocamos los conectores de tres pines.

Colocamos los conectores de tres pines.

Prueba de funcionamiento

Ahora vamos a construir el circuito eléctrico de los bigotes para añadirlo a los circuitos de zumbador y los servos que montamos en el paso anterior:

Diagrama de circuito para el montaje de los bigotes.

Diagrama de circuito para el montaje de los bigotes.

Cada bigote es una extensión mecánica de un interruptor normalmente abierto que tiene un extremo conectado a tierra. La razón de que los bigotes estén conectados a tierra (Vss) es que los agujeros en los bordes exteriores de la tarjeta están conectados a tierra. Los separadores y tornillos metálicos conectan la señal de tierra con los bigotes.

Podemos programar el módulo del microcontrolador para que detecte cuándo se presiona un bigote. Los pines o patitas de E/S conectados a cada interruptor están configurados como entradas y reciben un voltaje. Cuando los bigotes no se presionan, el voltaje que reciben es de 5 V (1 lógico). Pero si son presionados, el circuito se cierra con tierra y los pines reciben 0 V (0 lógico).

Colocamos las conexiones y resistencias como hemos visto en el diagrama anterior y ya podemos pasar a crear el programa de control:

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Montaje del circuito.

Resultado final.

Resultado final.

Programa de prueba

Este programa está diseñado para que se puedan probar los bigotes y asegurar que funcionan correctamente. Lo que hace es mostrar el estado lógico de las entradas que corresponden a los pines P7 y P5 conectados a los bigotes (IN7 e IN5).

Todos los pines de E/S son de entrada por defecto, a menos que se programe lo contrario. Por lo tanto, los pines conectados a los bigotes tendrán un “1” si el voltaje que reciben es de 5 V (cuando el bigote no está presionado), o un “0” si lo que reciben es 0 V (cuando el bigote está presionado). Vamos a utilizar el debug terminal para mostrar esos valores:

  1. ‘ Programa de prueba.  pruebabigotes.bs2
  2. ‘ Visualizar las líneas de E/S conectadas a los «bigotes»
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. DEBUG «Estado bigotes», CR,
  6. «Izquierda     derecha», CR,
  7. «_____     _____»
  8. DO
  9. DEBUG CRSRXY, 0, 3,
  10. «P5 = «, BIN1 IN5,
  11. «P7 = «, BIN1 IN7
  12. PAUSE 50
  13. LOOP

El terminal debería mostrar que que P7 y P5 tienen unos valores igual a 1. Si presionamos el bigote derecho contra el conector de tres pines hasta que haga buen contacto, deberíamos ver en el terminar: P5 = 1, P7 = 0. Si presionamos el bigote izquierdo de la misma forma, debería aparecer: P5 = 0, P7 = 1. Si presionamos ambos al mismo tiempo debería mostrar: P5 = 0, P7 = 0. Una vez que todo es correcto seguimos adelante.

Escribimos el código en el programa de edición y lo guardamos.

Escribimos el código en el programa de edición y lo guardamos.

Ejecutamos e introducimos en el robot. No presionamos ningún bigote.

Ejecutamos e introducimos en el robot. No presionamos ningún bigote.

Presionamos el bigote derecho.

Presionamos el bigote derecho.

Presionamos el bigote izquierdo.

Presionamos el bigote izquierdo.

Presionamos ambos bigotes.

Presionamos ambos bigotes.

NOTA: el comando CRSRXY es un formateador que permite ordenar la información que el programa envía al terminal. En el programa, el formateador coloca el cursor en la columna 0 y fila 3 para mostrar los datos de forma ordenada.

Otra forma de probar los bigotes

Imaginemos que tenemos que probar los bigotes cuando no disponemos de un ordenador para ver su estado en la terminal. ¿Cómo podríamos comprobar que se han montado correctamente? Una solución pasa por programar el microprocesador para que saque un valor determinado en función de cuál es la entrada que reciba. Podemos visualizarlo con un par de circuitos LED´s que se enciendan y se apaguen en función de si los bigotes están presionados o no.

Para montar este circuito necesitamos:

  • Dos resistencias de 220 Ω (bandas roja, roja y marrón).
  • Dos diodos LED.

Como siempre, antes de montar el circuito sobre la placa debemos recordar desconectar las pilas de la tarjeta y los servos. Seguiremos el siguiente esquema:

Diagrama de circuito LED para la comprobación del funcionamiento de los bigotes con LED.

Diagrama de circuito LED para la comprobación del funcionamiento de los bigotes con LED.

Prueba de funcionamiento con LEDs.

Prueba de funcionamiento con LEDs.

Prueba de funcionamiento con LEDs.

Prueba de funcionamiento con LEDs.

Una vez montado, volvemos a conectar las pilas, e introducimos el siguiente programa en el editor:

  1. ‘ Programa de prueba.  pruebabigotesconleds.bs2
  2. ‘ Visualizar las líneas de E/S conectadas a los «bigotes»
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. DEBUG «Estado bigotes», CR,
  6.       «Izquierda     derecha», CR,
  7.       «_____     _____»
  8. DO
  9.   DEBUG CRSRXY, 0, 3,
  10.   «P5 = «, BIN1 IN5,
  11.   » P7 = «, BIN1 IN7
  12.   PAUSE 50
  13. IF (IN7 = 0) THEN
  14.   HIGH 1
  15. ELSE
  16.   LOW 1
  17. ENDIF
  18. IF (IN5 = 0) THEN
  19.   HIGH 10
  20. ELSE
  21.   LOW 10
  22. ENDIF
  23. LOOP

Escribir el código en el programa de edición. Ejecutarlo e introducirlo en el robot.

Escribir el código en el programa de edición. Ejecutarlo e introducirlo en el robot.

Como vemos, lo que hemos hecho ha sido insertar dos bloques de código IF…THEN entre el comando de pausa y el comando de bucle. Los comandos IF…THEN los explicaremos un poco más tarde pero baste decir ahora que se emplean en PBASIC para tomar decisiones. La primera declaración pone P1 a nivel alto, de forma que el LED se iluminará cuando el bigote conectado a P7 esté presionado (IN7=0). La parte del ELSE hace que el LED se apague cuando el bigote no está presionado. La segunda declaración hace lo mismo para el otro bigote. Veamos cómo funciona:

Programando el robot para navegar con los bigotes

Ha llegado el momento de poner en práctica todo lo aprendido hasta ahora para lograr que el robot reaccione a la información que le facilitan los bigotes acerca de los obstáculos que puede encontrar en su camino y pueda guiarse con ella. Cuando el robot esté en movimiento y uno de sus bigotes se presione significará que ha tropezado con un obstáculo. El programa de exploración deberá comprobar esa entrada de información, decidir qué significa y, a partir de ahí, realizar la maniobra hay que ejecutar para evitar el obstáculo y dirigir al robot en otra dirección (debemos tener presente que se trata de un movimiento libre y no podremos controlar dónde acabará el recorrido).

El siguiente programa hace que el robot vaya hacia delante hasta que se encuentre con un obstáculo. En el momento en que sea detectado por los bigotes, las rutinas y subrutinas escritas en el capítulo anterior harán que el robot retroceda y gire. Después volverá a avanzar hacia delante hasta que se encuentre con otro obstáculo.

El microcontrolador que gobierna el robot tiene que ser programado para que tome decisiones cuando uno de los bigotes es presionado. El lenguaje PBASIC dispone de un comando llamado IF…THEN. La sintaxis es como sigue:

IF (condición) THEN… {ELSEIF (condición)}…{ELSE}…ENDIF

Los puntos suspensivos significan que se puede meter un trozo de código en su lugar. El comando hace que el robot ejecute el bloque de código para la primera condición que sea verdadera. Entonces, salta hasta el comando ENDIF y continúa desde ahí.

El siguiente programa muestra una forma de evaluar las entradas de datos proporcionadas por los bigotes para decidir a qué subrutina de movimiento llamar utilizando los comandos IF…THEN:

  1. ‘ Sorteo de obstaculos.  andandoconbigotes.bs2
  2. ‘ El robot utiliza los bigotes para detectar
  3. ‘ objetos y navegar en función de los mismos
  4. ‘ {$STAMP BS2}
  5. ‘ {$PBASIC 2.5}
  6. DEBUG «Programa funcionando»
  7. ‘—–[ Variables ]
  8. pulseCount        VAR          Byte
  9. ‘—–[ Inicializacion ]
  10. FREQOUT 4, 2000, 3000
  11. ‘—–[ Rutina principal ]
  12. DO
  13.   IF  (IN5 = 0) AND (IN7 = 0)  THEN
  14.     GOSUB Back_Up
  15.     GOSUB Turn_Left
  16.     GOSUB Turn_Left
  17.   ELSEIF  (IN5 = 0)  THEN
  18.     GOSUB Back_Up
  19.     GOSUB Turn_Right
  20.   ELSEIF  (IN7 = 0)  THEN
  21.     GOSUB Back_Up
  22.     GOSUB Turn_Left
  23.   ELSE
  24.     GOSUB Forward_Pulse
  25.   ENDIF
  26. LOOP
  27. ‘—–[ Subrutinas ]
  28. Forward_Pulse:
  29.   PULSOUT 13, 650
  30.   PULSOUT 12, 850
  31.   PAUSE 20
  32.   RETURN
  33. Turn_Left:
  34.   FOR pulseCount = 0 TO 20
  35.   PULSOUT 13, 650
  36.   PULSOUT 12, 650
  37.   PAUSE 20
  38.   NEXT
  39.   RETURN
  40. Turn_Right:
  41.   FOR pulseCount = 0 TO 20
  42.   PULSOUT 13, 850
  43.   PULSOUT 12, 850
  44.   PAUSE 20
  45.   NEXT
  46.   RETURN
  47. Back_Up:
  48.   FOR pulseCount = 0 TO 20
  49.   PULSOUT 13, 850
  50.   PULSOUT 12, 650
  51.   PAUSE 20
  52.   NEXT
  53.   RETURN

Escribir el código en el programa de edición. Ejecutarlo e introducirlo en el robot.

Escribir el código en el programa de edición. Ejecutarlo e introducirlo en el robot.

Escribir el código en el programa de edición. Ejecutarlo e introducirlo en el robot.

Escribir el código en el programa de edición. Ejecutarlo e introducirlo en el robot.

El comando IF…THEN en el programa principal comprueba el estado de los bigotes. Si los dos bigotes están presionados (IN5 = 0, IN7 = 0), el robot realizará un giro en “U” llamando a la subrutina Back_Up seguida de la subrutina Turn_Left dos veces (lo que supone un giro de 180o).

Si el bigote izquierdo es el único que está presionado (IN5 = 0), el programa ejecutará la subrutina Back_Up seguida de la subrutina Turn_Right para retroceder y girar a la derecha 90o. Por el contrario, si el bigote presionado es el derecho (IN7 = 0), el programa ejecutará la subrutina Back_Up seguida de la subrutina Turn_Left para retroceder y girar a la izquierda 90o. La única posibilidad que no está resuelta en el programa es cuando los dos bigotes no están presionados (IN5 = 1, IN7 = 1) en cuyo caso el comando ELSE llama a la subrutina Forward_Pulse y envía un pulso para que el robot avance en línea recta al no haber obstáculos.

Esta subrutina tiene un detalle que hemos resaltar:

  1. Forward_Pulse:
  2.   PULSOUT 13, 650
  3.   PULSOUT 12, 850
  4.   PAUSE 20
  5.   RETURN

Sólo envía un pulso y después devuelve el control al programa principal. Esto es importante porque permite al robot comprobar sus bigotes entre cada pulso que le hace avanzar (esto lo hace gracias al comando ENDIF). Significa que el robot comprueba si hay obstáculos alrededor de 40 veces por segundo mientras avanza hacia delante: cada pulso hacia delante hace que el robot avance medio centímetro por lo que es una buena idea enviar sólo un pulso para volver a comprobar los bigotes. Dado que el comando IF…THEN está dentro de un bucle DO…LOOP, cada vez que el programa realiza un pulso hacia delante entra en el bucle que envía el programa arriba hasta el comando DO. ¿Qué sucede entonces? Que el comando IF…THEN vuelve a comprobar los bigotes de nuevo y así sucesivamente. Si no lo hiciéramos así, cuando el robot entrara en la subrutina Forward_Pulse ya no volvería a comprobarlos.

Veamos el resultado de nuestros esfuerzos:

Publicado por José Luis Moreno en ROBÓTICA, 3 comentarios
Paso 6. Programando los movimientos del robot

Paso 6. Programando los movimientos del robot

     Última actualizacón: 16 noviembre 2017 a las 13:40

En esta anotación aprenderemos a programar las maniobras fundamentales del robot: hacia delante, atrás, giros y rotaciones. Es fundamental que comprendamos bien estas maniobras y sus técnicas de programación porque las utilizaremos de ahora en adelante, aunque ahora el robot andará “a ciegas” porque aún no hemos instalado los sensores que le permitan informarse acerca del entorno que lo rodea. Nuestra tarea en los próximos pasos será instalar estos dispositivos que permitirán a nuestro robot esquivar obstáculos o seguir un camino marcado en el suelo.

Como parte indispensable de este paso, también vamos a aprender a poner a punto y calibrar la navegación del robot para que se mueva en línea recta, haga giros precisos y podamos hacer cálculos de distancias. Al final hay un vídeo donde se muestran en la práctica los mismos pasos que iremos dando.

En la imagen inferior vemos los diferentes movimientos que puede hacer el robot (como ya indicamos en pasos anteriores, debemos recordar que cuando el robot se mueve hacia delante su rueda derecha gira en el sentido de las agujas del reloj, mientras que la izquierda lo hace en sentido contrario):

Movimiento hacia delante

Con el programa que indicamos a continuación el robot avanzará en línea recta durante tres segundos.

Recordemos que el argumento Duración del comando PULSOUT controla la velocidad y la dirección de giro de los servos. Los argumentos StartValue y EndValue del bucle FOR…NEXT controlan por su parte el número de pulsos que se envían. Dado que cada pulso tiene la misma duración, el argumento EndValue también controla el tiempo que funcionan los servos.

  1. ‘ Programa de movimiento.  Avancetressegundos.bs2
  2. ‘ El robot avanza hacia delante durante tres segundos
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. Counter VAR Word
  6. FREQOUT 4, 2000, 3000                ‘señal de inicio/reset
  7. FOR counter = 1 TO 122                 ‘marcha hacia delante durante 3 s
  8.                 PULSOUT 13, 650
  9.                 PULSOUT 12, 850
  10.                 PAUSE 20
  11. NEXT
  12. END

Controlando la distancia y la velocidad

Si cambiamos por ejemplo el valor EndValue del bucle FOR…NEXT de 122 a 61, haremos que el robot se desplace hacia delante durante la mitad de tiempo, y que recorra, por tanto, la mitad de la distancia.

Hagamos la comprobación:

Ahora podemos repetir lo mismo pero cambiando el valor EndValue a 244. ¿Qué ocurre?

Los cambios que hemos hecho están relacionados con la distancia que recorre el robot, pero también podemos modificar su velocidad. Por ejemplo, si ajustamos el parámetro Duración de PULSOUT cerca de 650 o 850, los servos girarán a su máxima velocidad; mientras que si se aproximan a 750, haremos que se muevan más lentos.

Modificamos el programa de la siguiente forma:

PULSOUT 13, 720

PULSOUT 12, 780

Mover el robot hacia atrás, rotarlo y pivotarlo

Todo lo que tenemos que hacer para conseguir otros movimientos del robot es utilizar diferentes combinaciones del parámetro Duración del comando PULSOUT. Por ejemplo, estas dos instrucciones hacen que el robot vaya hacia atrás:

PULSOUT 13, 850

PULSOUT 12, 650

Estas dos para que el robot gire a la izquierda:

PULSOUT 13, 650

PULSOUT 12, 650

Y éstas para que lo haga a la derecha:

PULSOUT 13, 850

PULSOUT 12, 850

Podemos combinar estos comandos para el robot vaya en diferentes direcciones como muestra el ejemplo del siguiente programa:

  1. ‘ Programa de movimiento.  Delanteizquierdaderechaatras.bs2
  2. ‘ Hacer que el robot realice los cuatro movimientos básicos
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. Counter VAR Word
  6. FREQOUT 4, 2000, 3000                ‘señal de inicio/reset
  7. FOR counter = 1 TO 122                ‘marcha hacia delante durante 3s
  8.                 PULSOUT 13, 650
  9.                 PULSOUT 12, 850
  10.                 PAUSE 20
  11. NEXT
  12. PAUSE 200                                     ‘espera
  13. FOR counter = 1 TO 24                 ‘rotación izquierda ¼ de vuelta
  14.                 PULSOUT 13, 650
  15.                 PULSOUT 12, 650
  16.                 PAUSE 20
  17. NEXT
  18. PAUSE 200                                    ‘espera
  19. FOR counter = 1 TO 24                ‘rotación derecha ¼ de vuelta
  20.                 PULSOUT 13, 850
  21.                 PULSOUT 12, 850
  22.                 PAUSE 20
  23. NEXT
  24. PAUSE 200                                   ‘espera
  25. FOR counter = 1 TO 122             ‘retroceso
  26.                 PULSOUT 13, 850
  27.                 PULSOUT 12, 650
  28.                 PAUSE 20
  29. NEXT
  30. END

También podemos hacer que el robot pivote sobre una rueda. Para ello basta con que sólo gire una rueda mientras la otra permanece parada. Por ejemplo, si se quiere que la rueda izquierda permanezca parada y la derecha gire hacia delante para que el robot pivote, se deberán utilizar las siguientes líneas de código:

PULSOUT 13, 750

PULSOUT 12, 650

Si por el contrario se quiere que pivote hacia delante y a la derecha, simplemente se detiene la rueda derecha y hacemos que la rueda izquierda gire hacia delante:

PULSOUT 13, 850

PULSOUT 12, 750

Hacia atrás y la derecha:

PULSOUT 13, 650

PULSOUT 12, 750

Hacia atrás y a la izquierda:

PULSOUT 13, 750

PULSOUT 12, 850

Retocando las maniobras básicas

Más abajo veremos un vídeo con todas estas maniobras realizadas en la práctica y comprobamos que, a pesar de que el robot está programado para avanzar en línea recta, es frecuente que se vaya desviando ligeramente hacia uno de los lados. Vamos a corregir este desajuste mediante el software, para lo cual deberemos modificar el programa Avancetressegundos.bs2 para que en vez de 3 segundos se mueva durante 10, tiempo necesario para comprobar si se desvía o no. Esta modificación se hace cambiando el valor de EndValue en el comando FOR Counter de 122 a 407:

  1. ‘ Programa de movimiento.  Avancediezsegundos.bs2
  2. ‘ El robot avanza hacia delante durante diez segundos
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. Counter VAR Word
  6. FREQOUT 4, 2000, 3000                  ‘señal de inicio/reset
  7. FOR counter = 1 TO 407                  ‘giro hacia delante durante 10 s
  8.                 PULSOUT 13, 650             ‘servo izquierdo máxima velocidad
  9.                 PULSOUT 12, 850             ‘servo derecho máxima velocidad
  10.                 PAUSE 20
  11. NEXT
  12. END

Pongamos por caso que el robot se desvía hacia la izquierda. Esto puede pasar por dos motivos: o bien la rueda izquierda gira más lenta, o es la rueda derecha la que lo hace más rápido. Como el robot está programado para que cada servo gire a la máxima velocidad, lo más lógico será pensar que la rueda derecha debería girar un poco más despacio.

Ya hemos visto que la velocidad de los servos está determinada por el argumento Duración del comando PULSOUT. Cuanto más se acerque este valor a 750, más lento girará el servo. Esto significa que hay que cambiar el valor 850 del comando PULSOUT 12 a un valor más cercano a 750. Si el robot no se desvía demasiado, con un valor de 837 será suficiente. Si por el contrario el grado de desvío es grande, habrá que poner como mínimo un valor de 810. Como vemos, será necesario hacer varias pruebas modificando este argumento hasta lograr que el robot siga una línea completamente recta.

En nuestro caso, ha sido necesario un valor de 800 para conseguir un movimiento rectilíneo.

Al igual que hemos hecho para el avance, tendremos que hacer los mismos ajustes para el movimiento hacia atrás.

También es posible regular los giros del robot mediante el software. El tiempo que dura el movimiento de las ruedas del robot es lo que determina el ángulo de giro. Como ya hemos visto que el comando que controla el tiempo de giro en el programa es el bucle FOR … NEXT, lo que tenemos que hacer es modificar el argumento EndValue para que gire más o menos según queramos.

En el programa Delanteizquierdaderechaatras.bs2 introdujimos una serie de órdenes para que el robot realizase distintos giros, por lo que si hay cualquier tipo de desviación deberemos modificar el contador del bucle FOR counter = 1 TO 24 y disminuir el tiempo de giro (probamos primero con 23, 22 etc.) Si sigue sin girar los 90o exactos, modificaremos el comando PULSOUT a un valor más cercano a 750, como hicimos para que fuese recto. Repetiremos la acción hasta que gire los 90o exactos.

Cálculo de distancias

Es frecuente que en las competiciones que se organizan los robots tengan que seguir un recorrido desde un punto inicial hasta un destino situado a cierta distancia, para luego regresar al punto de partida. Vamos a aprender a calcular distancias, para lo cual aplicamos la fórmula general de la velocidad:

Tiempo = distancia / velocidad

Distancia = velocidad x tiempo

Lo que traducido al funcionamiento de nuestro robot sería:

Tiempo de movimiento del servo = distancia recorrida / velocidad del robot

Para poder aplicar esta sencilla fórmula debemos calcular en primer lugar la velocidad del robot. La forma más fácil de hacerlo es poner una regla a su lado y ver qué distancia recorre en un tiempo dado (un segundo por ejemplo). Conociendo los centímetros que ha recorrido y el tiempo en segundos empleado en ello, podremos determinar la velocidad del robot en centímetros por segundo. Emplearemos para ello el siguiente programa:

  1. ‘ Programa de movimiento.  Avanceunsegundo.bs2
  2. ‘ El robot avanza hacia delante durante un segundo
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. Counter VAR Word
  6. FREQOUT 4, 2000, 3000                ‘señal de inicio/reset
  7. FOR counter = 1 TO 41                  ‘marcha hacia delante durante 1s
  8.                 PULSOUT 13, 650
  9.                 PULSOUT 12, 800
  10.                 PAUSE 20
  11. NEXT
  12. END

Este programa controla el movimiento del robot durante un segundo por lo que si ha recorrido 23 cm durante su ejecución, la velocidad será de 23 cm/s (es conveniente recordar que en un paso anterior aprendimos que los servos tardan 24,6 milisegundos (0,0246 segundos) en completar un ciclo de ejecución del bucle FOR … NEXT, por lo que el microcontrolador envía 40,65 pulsos cada segundo a los servos (1/0,0246 pulsos por segundo).

Una vez aclarado este concepto, podemos hacer que el robot se desplace en cualquier dirección una distancia concreta. Por ejemplo, sabiendo la velocidad que alcanza, podemos calcular el tiempo que necesitaría el robot para recorrer una distancia de 51 centímetros:

Tiempo = 51 cm / 23 cm/s = 2,22 s

Cuando tenemos este dato, basta calcular los pulsos que han de enviarse a los servos para que el robot recorra esa distancia, teniendo en cuenta que para que el robot se mueva durante un segundo son necesarios 40,65 pulsos:

Pulsos = 2,22 s x 40,65 pulsos/s = 90,24 pulsos = 90 pulsos

90 es el valor que tendremos que usar en el argumento EndValue del bucle FOR … NEXT

En cualquier caso tenemos que tener presente que estas mediciones no son completamente exactas. No hemos tenido en cuenta, por ejemplo, que el robot necesita un determinado número de pulsos para alcanzar la máxima velocidad, ni tampoco la distancia que recorre hasta que se detiene por completo o el hecho de que los servos girarán más despacio cuando las baterías pierdan potencia.

Maniobras de aceleración y desaceleración

Lo que pretendemos es que el robot acelere y desacelere de forma gradual. De esta forma conseguiremos que los servos y las baterías duren más y que el arranque y la parada no sean tan bruscos.

La clave para acelerar es ajustar el parámetro Duración del comando PULSOUT. Gracias al bucle FOR … NEXT podemos hacer que el robot acelere:

PulseCount VAR Word

FOR pulseCount = 1 TO 100

PULSOUT 13, 750 – pulseCount

PULSOUT 12, 750 + pulseCount

PAUSE 20

NEXT

Cada vez que se ejecuta el bucle FOR … NEXT la variable pulseCount se incrementa en 1. A medida que el valor de pulseCount es mayor, la velocidad de los servos también. La primera vez que se ejecuta el bucle, la variable pulseCount vale 1, que es lo mismo que usar los comandos PULSOUT 13, 749 y PULSOUT 12, 751. La segunda vez, la variable valdrá 2, y así, a la centésima vez que hemos ejecutaado el bucle, la variable pulseCount valdrá 100 que es lo mismo que usar los comandos PULSOUT 13, 650 y PULSOUT 12, 850 (máxima velocidad hacia delante)

Si por el contrario hacemos que el bucle FOR … NEXT reduzca la variable pulseCount, el robot desacelerará hasta pararse. Hagamos las pruebas:

  1. ‘ Programa de movimiento.  Arranqueyparo.bs2
  2. ‘ El robot acelera y luego decelera hasta pararse
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. pulseCount VAR Word                     ‘contador del bucle FOR … NEXT
  6. FREQOUT 4, 2000, 3000                ‘señal de inicio/reset
  7.                                                           ‘aceleración gradual
  8. FOR pulseCount = 1 TO 100           ‘bucle aceleración de 100 pulsos
  9.                 PULSOUT 13, 750 – pulseCount
  10.                 PULSOUT 12, 747 + pulseCount
  11.                 PAUSE 20
  12. NEXT
  13.                                                           ‘avance constante de 75 pulsos
  14. FOR pulseCount = 1 TO 75
  15.                 PULSOUT 13, 650
  16.                 PULSOUT 12, 800
  17.                 PAUSE 20
  18. NEXT
  19.                                                          ‘desaceleración hasta detenerse
  20. FOR pulseCount = 100 TO 1          ‘bucle desaceleración de 100 pulsos
  21.                 PULSOUT 13, 750 – pulseCount
  22.                 PULSOUT 12, 747 + pulseCount
  23.                 PAUSE 20
  24. NEXT
  25. END

Facilitar los movimientos con subrutinas

En los siguientes pasos de la construcción del robot vamos a programarlo para que sea capaz de realizar maniobras con el fin de evitar obstáculos. Una de las formas más eficientes de hacerlo es realizando maniobras pre-programadas mediante el empleo de subrutinas. Ahora vamos a aprender a crear y utilizar esta herramienta.

Una subrutina es una secuencia de instrucciones que se repite en diversas ocasiones a lo largo del programa principal. Para no tener que reescribirla e insertarla cada vez que se necesite, lo que hacemos es ponerla como un programa independiente al que se “llama” cada vez que sea preciso.

Hay dos partes dentro de una subrutina en PBASIC. La primera es la “llamada a la subrutina”, es decir, la instrucción que hace que una vez que el programa llegue allí, se ejecute la parte de código que se contiene dentro de la subrutina. La otra parte es la propia subrutina en sí, la parte reutilizable del código. La subrutina comienza cuando se referencia con GOSUB su nombre (también llamado etiqueta) y finaliza con el comando RETURN, que devuelve el control a la siguiente instrucción después de GOSUB. El código que hay entre la etiqueta del nombre de la subrutina y RETURN es lo que se ejecutará en cada llamada a esa subrutina:

DO

DEBUG “Antes de la subrutina”, CR

PAUSE 1000

GOSUB Mi_subrutina

DEBUG “Después de la subrutina”, CR

PAUSE 1000

LOOP

Mi_subrutina:

DEBUG “Subrutina en ejecución”, CR

PAUSE 1000

RETURN

Este trozo de código nos muestra una llamada a una subrutina y la propia subrutina. Como hemos dicho, la llamada a la subrutina se realiza con el comando GOSUB y el nombre de la subrutina, en nuestro caso “Mi_subrutina” (ojo con los espacios en blanco). Una vez se inicia la subrutina se ejecuta línea a línea hasta encontrar el comando RETURN que obliga a salir de la subrutina y continuar ejecutando el programa en el punto en que se dejó.

Vamos a usar esta herramienta para manejar los movimientos del robot:

  1. ‘ Programa de movimiento con subrutinas.  Movimientoconsubrutina.bs2
  2. ‘ El robot realiza los movimientos básicos mediante subrutinas
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. Counter VAR Word
  6. FREQOUT 4, 2000, 3000                ‘señal de inicio/reset
  7. GOSUB Delante
  8. GOSUB Izquierda
  9. GOSUB Derecha
  10. GOSUB Atras
  11. END
  12.                                                          ‘movimiento hacia delante
  13. Delante:
  14.                 FOR counter = 1 TO 64
  15.                                 PULSOUT 13, 650
  16.                                 PULSOUT 12, 800
  17.                                 PAUSE 20
  18.                 NEXT
  19.                 PAUSE 200
  20.                 RETURN
  21.                                                          ‘giro a la izquierda
  22. Izquierda:
  23.                 FOR counter = 1 TO 24
  24.                                PULSOUT 13, 650
  25.                                PULSOUT 12, 650
  26.                                PAUSE 20
  27.                 NEXT
  28.                 PAUSE 200
  29.                 RETURN
  30.                                                          ‘giro a la derecha
  31. Derecha:
  32.                 FOR counter = 1 TO 24
  33.                                PULSOUT 13, 850
  34.                                PULSOUT 12, 850
  35.                                PAUSE 20
  36.                 NEXT
  37.                 PAUSE 200
  38.                 RETURN
  39.                                                          ‘movimiento hacia atrás
  40. Atras:
  41.                 FOR counter = 1 TO 64
  42.                                PULSOUT 13, 840
  43.                                PULSOUT 12, 650
  44.                                PAUSE 20
  45.                 NEXT
  46.                 RETURN

Publicado por José Luis Moreno en ROBÓTICA, 1 comentario
Siete días … 9 a 15 de septiembre (reprogramación celular y ADN antiguo)

Siete días … 9 a 15 de septiembre (reprogramación celular y ADN antiguo)

     Última actualizacón: 1 julio 2019 a las 21:29

Esta semana tenemos dos grandes noticias que tienen como protagonistas científicos españoles. En primer lugar, se ha hecho público el resultado de una investigación llevada a cabo en el CNIO (Centro Nacional de Investigaciones Oncológicas) que supone un avance enorme en el campo de la reprogramación celular y que abre la vía para, en un futuro, curar algunas de las enfermedades más crueles —tanto para los pacientes y sus familiares— como es el Alzheimer y el Parkinson; y otras cada vez más extendidas como la diabetes. De otro lado, el equipo de paleontólogos del yacimiento de Atapuerca (junto con otros colaboradores del Instituto Max Plank de Antropología Evolutiva) han diseñado una técnica que permite obtener secuencias completas de ADN prehistórico a partir de fragmentos.

Este tipo de noticias nos deben llevar a reflexionar sobre qué clase de ciencia queremos para nuestra sociedad y, lo más importante, si estamos dispuestos a luchar porque nuestros investigadores tengan la oportunidad de llevar adelante sus proyectos. No se trata de demagogia, si no defendemos que haya una ciencia de calidad, algún día llegará el futuro y nos daremos cuenta que es demasiado tarde. Para mí la cosa está clara.

BIOLOGÍA CELULAR

Un equipo del Centro Nacional de Investigaciones Oncológicas (CNIO) ha sido el primero en conseguir que células adultas de un organismo vivo retrocedan en su desarrollo evolutivo hasta recuperar características propias de células madre embrionarias. Los investigadores han descubierto además que estas células madre embrionarias obtenidas directamente en el interior del organismo tienen una capacidad de diferenciación más amplia que las obtenidas mediante cultivo in vitro. En concreto, tienen características de células totipotentes, un estado primitivo nunca antes obtenido en un laboratorio.

Las células madre embrionarias son la principal apuesta para la futura medicina regenerativa. Son las únicas capaces de generar cualquier tipo celular de los cientos de tipos celulares que conforman un organismo adulto, por lo que constituyen el primer paso para la curación de enfermedades como el Alzheimer, el Parkinson o la diabetes. No obstante, este tipo de células tiene una brevísima existencia, limitada a los primeros días del desarrollo embrionario, y no existen en ninguna parte del organismo adulto.

Las células  madre obtenidas en los ratones presentaban además características de totipotencia nunca generadas  en un laboratorio, equivalentes a las de los embriones humanos de 72 horas de gestación, compuestos por una masa de tan solo 16 células.

Los autores recalcan que las posibles aplicaciones terapéuticas del trabajo aún están lejos, pero admiten que sin duda pueden significar un cambio en el rumbo de las investigaciones con células madre, en la medicina regenerativa o en la ingeniería tisular.

• Noticia

• Noticia El PaísEl Mundo, Materia, RNE

• Artículo: Reprogramming in vivo produces teratomas and iPS cells with totipotency features

• Vídeo del CNIO:

PALEONTOLOGÍA

Un equipo científico formado por expertos de varias universidades, entre ellos el director científico del Museo de la Evolución Humana y codirector de Atapuerca, Juan Luis Arsuaga, ha diseñado un método probado en restos de osos que permite obtener secuencias completas de ADN prehistórico a partir de fragmentos.

En el caso del ADN mitocondrial, como el que se ha logrado secuenciar, sólo permite conocer las líneas genealógicas, aunque si se logra hacer lo mismo con el ADN nuclear se podrían conocer también detalles de cómo era el individuo al que corresponden los restos.

Arsuaga ha explicado que el método abrirá nuevas líneas en investigaciones prehistóricas de todo el mundo y ha asegurado que, en el caso de Atapuerca, su intención es poder desarrollar un trabajo de este tipo con restos de Homo heidelbergensis.

• Noticia EFE

• Artículo: Complete mitochondrial genome sequence of a Middle Pleistocene cave bear reconstructed from ultrashort DNA fragments

BIOLOGÍA

El naturalista inglés Charles Darwin consideraba que los rápidos cambios que experimentaron las especies durante la explosión cámbrica, hace unos 530 millones de años, contradecían las reglas de la evolución. Sin embargo, un nuevo estudio revela que este ‘Big bang’ evolutivo sí puede explicarse mediante la teoría de la selección natural. El discurso darwiniano defendía la sucesión gradual de modificaciones, lo que descarta un posible ‘Big Bang evolutivo’. Entonces ¿por qué se conservan tan pocos registros fósiles anteriores al Cámbrico y, sin embargo, a partir de entonces surgió tal abundancia de especies? El inglés nunca pudo explicarlo.

Con el fin de explicar esta contradicción aún vigente, algunos estudios han tratado de hallar nuevas pistas mediante el análisis de los pocos restos animales y vegetales conocidos previos al Cámbrico.

Según los análisis de los investigadores, las modificaciones físicas acontecidas durante el Cámbrico fueron unas cuatro veces más rápidas que las actuales, mientras que las modificaciones genéticas las superaron 5,5 veces. Además, esta aceleración en la evolución genética y anatómica se produjo casi al mismo ritmo durante todo el periodo. “Un incremento de cinco veces en la velocidad de evolución comprimiría los cambios equivalentes a 150 millones de años en tan solo los 30 millones que duró la explosión cámbrica”.

Según los investigadores, la gran rapidez de evolución podría ser originada por el desarrollo de nuevas adaptaciones competitivas aparecidas durante el Cámbrico, como la depredación, la visión y la natación activa. “Una de las hipótesis apunta a que estos avances ocasionaron el desarrollo masivo de nuevas ramas evolutivas”.

• Noticia Tendencias 21

• Artículo: Rates of phenotypic and genomic evolution during the Cambrian explosión.

___

A pesar del pomposo nombre, Issus coleoptratus es uno de esos insectos que uno puede encontrar en cualquier jardín de Inglaterra. Pertenece a la familia de los ísidos, es pequeño y extremadamente rápido.  Igual que otros insectos saltadores, como la pulga o los saltamontes, el tiempo de reacción de estos animales es asombroso. En apenas 2 milisegundos, el insecto se proyecta hacia el cielo con una aceleración de unos 400 g’s

Cuando el zoólogo de la Universidad de Cambridge Malcolm Burrows y su equipo comenzaron a estudiar el mecanismo de salto no esperaban encontrar una rareza natural: este insecto es la primera criatura en la que se descubre un engranaje dentado similar al de nuestras máquinas, solo que en este caso es producto de la evolución.

Los científicos creen que la presión evolutiva – la carrera por saltar más rápido para huir de sus depredadores – es la causa de este curioso diseño. Cuando se trata de tiempos de reacción tan rápidos, ambas patas deben estar perfectamente coordinadas o de lo contrario, explica Burrows, el animal se desequilibrará y empezará a girar fuera de control. En los animales más grandes, como los canguros o las ranas, el sistema de salto está coordinado por el sistema nervioso, pero con los tiempos de reacción de estos insectos, la señal nerviosa tardaría más en llegar al cerebro y regresar a las patas que lo que tarda el mecanismo en ponerse en marcha.

• Artículo: Interacting gears synchronize propulsive leg movements in a jumping insect

• Vídeo:

MEDICINA

Un equipo de investigadores de la Universidad de Colorado en Boulder (EEUU) ha conseguido determinar el patrón neuronal que se corresponde con el dolor físico, en concreto, con el dolor físico provocado por el calor. El hallazgo podría resultar clave para el desarrollo de futuros diagnósticos del dolor padecido por personas con problemas de comunicación, como aquéllas que han sufrido un infarto cerebral.

En el desarrollo de la investigación se usó la técnica de exploración de resonancia magnética funcional (fMRI)‎, que permite mostrar en imágenes las regiones cerebrales que ejecutan una tarea determinada. Los 114 participantes sometidos a estos escáneres fueron personas sanas a las que se les suministraron pulsos de calor en el brazo, algunos de ellos dolorosos y otros no.

Durante los pulsos dolorosos, se activó en ellos un grupo diverso de regiones cerebrales, de manera consistente.  Aunque estas regiones ya habían sido previamente asociadas con el dolor, la novedad del presente estudio radica en que en él se consiguió detectar una activación constante del cerebro cuando los voluntarios informaron de la sensación de dolor, con mayor exactitud que en investigaciones previas.

• Noticia en Tendencias21

• Artículo: An fMRI-based neurologic signature of physical pain.

NEUROCIENCIA

Desde hace unos años, algunos neurocientíficos andan embarcados en un proyecto fascinante y megalómano: trazar un mapa con todas las conexiones neuronales de nuestro cerebro. El reto es gigantesco, pues tenemos unas 86.000 millones de neuronas y un número de conexiones que supera lo imaginable. Aún así, varios equipos de todo el mundo trabajan en dibujar estas autopistas y han diseñado una herramienta nueva: el conectograma.

El conectograma es una representación esquemática de las conexiones cerebrales, en forma circular, en la que se representan las áreas de la corteza cerebral y se distinguen los dos hemisferios, el izquierdo y el derecho. Si miramos en la parte exterior del anillo encontramos el lóbulo frontal, el temporal, el parietal y otras estructuras importantes como el cerebelo.

El equipo de John Darrell Van Horn, elaboró un conectograma con las conexiones del histórico paciente Phineas Gage, un trabajador de los ferrocarriles que se clavó una barra de metal en el lóbulo frontal a mediados del siglo XIX, lo que provocó un cambio de su personalidad.

• Artículo: Mapping connectivity damage in the case of Phineas Gage (descarga directa en formato PDF)

___

Un grupo de investigadores del Instituto de Neurociencias, centro mixto de la Universidad Miguel Hernández (UMH) de Elche y el Consejo Superior de Investigaciones Científicas (CSIC), han descrito un nuevo marcador diagnóstico para el Alzheimer: la presenilina-1.

La presenilina-1 es una proteína relacionada con el desarrollo y progreso del Alzheimer, pero hasta la fecha no se había podido demostrar que estuviera presente en el líquido cefalorraquídeo. Esta investigación demuestra que la presenilina-1 se encuentra en forma de complejos en el líquido cefalorraquídeo humano y de ratones, y que las cantidades y propiedades de dichos complejos varían en enfermos de Alzheimer con la progresión de la enfermedad. Actualmente, hay una búsqueda continua de nuevos biomarcadores en el líquido cefalorraquídeo para el diagnóstico clínico de enfermedades neurológicas y para diagnosticar la enfermedad de Alzheimer en sus primeras etapas.

• Noticia en Instituto de Neurociencias

• Artículo: CSF Presenilin-1 complexes are increased in Alzheimer’s disease  (descarga directa en formato PDF).

ASTRONOMÍA

Nunca algo hecho por el hombre había llegado tan lejos. El Voyager 1 ha salido del sistema solar. Científicos de la NASA, tras analizar los datos recibidos de la sonda espacial, han podido constatar que abandonó la conocida como burbuja solar en torno al 25 de agosto de 2012, aunque hasta la fecha no habían podido corroborarlo.

La sonda automática Voyager 1 partió de la Tierra en 1977 y pasó cerca de Júpiter y Saturno. Luego tomó el rumbo de salida del Sistema Solar y se ha alejado ya de la Tierra hasta una distancia de seis veces la órbita de Neptuno, el planeta más exterior, unos 19.000 millones de kilómetros del Sol. Ahora está “en el abismo del espacio interestelar”, como dice Richard A. Kerr en la revista Science. Y al parecer lleva ya un año fuera de la esfera de influencia del Sol, porque cruzó la frontera en agosto del año pasado. La noticia ahora es que, después de muchos debates sobre si efectivamente la Voyager 1 salió o no de la denominada heliosfera hace un año, los nuevos datos recibidos de la sonda y los análisis de registros anteriores de la misión muestran que efectivamente, tal y como se anunció, fue entonces cuando esta nave de la NASA abandonó la burbuja de partículas cargadas, calientes, que rodea al Sistema Solar y entró en el entorno frío y oscuro del espacio interestelar.

• Noticia El País (con vídeo)

• Artículo: In situ observations of interstellar plasma with Voyager 1.

• Vídeo de la NASA:

Hay sin embargo quienes discuten esta afirmación de que la sonda haya abandonado el Sistema Solar, sino que ha dejado atrás la heliopausa (ver explicación aquí en inglés)

INGENIERÍA

El uso de robots en entornos hostiles como túneles o minas contribuye a mejorar la seguridad laboral. Para que estos dispositivos puedan comunicarse entre sí, un equipo de investigadores, del que forman parte expertos de la UNED, ha diseñado un sistema de coordinación que emula las prácticas de conservación de los animales, en las que predomina el interés del grupo sobre el individual.

“Los robots son programados para elegir la opción que más les interesa. Actúan con el mismo sentido de egoísmo que puedan tener los animales pero, como hacen ellos, a la hora de consensuar las acciones que tomará el equipo, la elección la realizan en función del interés general”, explica Manuel Martín-Ortiz, investigador de Inteligencia Artificial en la UNED, actualmente en la Universidad Tecnológica de Ehindoven (Países Bajos) y autor principal de la investigación.

La clave del método radica en que la interacción del grupo se produce incluso aunque algunos de los dispositivos no logren comunicarse con el resto o se estropeen. “Cada vez que unos cuantos robots se encuentran, comparten la información que tienen, evalúan las posibles rutas inexploradas y realizan una negociación para decidir quién se queda con cada nuevo camino”, afirma Félix de La Paz, investigador de Inteligencia Artificial de la UNED y otro de los autores del estudio.

• Noticia Agencia SINC

• Artículo: Auction based method for graphic-like maps inspection by multi-robot system in simulated and real environments

Publicado por José Luis Moreno en SIETE DÍAS, 1 comentario
Nanoingeniería: abejas sintéticas

Nanoingeniería: abejas sintéticas

     Última actualizacón: 22 octubre 2018 a las 11:17

La nanotecnología es un campo de investigación con una enorme proyección de futuro que avanza en numerosos frentes.  No solo la medicina se está beneficiando de ello ―con prometedores resultados que describiremos en otra ocasión― sino que periódicamente asistimos a nuevas aplicaciones que aspiran a convertirse en esenciales para nuestro desarrollo.

En esta ocasión voy a mencionar los trabajos del Laboratorio de Microrobótica perteneciente a la Escuela de Ingeniería y Ciencias Aplicadas de la Universidad de Harvard, fundado por el profesor Robert Wood.  Permítanme que me detenga un momento para hablar de este eminente científico.  Señalar en primer lugar que es profesor de ingeniería y ciencias aplicadas en la Universidad de Harvard y del Instituto Wyss de Ingeniería Inspirada en la Biología.  Obtuvo su doctorado en el año 2004 trabajando con el profesor Ron Fearing de la Universidad de California en Berkeley.  En el año 2007 ganó el DARPA Young Faculty Award, en 2008 el Premio de Carrera de la Fundación Nacional de la Ciencia y el Premio al Investigador Joven de la Oficina de Investigación Naval, en 2009 el Premio al Investigador Joven de la Fuerza Aérea y en el año 2010 un Premio Presidencial por su carrera en ciencia e ingeniería.  Aún no ha cumplido 35 años.

Veamos en qué están trabajando el Dr. Wood y su equipo.  Entre otras metas, se han propuesto crear una colonia de abejas robóticas que podrán llevar a cabo tareas coordinadas en áreas como la seguridad y defensa ―rescate de personas atrapadas tras catástrofes naturales e inspección de zonas afectadas por vertidos o contaminación― o la alimentación e ingeniería agrícola ―polinización de cultivos―.  Para lograrlo deberán contar no sólo con un robot de peso y tamaño similar a las abejas naturales y movimiento autónomo, sino que sea capaz de tomar decisiones individuales y, al tiempo, transmitirlas al resto del “enjambre” para que puedan actuar coordinadamente.  Lo verdaderamente importante no es que cada uno de estos nanorobots sea capaz de realizar una tarea, sino que la colonia alcance el objetivo a pesar de que muchos de sus miembros caigan durante el proceso.

El proyecto, denominado Robobee, trabaja en el diseño de estos insectos artificiales y ya han conseguido avances sorprendentes en la primera fase: el sistema de vuelo.  En este vídeo podéis ver cuál es el diseño:

Al perseguir una miniaturización tan grande, las fuerzas implicadas cambian radicalmente.  Ya que no es posible utilizar piezas mecánicas normales, como rodamientos, engranajes y motores electromagnéticos, los investigadores han creado “músculos” artificiales inspirados en la anatomía de una abeja real.  Dos tipos de estos músculos se encargan de propulsar y controlar el vuelo: en el tórax, un actuador ―un dispositivo que transforma la energía eléctrica en movimiento― impulsa el mecanismo que bate las alas; a su vez, otros actuadores menores generan los pares motores necesarios para maniobrar y controlar el aleteo.

Según este diseño, el componente de este nanorobot que quizás sea más importante es el músculo artificial.  Se compone de materiales piezoeléctricos que se contraen cuando se aplica un voltaje entre sus caras y está formado por tres capas: dos láminas rígidas entre la que se sitúa una delgada película de polímero que permite una flexión con facilidad.

En este vídeo de más duración se muestran las pruebas de vuelo libre.  Como se puede apreciar, los comienzos no han sido fáciles aunque la validez del diseño es evidente. Las pruebas de control de altitud han sido exitosas:

Otro elemento esencial es el sistema de alimentación (la batería).  Para cubrir sus necesidades energéticas durante el vuelo, gran parte de la masa del insecto reside en el actuador principal y en el sistema de alimentación.  Las dificultades en este aspecto se convierten en un círculo vicioso: una unidad mayor almacena más energía, pero su mayor peso exige un sistema propulsor más potente y este, a su vez, necesita una fuente de alimentación mayor.

Aunque aún no han conseguido una abeja robótica con plena autonomía ―los experimentos se hacen con el robot unido a una fuente de alimentación externa― los resultados son sorprendentes como demuestran las pruebas de vuelo controlado. Las imágenes hablan por sí solas y son realmente espectaculares:

Una vez más el hombre imita la naturaleza para sus propios objetivos.  Al igual que la botánica supone un campo de estudio esencial por ejemplo para la farmacología; vemos que la biología siempre ofrece los mejores diseños.  No en balde, la evolución ha tenido millones de años a su favor para hacer numerosas pruebas de ensayo y error.

Referencias

Ma, K., Chirarattananon, P., Fuller, S., & Wood, R. (2013). Controlled Flight of a Biologically Inspired, Insect-Scale Robot Science, 340 (6132), 603-607 DOI: 10.1126/science.1231806

Whitney, J., & Wood, R. (2010). Aeromechanics of passive rotation in flapping flight Journal of Fluid Mechanics, 660, 197-220 DOI: 10.1017/S002211201000265X

Wood, R., Finio, B., Karpelson, M., Ma, K., Perez-Arancibia, N., Sreetharan, P., Tanaka, H., & Whitney, J. (2012). Progress on ‘pico’ air vehicles The International Journal of Robotics Research, 31 (11), 1292-1302 DOI: 10.1177/0278364912455073

Shang JK, Combes SA, Finio BM, & Wood RJ (2009). Artificial insect wings of diverse morphology for flapping-wing micro air vehicles. Bioinspiration & biomimetics, 4 (3) PMID: 19713572

Publicado por José Luis Moreno en CIENCIA, 2 comentarios