Hoy tenemos el placer de iniciar la parte robótica de Cuentos Cuánticos que sin duda es un tema de interés donde se aplican técnicas provinientes de muchos campos y del que no se puede dudar su utilidad inmediata y con grandes expectativas futuras. Estas entradas están realizadas por @gazkune (síguelo en twitter). Así que dejemos a @gazkune que nos enseñe de qué va eso de la robótica
Con esta entrada inauguramos la sección dedicada a la robotica. Hoy empezaremos poco a poco, explicando todos los conceptos básicos para que en las sucesivas entradas nos suenen algunas de las palabrejas que irán apareciendo.
Si recurrimos a la wikipedia en busca de una definición para robótica, nos encontraremos con que esta es la ciencia y la tecnología de los robots. La cosa se complica ya que definir lo que es un robot, no es nada fácil. Se pueden encontrar multitud de definiciones, sin embargo casi ninguna de ellas logra ser perfecta. Por ello, para nosotros, un robot será aquella entidad electromecánica que tenga capacidad de percibir su entorno y actuar sobre él con un propósito definido.
Por buena que parezca, esta definición deja a un lado a casi todos los robots industriales que se emplean en la actualidad en la producción en masa de productos como los coches.
Estos robots actúan sobre su entorno con un propósito definido, pero no perciben el entorno para ello. Están preprogramados de tal forma que siempre ejecutan los mismos movimientos, independientemente de lo que suceda en su entorno. Es decir, si en vez de un coche ponemos una bicicleta, el robot repetirá su ciclo de movimientos, generando un auténtico desastre.
Sin embargo, para el tipo de robótica que nos interesa, esta definición nos viene de perlas. En esta colección de entradas queremos adentrarnos en las tecnologías y algoritmos que utilizan los robots que ya actualmente, pero sobre todo en el futuro, trabajarán en entornos humanos compartiendo su área de trabajo con los propios seres humanos. Para ello, los robots necesitarán percibir su entorno, interpretarlo, razonar y planificar sobre lo que sucede y decidir cuales son las acciones adecuadas para cumplir con sus tareas. Necesitarán también interactuar con los humanos de diversas formas: reconociendo sus caras, entendiendo lo que dicen, interpretando sus movimientos y otro sin fin de formas que ahora ni nos atrevemos a imaginar.
Esa es la robótica que nos interesa y la robótica a la que queremos acercarnos. Esa es la robótica que queremos entender.
Construyendo un robot
Lo primero que tenemos que hacer para poder seguir adelante es construir un robot. Evidentemente no estamos pensando en organizar una especie de bricomanía para robots. Lo que vamos a ver es en qué se caracterizan y qué tipo de hardware suelen tener los robots que nos interesan.
Para ello podemos coger directamente la definición de más arriba y traducirla en dispositivos. Si el robot necesita percibir su entorno lo que necesita es estar equipado de sensores. Así mismo, para actuar sobre su entorno necesita actuadores. Y finalmente, para interpretar las tareas que tiene que resolver, planificar y sobre las que tomar decisiones necesita una unidad de cómputo. Por lo dicho entonces, nuestro robot tendrá sensores, actuadores y unidades de cómputo. Así de simple.
Una analogía con los seres humanos puede ayudar a entender mejor lo que proponemos:
1.- El ser humano tiene sus propios sensores para recibir información de su entorno: los ojos, los oídos, la piel… no son más que sensores biológicos que producen algunas señales ante distintos estímulos.
2.- Cuando hablamos de actuadores, en el caso de los humanos estamos hablando de los músculos. Mediante ellos los humanos somos capaces de movernos y actuar sobre nuestro entorno, desplazándonos por el mismo, cogiendo objetos, abriendo puertas o ejecutando cualquier otra acción.
3.- La unidad de cómputo que se encuentra entre la percepción y la acción no es otra que nuestro cerebro.
No hay que olvidarse que los robots, para que puedan operar adecuadamente, también necesitarán unidades de almacenamiento de energía (baterías vaya) y otros dispositivos que en estos momentos no nos preocupan, ya que nuestro acercamiento a la robótica no será el del diseño mecatrónico. Vayamos pues profundizando un poco más en los elementos que hemos enumerado: sensores, actuadores y unidades de cómputo.
Sensores
Un sensor es un dispositivo que es capaz de detectar una magnitud física y convertirla en una señal eléctrica. El ejemplo clásico de sensor puede ser un termopar, que no es más que un sensor de temperatura que se basa en el llamado efecto Seebeck, por el cual una diferencia de temperatura produce un voltaje. Hoy en día se pueden encontrar sensores para casi todas las magnitudes físicas existentes. Para poner un orden en todos estos dispositivos, los sensores se suelen clasificar en robótica en dos grandes bloques:
- Sensores exteroceptivos: son aquellos sensores que miden el estado del entorno e interacciones con el robot.
- Sensores propioceptivos: son aquellos sensores que miden el estado interno del propio robot.
Dentro de los sensores exteroceptivos, nombraremos dos familias de sensores que nos interesan: los sensores de distancia y los sensores ópticos.
Los primeros, como su propio nombre indica, miden distancias entre el sensor y los puntos del entorno que el sensor pueda detectar. Los más comunes suelen ser los escáneres láser, los ultrasonidos y los infrarrojos. Dada su relevancia, nos centraremos en los escáneres láser.
Los escáneres láser son sensores de distancia que miden el tiempo de vuelo de un haz de láser. El principio sobre el que operan es muy sencillo. Disparamos un haz de láser y ponemos el cronómetro a cero. Si ese haz de láser se encuentra con algun objeto en su trayectoria, rebotará y volverá al sensor. Cuando llegue la señal miraremos al cronómetro y veremos cuanto tiempo ha pasado desde que salió. Como conocemos la velocidad de la luz (estos láseres suelen ser de luz infrarroja), sabremos la distancia que ha recorrido el haz. Por lo tanto sabremos a qué distancia del sensor se ha detectado algo.
Típicamente un escáner láser suele disparar muchos haces de láser en el mismo plano. Digamos que hace un barrido de izquierda a derecha, tal y como se muestra en la imagen.
Así, un escáner láser (de aquí en adelante láser a secas) suele tener un campo de visión amplio, oscilando entre los 18oº y 360º según el modelo. Los parámetros que nos interesan de un láser son los siguientes:
- Campo de visión: el rango de ángulos en los que un objeto puede detectarse
- Resolución: la distancia mínima que distingue el sensor (suele estar ligeramente por debajo del centímetro)
- Resolución angular: la distancia angular entre dos haces de láser (típicamente 0.5 grados)
- Distancia máxima: la distancia máxima a la que puede detectar un objeto (varía mucho según el modelo, desde los 4 a los 60 metros)
Con el objetivo de que podáis visualizar lo que «ve» un láser, aquí tenéis una captura hecha en un entorno simulado.
Lo que se ve a la izquierda es la simulación de un robot equipado con un láser en un entorno de interiores. A la derecha, tenéis la visualización de los datos que da el láser. Como se puede apreciar, solo capta una sección del mundo tridimensional que le rodea. En este caso, por su colocación, detecta un plano paralelo al suelo. El láser que se simula tiene un campo de visión de 270º, una resolución de un centímetro, una resolución angular de 0.3942º (casi tres haces de láser por grado) y una distancia máxima de 5.6 metros.
El láser es con toda seguridad uno de los sensores más utilizados en robótica. En las siguientes entradas será básico, por lo que iremos destapando más y más sus caraterísticas con el tiempo.
Ahora hablemos brevemente de los sensores ópticos. En lenguaje llano y para que nos entendamos, hablamos de cámaras. Aunque hay muchas clases de cámaras, lo que nos interesa ahora es saber que la visión artificial es un campo clave en la robótica que está explotando sobre todo en estos últimos años. Como podréis imaginar, las cámaras nos dan la información más parecida a la que nos dan los ojos. Sin embargo, la interpretación de la información que nos da una cámara no es nada trivial, y de ahí la dificultad de utilizarlas. Este será sin duda un campo que exploraremos, pero más adelante.
Volvamos pues al segundo grupo de sensores que enumerábamos más arriba: los sensores propioceptivos. Estos se encargan de medir la información relativa al propio robot, es decir, a su estado interno. Los sensores propioceptivos más usados en robótica son los encoders y los sensores inerciales o IMUs (de las siglas en inglés de Inertial Measurement unit).
Los encoders suelen utilizarse para medir la posición de alguna parte del robot. Así, por ejemplo, si nuestro robot tiene ruedas, podemos colocar un encoder en cada eje de giro de estas ruedas. El encoder nos dará la información de cuantos ticks mide a medida que el eje rota. Es decir, mide la posición angular relativa del eje como una variable discreta. Explicaremos esto mejor cuando hablemos de odometría, pero por ahora nos basta saber que un encoder nos permite medir desplazamientos angulares de ejes que luego se pueden integrar para saber la posición de un robot o una parte del mismo. En el ejemplo que tenemos, si somos capaces de medir cuánto se desplazan las ruedas con los encoders y conocemos el radio de dichas ruedas, es fácil obtener el desplazamiento que tiene el robot respecto al punto de inicio del movimiento. Si en vez de ruedas hablamos de brazos, los encoders nos permitirán calcular las posiciones de los brazos relativos al cuerpo del robot. Como éste es un tema de capital importancia, lo ampliaremos de forma conveniente en siguientes entradas, por lo que no os preocupéis por ahora.
Por otro lado, los sensores inerciales son aquellos sensores que miden la aceleración de un cuerpo, tanto lineal (acelerámetros) como angular (giróscopos). Su funcionamiento se basa en la medición de la posición de una masa de prueba que se encuentra en el interior del mismo sensor. De todas formas, lo que nos interesa ahora es saber que un IMU nos medirá las aceleraciones experimentadas por el sensor en los tres ejes del espacio más las tres rotaciones posibles para estos ejes.
Como se puede deducir facilmente, sabiendo las aceleraciones en todos los ejes se puede saber los desplazamientos angulares para intervalos de tiempos conocidos. En entradas futuras explicaremos cómo se combina la información de los IMUs y los encoders para estimar la posición de un robot y la necesidad de hacer esto. Como veis, estamos dejando mucho material para el futuro.
Para terminar con los sensores, solo cabe señalar que existe una característica inherente a los mismos: la incertidumbre. Todas las medidas hechas por todos los sensores presentan errores de medición que siempre hay que tener muy en cuenta. Como veréis en futuras entradas, resolver las incertidumbres de estas medidas es una de las tareas más repetidas en robótica. Pero tiempo al tiempo.
Actuadores
Los equivalentes a los músculos humanos para un robot son los motores eléctricos. Aunque hoy en día se está investigando en músculos artificiales y ya hay robots que utilizan actuadores hidraúlicos, son los motores eléctricos los actuadores más utilizados en robótica hasta la fecha. No será en estas entradas donde os expliquemos los principios físicos de un motor eléctrico, por muy interesante que esto sea. Para nosotros, un motor eléctrico será un dispositivo que nos permita mover ciertas partes de un robot: desde su cabeza, sus brazos hasta las ruedas que pueda utilizar para moverse en su entorno. No nos centraremos mucho en las problemáticas de control de dichos motores. Nos abstraeremos de todos esos problemas y supondremos que somos capaces de comandar distintas partes del robot para que se desplacen como deseemos. Sin embargo, no debemos olvidar que eso ocurre gracias a los motores eléctricos y nuestros amigos los ingenieros de control que nos obsequian con controladores que nos facilitan la vida.
Unidades de cómputo
Para terminar con la entrada de hoy, tenemos que hablar de las unidades de cómputo. Básicamente, estamos hablando de ordenadores. Ordenadores que cuenten con su CPU, su memoria RAM, disco duro, wifi, puertos USB, puertos serie y hardware más específico para poder conectarse a otros dispositivos de los robots. Existen mil soluciones para instalar una unidad de cómputo en un robot. Desde microcontroladores con poca capacidad hasta PCs de última generación. A nosotros no nos interesa meternos en estos temas. Lo único que nos interesa saber es que tendremos un ordenador que recoja todos los datos producidos por todos los sensores. Y a su vez, este ordenador estará conectado a los actuadores para mandar los comandos que se vayan generando en función de los algoritmos que corran en el mismo. Tenemos que ser conscientes sin embargo, de que nuestros ordenadores seguirán teniendo limitaciones a la hora de computar los algoritmos que vayamos presentando. Esta limitación es muy importante en robótica. No se trata solo de diseñar algoritmos que puedan resolver problemas concretos, sino que además se debe mirar por las cargas computacionales de dichos algoritmos y reducirlos en la medida de lo posible.
Resultado
Después de árduos esfuerzos, el resultado de nuestro trabajo de construcción bien podría ser algo así.
El robot que aparece en la figura es el PR2, un robot construido por la empresa estadounidense Willow Garage. Su coste ronda los 300 mil euros y viene equipado con todo lo que uno podría soñar: potentes PCs, brazos y garras, una cabeza con dos cámaras estéreo, un láser que puede inclinarse para realizar barridos en el plano vertical (en inglés tilting laser), otro láser en la base móvil equipada con cuatro ruedas,… El objetivo de este robot es ofrecer a los investigadores una plataforma adecuada para que puedan avanzar en sus investigaciones. Nosotros, como todavía no tenemos tanto dinero, nos conformaremos con la versión simulada de este robot para que nos asista en nuestras entradas.
Nos seguimos leyendo…
Pingback: Navegación autónoma | Cuentos Cuánticos
Me encanta esta nueva «seccion» del blog, yo pienso que lo mas importante en el futuro sera la física y la robótica.
Un saludo!
¿robot=servos+inteligencia artificial?
Mola la entrada
Magnífica iniciativa.
Estoy deseando seguir con las entradas.
Una cosita que creo que no queda clara de la lectura es lo de «carga computacional» que entiendo que te refieres a la eficacia y eficiencia del algoritmo utilizado por el ordenador.
Gracias y adelante.
¡Gracias!
Efectivamente. Cuando hablo de carga computacional me refiero a los recursos de CPU y memoria que necesita un algoritmo. Eso determina la eficiencia con la que trabaja. La importancia de esto es muy grande puesto que hay soluciones a ciertos problemas que no son útiles puesto que no hay PC capaz de ejecutarlos con una mínima eficiencia. Ya hablaremos de esto con más detenimiento.