1 00:00:05,040 --> 00:00:22,820 Bueno, os voy a presentar ahora una serie de prácticas que hacen los alumnos en la Universidad Politécnica de Madrid 2 00:00:22,820 --> 00:00:28,500 con forma de informática, y esto es un poco diferente a lo que estéis acostumbrados a ver habitualmente. 3 00:00:29,960 --> 00:00:35,579 Es decir, el software libre en el ámbito universitario tiene bastante difusión. 4 00:00:35,579 --> 00:00:53,820 Digamos que ya de unos años de esta parte se utiliza para unas asignaturas determinadas, como pueden ser sistemas operativos, bases de datos, cosas relacionadas con servicios web, asignaturas relacionadas con programación. 5 00:00:53,820 --> 00:00:56,119 hay software libre digamos que tiene ya su nicho 6 00:00:56,119 --> 00:00:57,500 pero 7 00:00:57,500 --> 00:01:00,840 en otro tipo de asignaturas 8 00:01:00,840 --> 00:01:02,240 todavía no 9 00:01:02,240 --> 00:01:04,620 no está muy implantado 10 00:01:04,620 --> 00:01:06,579 y son las que os voy a mostrar ahora 11 00:01:06,579 --> 00:01:07,859 que son cosas relacionadas 12 00:01:07,859 --> 00:01:10,780 con la generación de gráficos 3D 13 00:01:10,780 --> 00:01:12,700 el procesamiento de imágenes 14 00:01:12,700 --> 00:01:15,280 el reconocimiento de dígitos 15 00:01:15,280 --> 00:01:16,099 etcétera 16 00:01:16,099 --> 00:01:16,920 la robótica 17 00:01:16,920 --> 00:01:19,500 bueno 18 00:01:19,500 --> 00:01:22,780 esto aunque parezca 19 00:01:22,780 --> 00:01:30,299 un poco de palabra terrorífica, vamos a hablar de un poco de lo que es programación 20 00:01:30,299 --> 00:01:38,099 científica. No sé si habréis visto lo que es o sabéis siquiera lo que es. En realidad 21 00:01:38,099 --> 00:01:43,540 la programación científica consiste en aprender una serie de herramientas y técnicas para 22 00:01:43,540 --> 00:01:49,760 resolver problemas matemáticos. Los problemas matemáticos que sirvan para hacer cosas útiles 23 00:01:49,760 --> 00:01:50,980 en el mundo real 24 00:01:50,980 --> 00:01:54,480 por ejemplo, yo estoy seguro que muchos de vosotros 25 00:01:54,480 --> 00:01:56,340 sabéis, o deberíais saber 26 00:01:56,340 --> 00:01:57,000 por lo menos 27 00:01:57,000 --> 00:02:00,219 cómo se soluciona un sistema de ecuaciones 28 00:02:00,219 --> 00:02:01,040 sobre el papel 29 00:02:01,040 --> 00:02:02,920 las X, las Y 30 00:02:02,920 --> 00:02:06,140 veo cara de extrañeza, deberíais saberlo 31 00:02:06,140 --> 00:02:06,700 por lo menos 32 00:02:06,700 --> 00:02:08,960 o bueno 33 00:02:08,960 --> 00:02:11,840 una cosa es que si vais a hacerlo sobre el papel 34 00:02:11,840 --> 00:02:13,319 y otro un poco diferente 35 00:02:13,319 --> 00:02:14,500 es 36 00:02:14,500 --> 00:02:18,159 a la hora de tener que programarlo 37 00:02:18,159 --> 00:02:23,860 en un ordenador la resolución de ese sistema de ecuaciones, ¿cómo lo haríais? Pues el 38 00:02:23,860 --> 00:02:31,680 99% de la gente no sabe cómo enfrentarse a ese problema, no tiene ni idea. Nosotros 39 00:02:31,680 --> 00:02:36,300 lo que intentamos enseñar es una serie de técnicas y de herramientas, de estrategias 40 00:02:36,300 --> 00:02:43,280 para que vosotros os den, digamos, un papel con unas ecuaciones y las implementéis en 41 00:02:43,280 --> 00:02:50,199 el ordenador. Y para ello nosotros lo que se suele utilizar es el lenguaje de programación 42 00:02:50,199 --> 00:02:57,840 MATLAB, que es un producto comercial que sirve para resolver problemas numéricos, pero nosotros 43 00:02:57,840 --> 00:03:03,800 lo utilizamos a través de Octable, que es un proyecto GNU que tiene la ventaja de ser 44 00:03:03,800 --> 00:03:15,500 compatible MATLAB. Bueno, ¿y por qué? ¿Por qué usamos MATLAB? ¿Por qué utilizamos 45 00:03:15,500 --> 00:03:19,599 esta lenguaje de programación en lugar de utilizar otras alternativas que son totalmente 46 00:03:19,599 --> 00:03:26,379 libres? Como es STILA, R o Python, que tiene algunos módulos numéricos bastante avanzados. 47 00:03:27,300 --> 00:03:32,020 Pues porque MATLAB es prácticamente un estándar dentro de lo que es el ámbito de la computación 48 00:03:32,020 --> 00:03:40,180 científica. Además de eso, MATLAB tiene mucha implementación en lo que son las empresas. 49 00:03:40,500 --> 00:03:48,060 Es decir, las empresas buscan gente que sepa MATLAB. Vosotros vais al Infojobs y ponéis 50 00:03:48,060 --> 00:03:54,060 MATLAB en la zona de búsqueda y os aparece un listado de empresas, dos o tres páginas, 51 00:03:55,139 --> 00:04:02,000 en las que hay gente que os piden que sepáis esta lenguaje de programación. Sobre todo 52 00:04:02,000 --> 00:04:04,199 para cierto tipo de trabajo 53 00:04:04,199 --> 00:04:05,139 relacionados con 54 00:04:05,139 --> 00:04:07,680 ya bastante especializados 55 00:04:07,680 --> 00:04:10,020 relacionados con investigación y desarrollo 56 00:04:10,020 --> 00:04:11,680 ingenieros de investigación, etc. 57 00:04:13,300 --> 00:04:14,280 pues entonces 58 00:04:14,280 --> 00:04:17,680 nos interesa 59 00:04:17,680 --> 00:04:20,379 que vosotros sepáis 60 00:04:20,379 --> 00:04:22,480 MATLAB, pero también nos interesa 61 00:04:22,480 --> 00:04:23,839 que lo aprendáis 62 00:04:23,839 --> 00:04:25,379 a través de una herramienta libre 63 00:04:25,379 --> 00:04:31,480 aparte de eso, MATLAB 64 00:04:31,480 --> 00:04:33,000 bueno, MATLAB o TABE 65 00:04:33,000 --> 00:04:35,579 ahora utilizaré estas dos palabras como sinónimos 66 00:04:35,579 --> 00:04:39,120 permite programar 67 00:04:39,120 --> 00:04:41,839 de manera muy rápida y muy sencilla 68 00:04:41,839 --> 00:04:43,459 es decir, es un lenguaje que está hecho 69 00:04:43,459 --> 00:04:45,160 para esto, para programar 70 00:04:45,160 --> 00:04:46,480 para esos problemas matemáticos 71 00:04:46,480 --> 00:04:49,360 y en 4 o 5 líneas de código 72 00:04:49,360 --> 00:04:51,779 por ejemplo, el ejemplo del sistema de ecuaciones 73 00:04:51,779 --> 00:04:53,500 con 2 líneas de código 74 00:04:53,500 --> 00:04:55,800 se hace en menos de 5 minutos 75 00:04:55,800 --> 00:04:57,420 mientras que si tenéis que 76 00:04:57,420 --> 00:04:59,100 picaroslo en C o en Java 77 00:04:59,100 --> 00:05:01,360 o en C++, pues digamos que 78 00:05:01,360 --> 00:05:02,899 tiene un poco más de elaboración 79 00:05:02,899 --> 00:05:06,720 ¿cuál es la ventaja 80 00:05:06,720 --> 00:05:08,620 y las desventajas que tienen 81 00:05:08,620 --> 00:05:10,480 Manla y Octave? 82 00:05:11,139 --> 00:05:12,779 bueno, Manla va a ser comercial 83 00:05:12,779 --> 00:05:14,959 tiene un montón 84 00:05:14,959 --> 00:05:17,199 de funciones numéricas predefinidas 85 00:05:17,199 --> 00:05:18,939 hablamos de miles 86 00:05:18,939 --> 00:05:19,519 de ellas 87 00:05:19,519 --> 00:05:22,639 mientras que Octave todavía está un poco verde 88 00:05:22,639 --> 00:05:24,519 tiene funciones un poco básicas 89 00:05:24,519 --> 00:05:27,040 pero para lograr nuestros problemas 90 00:05:27,040 --> 00:05:28,800 las prácticas que vais a ver ahora 91 00:05:28,800 --> 00:05:30,420 la verdad es que nos da un poco igual 92 00:05:30,420 --> 00:05:30,740 porque 93 00:05:30,740 --> 00:05:33,720 son los alumnos 94 00:05:33,720 --> 00:05:35,500 los que van a tener que programárselo todo 95 00:05:35,500 --> 00:05:37,660 son ellos los que van a tener que programar 96 00:05:37,660 --> 00:05:38,759 esas funciones, con lo cual 97 00:05:38,759 --> 00:05:41,939 mientras tengamos las partes más básicas 98 00:05:41,939 --> 00:05:43,879 nosotros vamos a poder funcionar con ellas 99 00:05:43,879 --> 00:05:47,839 ¿y cuál es la ventaja que tiene Octave frente a MATLAB? 100 00:05:48,579 --> 00:05:49,959 pues el tema de licencias 101 00:05:49,959 --> 00:05:52,079 una licencia de MATLAB 102 00:05:52,079 --> 00:05:53,939 puede costar varios miles 103 00:05:53,939 --> 00:05:56,339 de euros solo la licencia básica 104 00:05:56,339 --> 00:05:57,639 sin añadir 105 00:05:57,639 --> 00:06:00,040 las librerías 106 00:06:00,040 --> 00:06:03,540 propietarias que tienen 107 00:06:03,540 --> 00:06:05,779 procesamiento de imagen 108 00:06:05,779 --> 00:06:07,899 control, etc 109 00:06:07,899 --> 00:06:09,040 pues 110 00:06:09,040 --> 00:06:11,639 puede subir a varias decenas de miles de euros 111 00:06:11,639 --> 00:06:13,500 la broma, mientras que con octavos 112 00:06:13,500 --> 00:06:14,019 pues sale 113 00:06:14,019 --> 00:06:17,360 gratis, es lo bueno que tiene 114 00:06:17,360 --> 00:06:18,079 esto del software 115 00:06:18,079 --> 00:06:20,339 bueno y 116 00:06:20,339 --> 00:06:25,420 vamos a ver ahora los cuatro problemas 117 00:06:25,420 --> 00:06:26,920 cuatro prácticas 118 00:06:26,920 --> 00:06:28,139 que les pusimos a los alumnos 119 00:06:28,139 --> 00:06:31,100 y que aunque yo he hablado de muchas cosas 120 00:06:31,100 --> 00:06:32,360 de fórmulas matemáticas 121 00:06:32,360 --> 00:06:35,379 y muchas cosas que os pueden parecer un poco infernales 122 00:06:35,379 --> 00:06:37,019 en realidad son prácticas 123 00:06:37,019 --> 00:06:39,100 que resuelven problemas reales 124 00:06:39,100 --> 00:06:40,180 la primera de ellas 125 00:06:40,180 --> 00:06:42,839 consiste 126 00:06:42,839 --> 00:06:44,560 en la generación automática 127 00:06:44,560 --> 00:06:46,480 de fotografías panorámicas 128 00:06:46,480 --> 00:06:49,300 es al estilo 129 00:06:49,300 --> 00:06:50,759 de lo que hacen programas como el 130 00:06:50,759 --> 00:06:53,000 Canon PhotoStitch, si tenéis una cámara Canon 131 00:06:53,000 --> 00:06:54,560 lo conoceréis, os voy a enseñar 132 00:06:54,560 --> 00:06:55,720 de aplicaciones 133 00:06:55,720 --> 00:06:58,860 o el Pet Stitcher 134 00:06:58,860 --> 00:07:00,220 o el Heating 135 00:07:00,220 --> 00:07:01,740 que es un proyecto de software libre 136 00:07:01,740 --> 00:07:03,779 la idea es 137 00:07:03,779 --> 00:07:05,420 yo cojo varias fotos 138 00:07:05,420 --> 00:07:07,040 de un 139 00:07:07,040 --> 00:07:09,800 yo quiero tomar una fotografía 140 00:07:09,800 --> 00:07:10,720 de un paisaje 141 00:07:10,720 --> 00:07:13,199 lo que hago es tomo varias fotos de él 142 00:07:13,199 --> 00:07:15,980 y las compongo en una única foto panorámica 143 00:07:15,980 --> 00:07:18,800 pues 144 00:07:18,800 --> 00:07:21,779 nosotros queremos hacer eso 145 00:07:21,779 --> 00:07:23,839 pero además hacer que sea automático 146 00:07:23,839 --> 00:07:24,759 es decir 147 00:07:24,759 --> 00:07:28,240 nosotros les vamos a pasar a los alumnos 148 00:07:28,240 --> 00:07:30,000 varias fotografías 149 00:07:30,000 --> 00:07:33,019 En este caso tenemos tres fotografías de un despacho. 150 00:07:33,920 --> 00:07:38,519 Como veis las fotos no son iguales entre sí, sino que se han ido tomando, 151 00:07:38,759 --> 00:07:44,860 lo que hemos hecho es poner un trípode en el despacho y hemos ido tomando fotografías y girando la cámara, 152 00:07:45,480 --> 00:07:47,339 como si estuviéramos barriendo todo el despacho. 153 00:07:48,939 --> 00:07:53,160 Como veis las fotos no son iguales entre sí, pero tienen varias zonas en común. 154 00:07:53,160 --> 00:08:00,439 Pues lo que queremos hacer es una cosa automática donde nosotros al programa le pasemos estas fotos 155 00:08:00,439 --> 00:08:07,399 y él solito genere una imagen panorámica, no, una fotografía que sea la composición de las tres. 156 00:08:10,939 --> 00:08:13,800 Pues, ¿cómo se hace esto? 157 00:08:15,579 --> 00:08:22,740 Lo que tenemos que hacer es determinar las zonas de la imagen de cada foto, las zonas que son comunes. 158 00:08:22,740 --> 00:08:31,779 Por ejemplo, entre la foto de la izquierda y la central vemos que la zona del ordenador es igual, que la zona de los pósters también es igual. 159 00:08:32,059 --> 00:08:41,320 Entre la foto central y la de la derecha vemos que tienen parte de la zona de los pósters, que es común, y también parte de las zonas estanterías, que es común. 160 00:08:41,320 --> 00:09:01,240 Pues esa información, nosotros a través de algoritmos de procesamiento de imagen, algoritmos estadísticos y algoritmos de puestas de correspondencia, que se van a programar en Octave, pues vamos a poder generar una imagen tal que así. 161 00:09:01,240 --> 00:09:18,159 Si os fijáis, la foto del centro está recuadrada en azul, no sé si se ve desde ahí, y las fotos de los lados, lo que hemos hecho es calcular las áreas de solape y la transformación que hay que hacer de esas fotos. 162 00:09:18,159 --> 00:09:30,159 Es decir, las fotos no se pueden pegar así, a lo bruto, sino que hay que transformarlas de tal manera que coincidan las zonas comunes con las zonas centrales. 163 00:09:31,240 --> 00:09:43,240 Y una vez que tenemos hecho esto, hay que fusionar los colores entre sí, para que al final nos quede una foto panorámica tan chula como esta. 164 00:09:43,240 --> 00:09:51,240 Si os fijáis, aunque son tres fotos diferentes, parece una foto única. 165 00:09:51,240 --> 00:10:03,509 que no. Y como ya os decía antes, todo esto está programado a piñón, prácticamente 166 00:10:03,509 --> 00:10:09,750 salvo un par de funciones de librerías básicas, está programado por los alumnos en Octave. 167 00:10:10,149 --> 00:10:17,870 Bueno, Octave más la. Son todo librerías de tratamiento de matrices, que es el elemento 168 00:10:17,870 --> 00:10:29,350 básico que viene de Octave. Bueno, el segundo ejemplito que voy a enseñaros es un pelín 169 00:10:29,350 --> 00:10:40,570 más complejo. Se trata de reconocer dígitos manuscritos. ¿Qué quiere decir esto? Pues 170 00:10:40,570 --> 00:10:45,190 que nosotros le vamos a pasar al programa, le vamos a pasar al ordenador una serie de 171 00:10:45,190 --> 00:10:50,029 números que hemos escrito a mano, que hemos digitalizado, por lo cual tenemos las imágenes 172 00:10:50,029 --> 00:10:59,629 esos números y el ordenador nos va a decir para cada imagen que número representa. Tengo 173 00:10:59,629 --> 00:11:06,590 aquí unas imágenes de unos números. 4, 9, 1, 3. Pues nosotros queremos generar un sistema 174 00:11:06,590 --> 00:11:16,470 que está representado aquí por esta turmis a que le voy a pasar el 3 y para esa imagen 175 00:11:16,470 --> 00:11:24,110 del 3, mi sistema va a generar una etiqueta que va a ser 3. Para la imagen del 1, el sistema 176 00:11:24,110 --> 00:11:34,120 va a generar una etiqueta que sea 1. Para el 9, 9. Y así sucesivamente. Este problema 177 00:11:34,120 --> 00:11:40,500 la verdad es que es bastante complejo. Tiene un punto de complejidad bastante elevado. 178 00:11:41,860 --> 00:11:46,740 Porque, imaginaos un problema análogo, sería reconocer el número de la matrícula de un 179 00:11:46,740 --> 00:11:53,360 coche. Por ejemplo, para los famosos radares que ahora tienen implementados en la DGT, 180 00:11:54,679 --> 00:11:59,039 pues lo lógico sería que cuando tú detectas que un coche ha sobrepasado una determinada 181 00:11:59,039 --> 00:12:03,759 velocidad, pues que el ordenador sea capaz de detectar automáticamente el número de 182 00:12:03,759 --> 00:12:08,779 la matrícula. Bueno, pues ese problema es todavía sencillo en comparación con esto, 183 00:12:09,440 --> 00:12:13,899 porque digamos que las tipografías de las matrículas de los coches que hay, pues son 184 00:12:13,899 --> 00:12:20,919 casi siempre las mismas, son muy parecidas. Mientras que aquí, en este caso, son dígitos, 185 00:12:20,919 --> 00:12:28,620 son números escritos a mano por personas. Es decir, no sé si os habéis fijado, pero 186 00:12:28,620 --> 00:12:37,419 todos vosotros no soléis escribir el 4 o el 7 o el 9 de la misma manera, o el 5. Pues 187 00:12:37,419 --> 00:12:42,399 eso es un problema bastante complicado de resolver. Nosotros la forma que tuvimos de 188 00:12:42,399 --> 00:12:50,940 resolverlo es mediante un proceso de entrenamiento. Es decir, nosotros hicimos un programa para 189 00:12:50,940 --> 00:12:58,200 que le pasamos una base de datos que se llama MNIST, que tiene un montón de imágenes de 190 00:12:58,200 --> 00:13:06,740 números, creo que son unos 60.000 o 70.000, y digamos que programamos unas rutinas que 191 00:13:06,740 --> 00:13:13,820 aprendiera a determinar las características de cada número. Es decir, ¿qué es lo que 192 00:13:13,820 --> 00:13:21,080 hace que el 9 sea un 9? Porque todos sabemos, nosotros sabemos, que el 9 es muy fácil de 193 00:13:21,080 --> 00:13:28,100 distinguir. Es un redondel y un palito. Que el 8 son dos redondeles. Pero claro, ahora 194 00:13:28,100 --> 00:13:36,200 hay que hacer que el ordenador interprete esa información. Pues los alumnos, en este 195 00:13:36,200 --> 00:13:43,200 En este caso, tuvieron que programar en octava y manda una serie de rutinas, estadísticas, 196 00:13:43,200 --> 00:13:47,200 una serie de rutinas matemáticas, para discriminar todos esos números. 197 00:13:47,200 --> 00:13:53,200 Y luego, a su vez, tuvieron que hacer el programa que fuese capaz de reconocer esos números. 198 00:13:53,200 --> 00:13:58,200 Es decir, que cuando yo le pasaba la imagen del 9, dijera, eso es un 9. 199 00:13:58,200 --> 00:14:03,200 Cuando le pasaba la imagen del 6, dijera, eso es un 6. Y así sucesivamente. 200 00:14:03,200 --> 00:14:19,470 Bueno, en esta práctica que ahora os voy a presentar, ahora hemos cambiado un poco de tercio. 201 00:14:20,110 --> 00:14:24,970 Si las dos anteriores eran más relacionadas con el tema del procesamiento de imagen, 202 00:14:26,830 --> 00:14:33,710 esta tiene más que ver con la parte de robótica y con la parte de reconstrucción tridimensional de escenas. 203 00:14:34,610 --> 00:14:40,970 Es decir, ¿qué significa eso de la reconstrucción tridimensional de escenas? 204 00:14:40,970 --> 00:14:42,809 porque nosotros 205 00:14:42,809 --> 00:14:45,450 a partir de la información que obtenemos 206 00:14:45,450 --> 00:14:47,429 de una cámara, de una fotografía 207 00:14:47,429 --> 00:14:49,990 pues podemos, digamos, obtener 208 00:14:49,990 --> 00:14:51,649 un modelo tridimensional 209 00:14:51,649 --> 00:14:53,889 de lo que está representando esa fotografía 210 00:14:53,889 --> 00:14:56,029 en este caso 211 00:14:56,029 --> 00:14:57,009 lo vamos a aplicar 212 00:14:57,009 --> 00:14:59,070 a la navegación de un robot 213 00:14:59,070 --> 00:15:01,169 vamos a aplicarlo, Javier 214 00:15:01,169 --> 00:15:03,809 a la generación de un mapa 215 00:15:03,809 --> 00:15:05,250 para que un robot pueda navegar 216 00:15:05,250 --> 00:15:08,269 nosotros 217 00:15:08,269 --> 00:15:11,129 como en esta, cuando hicimos esta práctica 218 00:15:11,129 --> 00:15:13,830 no teníamos robot, pues nos inventamos 219 00:15:13,830 --> 00:15:14,529 uno virtual 220 00:15:14,529 --> 00:15:16,710 nos inventamos un robot virtual 221 00:15:16,710 --> 00:15:19,470 que dijimos que tenía dos cámaras 222 00:15:19,470 --> 00:15:21,830 el robot 223 00:15:21,830 --> 00:15:23,210 lo podéis ver en este mundo 224 00:15:23,210 --> 00:15:26,009 este es el mundo virtual por el que se va a mover 225 00:15:26,009 --> 00:15:28,029 el robot, es una especie de pasillo 226 00:15:28,029 --> 00:15:29,350 con dos recodos 227 00:15:29,350 --> 00:15:31,230 en el que como veis 228 00:15:31,230 --> 00:15:33,889 las paredes del pasillo son un poco 229 00:15:33,889 --> 00:15:34,750 psicodélicas 230 00:15:34,750 --> 00:15:37,690 el hecho de que sean así nos sirve 231 00:15:37,690 --> 00:15:39,769 para luego, digamos, poder 232 00:15:39,769 --> 00:15:45,950 hacer las funciones de reconstrucción. Y a propósito ya dije que tenía dos cámaras, 233 00:15:46,330 --> 00:15:50,750 la cámara izquierda y la cámara derecha. Son dos cámaras que están situadas a una 234 00:15:50,750 --> 00:15:57,750 cierta distancia y si os fijáis, las dos están viendo una zona del pasillo igual, 235 00:15:58,389 --> 00:16:07,009 pero las imágenes que están obteniendo no son iguales, como si yo tuviese una foto del 236 00:16:07,009 --> 00:16:13,149 escenario, desde aquí y desde aquí. El tener dos fotos es lo que nos va a ayudar a hacer 237 00:16:13,149 --> 00:16:21,279 la reconstrucción tridimensional de lo que es la zona del pasillo. ¿Cómo hacemos esto? 238 00:16:21,639 --> 00:16:28,419 ¿Cuál es el procedimiento para obtener un mapa en tres dimensiones del entorno? Pues 239 00:16:28,419 --> 00:16:34,039 lo que vamos a ir haciendo es ir moviendo el robot por el pasillo, si os habéis fijado, 240 00:16:34,039 --> 00:16:42,039 El robot ha cambiado de posición y la parte de la escena que está obteniendo las cámaras ha variado. 241 00:16:42,279 --> 00:16:43,620 También ha variado la orientación. 242 00:16:44,980 --> 00:16:50,580 Y lo que vamos a hacer es que el robot recorra el pasillo obteniendo imágenes. 243 00:17:00,580 --> 00:17:07,380 Y de esas imágenes, de cada imagen que obtenemos, de cada posición por la que se ha ido moviendo el robot, 244 00:17:07,380 --> 00:17:09,559 vamos a obtener una reconstrucción 245 00:17:09,559 --> 00:17:11,519 vamos a obtener una reconstrucción 246 00:17:11,519 --> 00:17:12,799 de lo que el robot está viendo 247 00:17:12,799 --> 00:17:15,779 en este caso vamos a obtener una serie de puntos 248 00:17:15,779 --> 00:17:19,450 en tres dimensiones 249 00:17:19,450 --> 00:17:19,809 aquí 250 00:17:19,809 --> 00:17:22,890 si podéis ver 251 00:17:22,890 --> 00:17:24,910 lo que es la reconstrucción de los puntos 252 00:17:24,910 --> 00:17:27,049 estos son los puntos 253 00:17:27,049 --> 00:17:29,150 para toda la secuencia por la que el robot 254 00:17:29,150 --> 00:17:30,190 se ha movido por el pasillo 255 00:17:30,190 --> 00:17:33,269 los puntos rojos son los puntos 256 00:17:33,269 --> 00:17:34,789 en tres dimensiones que ha reconstruido 257 00:17:34,789 --> 00:17:36,630 podéis ver 258 00:17:36,630 --> 00:17:40,500 otra vista 259 00:17:40,500 --> 00:17:46,500 y ahora una vista similar a la imagen que visteis anteriormente. 260 00:17:49,869 --> 00:17:55,269 Bueno, nosotros con esto obtenemos una reconstrucción de puntos. 261 00:17:56,609 --> 00:18:01,950 Pero para simplificar las cosas, a los alumnos les dijimos cómo era el mundo. 262 00:18:01,950 --> 00:18:05,349 Es decir, el mundo es un pasillo formado por planos. 263 00:18:06,390 --> 00:18:11,849 Pues podríamos obtener más información sabiendo que esos puntos pertenecen a planos, 264 00:18:11,849 --> 00:18:13,910 que son los que veis ajustados ahí 265 00:18:13,910 --> 00:18:16,470 este sería el mapa en tres dimensiones 266 00:18:16,470 --> 00:18:17,349 del entorno 267 00:18:17,349 --> 00:18:20,190 que hemos obtenido simplemente 268 00:18:20,190 --> 00:18:22,829 a partir de información de las cámaras 269 00:18:22,829 --> 00:18:24,670 es decir, hemos utilizado 270 00:18:24,670 --> 00:18:26,869 las cámaras como si fuera un elemento 271 00:18:26,869 --> 00:18:28,690 sensorial del robot 272 00:18:28,690 --> 00:18:30,710 más o menos lo que hacemos 273 00:18:30,710 --> 00:18:31,309 nosotros 274 00:18:31,309 --> 00:18:34,470 utilizamos los ojos como elemento sensorial 275 00:18:34,470 --> 00:18:36,789 si nosotros vamos de frente a una pared 276 00:18:36,789 --> 00:18:37,930 sabemos que 277 00:18:37,930 --> 00:18:40,329 en algún momento no podemos seguir 278 00:18:40,329 --> 00:18:41,269 porque podemos chocar 279 00:18:41,269 --> 00:18:44,769 el robot puede utilizar esta información para lo mismo 280 00:18:44,769 --> 00:18:46,390 ya que sabe donde está la pared 281 00:18:46,390 --> 00:18:48,650 pues puede moverse por el entorno 282 00:18:48,650 --> 00:18:51,009 de manera libre 283 00:18:51,009 --> 00:18:57,309 ¿qué herramientas de software libre hemos utilizado para esto? 284 00:18:58,670 --> 00:19:00,930 pues en primer lugar hemos utilizado 285 00:19:00,930 --> 00:19:02,849 Popray para la generación 286 00:19:02,849 --> 00:19:03,670 del mundo virtual 287 00:19:03,670 --> 00:19:08,849 la imagen del mundo, del pasillo 288 00:19:08,849 --> 00:19:10,869 que habéis visto, está generada con Popray 289 00:19:10,869 --> 00:19:13,549 así como las imágenes que obtiene 290 00:19:13,549 --> 00:19:14,769 de las cámaras 291 00:19:14,769 --> 00:19:17,150 las cámaras no son cámaras reales, lógicamente 292 00:19:17,150 --> 00:19:19,049 es un robo virtual, con lo cual 293 00:19:19,049 --> 00:19:21,329 nosotros esas cámaras virtuales, esas imágenes 294 00:19:21,329 --> 00:19:22,349 las obtenemos con POP 295 00:19:22,349 --> 00:19:25,289 POPray es un 296 00:19:25,289 --> 00:19:26,410 es un 297 00:19:26,410 --> 00:19:28,990 es un 298 00:19:28,990 --> 00:19:31,349 programa de software libre 299 00:19:31,349 --> 00:19:32,430 muy potente 300 00:19:32,430 --> 00:19:35,349 que permite definir escenas en 3 dimensiones 301 00:19:36,549 --> 00:19:38,069 a partir de primitivas 302 00:19:38,069 --> 00:19:39,650 o a partir de modelos 3D 303 00:19:39,650 --> 00:19:40,829 que hay con otros programas 304 00:19:40,829 --> 00:19:45,930 y generar imágenes fotorealistas de esa escena. 305 00:19:46,109 --> 00:19:50,009 Hacer unos renderizados con unas iluminaciones muy realistas. 306 00:19:50,710 --> 00:19:53,410 En este caso lo hemos utilizado para una tontería, 307 00:19:53,410 --> 00:19:59,190 que es simplemente generar un pasillo con esas paredes psicodélicas. 308 00:20:00,170 --> 00:20:03,049 Pero la potencia que tiene PopRate es infinita. 309 00:20:03,529 --> 00:20:09,730 Si os pasáis por la página de PopRate hay unas imágenes en tres dimensiones renderizadas 310 00:20:09,730 --> 00:20:11,970 que son prácticamente perfectas 311 00:20:11,970 --> 00:20:15,470 el mundo virtual 312 00:20:15,470 --> 00:20:16,990 lo hemos generado con Power BI 313 00:20:16,990 --> 00:20:20,190 que aparte de ser gratuito 314 00:20:20,190 --> 00:20:22,869 tiene otra ventaja 315 00:20:22,869 --> 00:20:25,750 que es que tenemos el código fuente disponible 316 00:20:25,750 --> 00:20:29,349 y eso para nosotros nos ha ayudado 317 00:20:29,349 --> 00:20:30,509 enormemente 318 00:20:30,509 --> 00:20:33,109 al tener el código fuente nosotros sabemos 319 00:20:33,109 --> 00:20:35,470 por decirlo de manera infinita 320 00:20:35,470 --> 00:20:37,410 sabemos como se transforman 321 00:20:37,410 --> 00:20:39,170 las cosas 3D que tenemos 322 00:20:39,170 --> 00:20:41,170 en el mundo virtual en imágenes 323 00:20:41,170 --> 00:20:43,670 que es lo que nos ayuda 324 00:20:43,670 --> 00:20:45,009 a realizar la reconstrucción 325 00:20:45,009 --> 00:20:50,700 pues con Power BI generamos 326 00:20:50,700 --> 00:20:52,259 el mundo virtual, el recinto 327 00:20:52,259 --> 00:20:54,980 y la reconstrucción 3D 328 00:20:54,980 --> 00:20:56,700 es decir, una vez que tenemos 329 00:20:56,700 --> 00:20:58,900 las imágenes, que es lo que 330 00:20:58,900 --> 00:21:01,180 el robot, lo único que puede ver 331 00:21:01,180 --> 00:21:04,940 pues el procesamiento de esas 332 00:21:04,940 --> 00:21:06,579 imágenes y la reconstrucción tridimensional 333 00:21:06,579 --> 00:21:08,500 se hace de nuevo con Octave Magda 334 00:21:08,500 --> 00:21:26,539 Bueno, y ya la última asignatura, digo, la última práctica que os voy a presentar es el control de un robot mediante visión artificial. 335 00:21:26,539 --> 00:21:34,539 Es algo parecido a lo que hemos visto antes, pues nosotros antes el mapa que hemos obtenido lo hemos sobreutilizado para hacer la navegación del robot. 336 00:21:34,539 --> 00:21:41,940 el robot. Solo que en este caso, si contábamos con un robot real, en este año se compró 337 00:21:41,940 --> 00:21:51,079 un robot que es el Amigobot del móvil Robotics, que como podéis ver, tiene una camarita montada 338 00:21:51,079 --> 00:21:59,640 encima del robot. Esa camarita transmite las imágenes que obtiene a un PC a través de 339 00:21:59,640 --> 00:22:06,359 un receptor de radiofrecuencia, que veis ahí con la antena, y además tiene ocho sensores 340 00:22:06,359 --> 00:22:11,720 de ultrasonido que los podemos utilizar a modo de sonar. Es decir, si la cámara falla, 341 00:22:11,920 --> 00:22:18,779 pues podemos utilizarlos para evitar los tránsitos de alguna manera. Y que, la verdad es que 342 00:22:18,779 --> 00:22:24,920 con un robot así, podríamos habernos planteado hacer algo parecido a lo que hicimos en la 343 00:22:24,920 --> 00:22:29,319 práctica anterior. Es decir, hacer una reconstrucción en tres dimensiones del entorno por el que 344 00:22:29,319 --> 00:22:34,680 está el robot y utilizarlo para movernos por ahí. Por eso en el caso sintético, que 345 00:22:34,680 --> 00:22:37,920 era en el caso virtual, que era en el que habéis visto anteriormente, ya era complicado, 346 00:22:38,700 --> 00:22:44,500 pues en el caso real es muchísimo más complicado. En cambio, podemos simplificar el problema 347 00:22:44,500 --> 00:22:53,160 haciendo que el robot simplemente siga líneas. Es decir, nosotros pintamos con cinta adhesiva 348 00:22:53,160 --> 00:22:58,599 un circuito, una línea negra por el suelo, y queremos que el robot, cuando lo ponemos 349 00:22:58,599 --> 00:23:05,079 sobre la línea, lo vaya siguiendo. Además queremos que si por alguna razón ponemos 350 00:23:05,079 --> 00:23:10,599 un obstáculo sobre la línea, el robot sea lo suficiente de estar listo. ¿Cómo? Para 351 00:23:10,599 --> 00:23:17,799 evitar ese obstáculo, rodearlo y seguir el circuito que le hemos tratado, seguir la trayectoria 352 00:23:17,799 --> 00:23:27,940 de la línea. ¿Cómo hacemos el seguimiento de la línea? Lo hacemos con visión por computador. 353 00:23:27,940 --> 00:23:57,380 Es decir, nosotros vamos a tener una imagen de la línea desde el principio y lo que queremos hacer es que, por ejemplo, imaginaos que la línea, tenemos una línea recta, el robot la va siguiendo mientras sea recta y cuando gira la línea, queremos que a través de la información que recibimos de la cámara, el robot sea suficientemente listo como para que haya detectado que la línea está girando y gire sus ruedas en consecuencia, con lo cual siempre vaya siguiéndolo. 354 00:23:57,940 --> 00:24:07,380 Bueno, esta práctica es un poco diferente a las anteriores en cuanto a la realización software. 355 00:24:07,380 --> 00:24:17,380 Aquí ya no utilizamos Octave, sino que utilizamos otros procedimientos. 356 00:24:17,380 --> 00:24:27,750 En principio, para el control del robot utilizamos una librería que se llama Pyro, que es Python Robotics. 357 00:24:27,750 --> 00:24:34,750 ¿Qué nos da PIRON? PIRON nos permite tener una visión de alto nivel del robot. 358 00:24:35,430 --> 00:24:42,230 Es decir, nosotros conectamos nuestro robot por el puerto serie o por el wifi al ordenador 359 00:24:42,230 --> 00:24:47,630 y el control del robot lo realizaremos a través de unas funciones de Python. 360 00:24:50,539 --> 00:24:55,740 PIRON tiene unos drivers para cada robot. Es decir, no todos los robots son iguales. 361 00:24:55,740 --> 00:25:05,859 algunos tienen unos sistemas de control, otros tienen otros, unos tienen ruedas, otros utilizan, otros tienen ultrasonidos, otros tienen cámara, 362 00:25:06,599 --> 00:25:16,240 pues digamos que Piro da una plataforma independiente del robot, es decir, nosotros para nuestro robot tenemos una cámara 363 00:25:16,240 --> 00:25:22,000 y vamos a programar una serie de algoritmos para seguir esa línea. 364 00:25:22,000 --> 00:25:24,700 pero si ahora nosotros desenchufamos 365 00:25:24,700 --> 00:25:26,579 nuestro amigo bot y le enchufamos 366 00:25:26,579 --> 00:25:28,160 otro robot que tiene una cámara 367 00:25:28,160 --> 00:25:29,359 y que piro que conoce 368 00:25:29,359 --> 00:25:32,480 pues los algoritmos que hemos hecho van a valer para él 369 00:25:32,480 --> 00:25:34,799 tenemos que decir 370 00:25:34,799 --> 00:25:35,819 que es una cosa de alto nivel 371 00:25:35,819 --> 00:25:38,339 bueno 372 00:25:38,339 --> 00:25:40,240 ese alto nivel es digamos que 373 00:25:40,240 --> 00:25:42,400 por esa parte nos permite 374 00:25:42,400 --> 00:25:44,420 tener varios robots controlados 375 00:25:44,420 --> 00:25:46,420 de una única manera y por otro lado 376 00:25:46,420 --> 00:25:48,220 nos evita un montón 377 00:25:48,220 --> 00:25:50,059 de cosas farragosas, es decir 378 00:25:50,059 --> 00:25:52,200 nos simplifica todo lo que es la programación del robot 379 00:25:52,200 --> 00:25:54,259 porque ya nos lo tiene prácticamente todo hecho 380 00:25:54,259 --> 00:25:58,339 pues lo que tenemos que hacer es 381 00:25:58,339 --> 00:25:59,640 mediante piro 382 00:25:59,640 --> 00:26:02,440 obtener la información 383 00:26:02,440 --> 00:26:04,640 de la cámara, es decir, la imagen de la línea 384 00:26:04,640 --> 00:26:06,460 que tenemos en un instante determinado 385 00:26:06,460 --> 00:26:09,339 esa imagen de la línea 386 00:26:09,339 --> 00:26:11,680 se la vamos a pasar mediante 387 00:26:11,680 --> 00:26:14,400 unas herramientas que se llaman SWIFT 388 00:26:14,400 --> 00:26:16,559 a una rutina de procesamiento 389 00:26:16,559 --> 00:26:18,200 de imagen que hemos programado 390 00:26:18,200 --> 00:26:27,700 en C, ahora necesitamos eficiencia, necesitamos algo programado en C. Cogemos la imagen que 391 00:26:27,700 --> 00:26:34,079 nos da el robot a través de Pyro, se la pasamos a la rutina en C, la procesamos y en el procesamiento 392 00:26:34,079 --> 00:26:40,059 podemos decidir si la línea ha girado, si la línea sigue recta, es decir, si tenemos 393 00:26:40,059 --> 00:26:47,759 que hacer la siguiente orden de control del robot, que la haremos mediante Pyro, es decir, 394 00:26:48,200 --> 00:26:57,900 El mecanismo es, cogemos la imagen mediante el piro, se la pasamos a C, con C vemos si la línea ha girado o cuál es la siguiente consigna para el robot, 395 00:26:58,579 --> 00:27:02,059 y esa consigna para el robot se la pasamos al robot mediante el piro otra vez. 396 00:27:03,019 --> 00:27:07,279 El piro nos permite obtener información del robot y controlar al robot. 397 00:27:07,900 --> 00:27:08,680 Son las dos cosas. 398 00:27:10,200 --> 00:27:12,400 Y el ciclo vuelve a comenzar. 399 00:27:12,680 --> 00:27:16,980 Volvemos a hacer una imagen, la procesamos, vemos si hay que girar, si hay que ir para adelante, etc. 400 00:27:19,640 --> 00:27:29,500 Bueno, y aparte de todo esto, Piro tiene un simulador 3D que se llama Cacebo, que es este que veis aquí en la imagen. 401 00:27:30,700 --> 00:27:35,920 Como veis, no sé si se puede ver por los colores, es una especie de modelo parecido al anterior, 402 00:27:35,920 --> 00:27:44,680 donde tenéis los rayos azules, son el sonar, y tiene una camarita montada encima del robot, donde está viendo el mundo. 403 00:27:44,680 --> 00:27:48,039 si veis ese cubo, ese rectángulo 404 00:27:48,039 --> 00:27:49,799 que hay entre dimensiones 405 00:27:49,799 --> 00:27:52,019 pues esto representa 406 00:27:52,019 --> 00:27:52,900 la imagen del mundo 407 00:27:52,900 --> 00:27:55,099 y esa ventanita pequeña de ahí 408 00:27:55,099 --> 00:27:56,759 representa lo que está viendo el robot 409 00:27:56,759 --> 00:27:59,579 bueno pues, este 410 00:27:59,579 --> 00:28:00,779 Cacebo nos puede valer 411 00:28:00,779 --> 00:28:03,539 tanto para hacer nuestras pruebas 412 00:28:03,539 --> 00:28:05,039 con el robot, es decir 413 00:28:05,039 --> 00:28:07,640 esa imagen que le está 414 00:28:07,640 --> 00:28:09,259 llegando a la cámara del robot a través de Cacebo 415 00:28:09,259 --> 00:28:11,140 se puede procesar de la misma manera 416 00:28:11,140 --> 00:28:12,900 que la que llega a través de la cámara 417 00:28:12,900 --> 00:28:15,539 y podemos enchufar una y desenchufar otra 418 00:28:15,539 --> 00:28:17,180 y lo podemos utilizar 419 00:28:17,180 --> 00:28:18,440 para probar nuestro algoritmo 420 00:28:18,440 --> 00:28:20,640 y por otro lado 421 00:28:20,640 --> 00:28:23,519 nos sirve para representar 422 00:28:23,519 --> 00:28:25,339 entre dimensiones cual es el modelo del robot 423 00:28:25,339 --> 00:28:27,200 si tenemos un escenario construido 424 00:28:27,200 --> 00:28:28,819 digamos a escala del real 425 00:28:28,819 --> 00:28:31,420 pues podemos utilizarlo como una salida 3D 426 00:28:31,420 --> 00:28:36,509 bueno ya 427 00:28:36,509 --> 00:28:38,609 lo último para terminar 428 00:28:38,609 --> 00:28:40,490 pues es decir 429 00:28:40,490 --> 00:28:40,670 que 430 00:28:40,670 --> 00:28:44,289 existen un montón de herramientas 431 00:28:44,289 --> 00:28:45,349 para realizar todo esto 432 00:28:45,349 --> 00:28:48,930 lo que pasa es que hay que ponerse 433 00:28:48,930 --> 00:28:50,309 hay que ponerse 434 00:28:50,309 --> 00:28:51,609 y digamos 435 00:28:51,609 --> 00:28:54,950 todo depende del grado de implicación 436 00:28:54,950 --> 00:28:56,230 o del grado de imaginación 437 00:28:56,230 --> 00:28:57,710 que tenga el profesor de turno 438 00:28:57,710 --> 00:29:00,230 pero digamos que herramientas en el mercado 439 00:29:00,230 --> 00:29:01,650 hay, pero 440 00:29:01,650 --> 00:29:03,930 uno tiene que estar ahí 441 00:29:03,930 --> 00:29:06,049 y además 442 00:29:06,049 --> 00:29:08,329 podemos utilizar esas herramientas 443 00:29:08,329 --> 00:29:10,430 para obtener una experiencia profesional 444 00:29:10,430 --> 00:29:12,430 útil, yo lo he dicho antes 445 00:29:12,430 --> 00:29:14,049 las empresas piden más 446 00:29:14,049 --> 00:29:18,049 Si lo aprendéis a través de Ustabe, estupendo, porque es prácticamente compatible. 447 00:29:19,490 --> 00:29:22,009 Cuando podéis salir al mercado de trabajo, 448 00:29:22,789 --> 00:29:26,450 pues ahí tendréis un pequeño nicho al que podéis acercaros. 449 00:29:28,289 --> 00:29:29,990 No hay que olvidar que la universidad, 450 00:29:30,390 --> 00:29:33,190 aparte de los institutos de formación profesional, 451 00:29:33,190 --> 00:29:36,730 la universidad también debe formar profesionales para el sector. 452 00:29:37,329 --> 00:29:39,410 Pues esto es una forma de hacerlo. 453 00:29:40,549 --> 00:29:42,390 Y yo ya he terminado. 454 00:29:42,390 --> 00:29:44,069 Muchas gracias por vuestra atención.