1 00:00:07,660 --> 00:00:20,500 me has dado cuenta que en las carreras de coches es habitual dar una vuelta de reconocimiento 2 00:00:21,940 --> 00:00:35,109 seríais capaces de ganar una carrera sin conocer previamente el circuito el campeonato mcqueen 3 00:00:35,109 --> 00:00:44,210 Racing League ha comenzado y esta vez hay una novedad revolucionaria. Los equipos deben diseñar 4 00:00:44,210 --> 00:00:51,990 un robot capaz de reconocer el trazado del circuito por sí mismos usando inteligencia 5 00:00:51,990 --> 00:00:59,570 artificial y además deben de recorrerlo en el menor tiempo posible sin salirse ni equivocarse. 6 00:00:59,570 --> 00:01:12,890 Como equipo de ingenieros de competición, vuestra misión será programar el robot McQueen para que, guiado por esta visión artificial, siga la línea de manera autónoma, estable y optimizada. 7 00:01:13,769 --> 00:01:22,469 Cada milisegundo cuenta, cada error penaliza. Vuestra estrategia, coordinación y código serán claves para llegar a la meta. 8 00:01:22,469 --> 00:01:26,829 Los conocimientos previos que se deben de tener son 9 00:01:26,829 --> 00:01:29,569 Programación por bloques con MakeCode 10 00:01:29,569 --> 00:01:31,430 Manejo básico del robot McQueen 11 00:01:31,430 --> 00:01:36,069 Conocimiento básico de Husky Lens en modo Line Tracking 12 00:01:36,069 --> 00:01:39,250 Nociones de lógica algorítmica y bucles 13 00:01:39,250 --> 00:01:42,329 Y además que conozcan el trabajo cooperativo 14 00:01:42,329 --> 00:01:46,030 Los objetivos que nos marcamos para esta actividad son los de 15 00:01:46,030 --> 00:01:49,409 Comprender el funcionamiento de las cámaras de inteligencia artificial 16 00:01:49,409 --> 00:01:54,530 Integrar Husky Lens con McQueen y Microbit para interpretar un entorno visual 17 00:01:54,530 --> 00:01:57,930 Diseñar algoritmos eficientes para navegación autónoma 18 00:01:57,930 --> 00:02:05,129 Fomentar la toma de decisiones en equipo, la depuración de errores y la mejora continua en entornos competitivos 19 00:02:05,129 --> 00:02:14,770 Para lograrlo, utilizaremos una placa Microbit, el robot McQueen y la cámara de inteligencia artificial Gravity Husky Lens 20 00:02:14,770 --> 00:02:20,449 Además necesitaremos una zona blanca bordeada por una franja negra 21 00:02:20,449 --> 00:02:27,530 En los materiales imprimibles de la situación de aprendizaje podéis encontrar un PDF con la imagen de arriba para imprimir en A3 22 00:02:27,530 --> 00:02:30,710 Pero también puedes hacerlo con cinta aislante negra 23 00:02:30,710 --> 00:02:37,050 Aquí puedes ver el robot sigue líneas con la cámara de inteligencia artificial en acción 24 00:02:37,050 --> 00:03:00,110 Vamos a ver cómo montamos Husky Lens en el McQueen 25 00:03:00,110 --> 00:03:06,770 Aquí tenemos el robot McQueen ya montado y por otra parte la cámara de inteligencia artificial Husky Lens 26 00:03:06,770 --> 00:03:13,110 Aquí hay unos tornillos con separadores y aquí los tornillos que vamos a usar para sujetar la Husky Lens 27 00:03:13,110 --> 00:03:20,139 Aquí tenemos el cable que nos va a permitir conectar la Husky Lens con el McQueen 28 00:03:20,139 --> 00:03:29,530 Lo primero que vamos a hacer es quitar estos tornillos que son los que sujetan la rueda al chasis 29 00:03:29,530 --> 00:04:01,259 Los vamos a sustituir por estos que son más largos y además con unos separadores 30 00:04:01,259 --> 00:04:06,360 Lo que nos permitirá sujetar el soporte de la cámara y a la vez la rueda 31 00:04:06,360 --> 00:05:50,339 Ajustamos bien el soporte para que quede centrado y bien sujeto 32 00:05:50,339 --> 00:06:06,899 Ahora vamos a poner la base que sujeta la cámara 33 00:06:06,899 --> 00:06:45,079 Atornillamos la cámara a la base 34 00:06:45,079 --> 00:07:18,759 Conectamos el cable que incluye la cámara al puerto I2C de McQueen 35 00:07:18,759 --> 00:07:29,879 Por este cable es por el que se envían, además de los datos entre la cámara y el microbit, la alimentación de esta, por lo que no hace falta una fuente adicional para que funcione nuestra cámara. 36 00:08:24,850 --> 00:08:32,190 Ahora apretamos los tornillos para que no se caiga la cámara y recogemos un poco los cables para que no molesten cuando se desplace. 37 00:08:45,460 --> 00:08:45,860 ¡Ya lo tenemos! 38 00:08:52,470 --> 00:08:55,710 Ahora solo falta conectar el microbit y programarlo. 39 00:08:55,710 --> 00:09:00,309 Para poder programar las funcionalidades de McQueen 40 00:09:00,309 --> 00:09:02,909 necesitamos instalar la extensión McQueen 41 00:09:02,909 --> 00:09:05,370 que lo haremos con el procedimiento tradicional 42 00:09:05,370 --> 00:09:25,860 En este caso también vamos a necesitar la extensión Husky Lens 43 00:09:25,860 --> 00:09:28,179 que la instalaremos como indica en el vídeo 44 00:09:28,179 --> 00:09:53,799 El programa que estás viendo está disponible en los recursos digitales 45 00:09:53,799 --> 00:09:55,179 de la situación de aprendizaje 46 00:09:55,179 --> 00:09:58,639 y además la última versión está en la página web 47 00:09:58,639 --> 00:10:02,539 Vamos a ver qué partes tiene y qué hace cada una de ellas. 48 00:10:02,899 --> 00:10:11,679 Aquí vemos el bloque al iniciar, que en este caso nos muestra una X durante el proceso de conexión con la cámara de inteligencia artificial. 49 00:10:12,200 --> 00:10:20,059 Una vez establecida la comunicación por el puerto I2C, la configura para trabajar en modo Line Tracking y que podamos seguir la línea. 50 00:10:20,480 --> 00:10:26,500 A continuación, carga los valores definidos en las variables VNormal, VLenta y VRápida. 51 00:10:26,500 --> 00:10:31,220 Si todo ha ido bien, deberá mostrar un check en la pantalla del microbit. 52 00:10:31,340 --> 00:10:38,399 Es posible que tengas que cambiar los valores de las velocidades para adaptarlas al circuito y a la altura de la cámara. 53 00:10:38,799 --> 00:10:48,980 La función mueve robot interpreta la información que llega de la cámara de inteligencia artificial y pone en marcha los motores consecuentemente. 54 00:10:48,980 --> 00:11:07,980 Una explicación más detallada de esta función sería que, antes de conocer qué hace el código de la función mueveRobot, es importante saber que cuando HuskyLens detecta una línea, construye un vector que representa el segmento principal del camino que ve, enviando por el puerto I2C dos pares de coordenadas. 55 00:11:07,980 --> 00:11:14,980 La primera es el origen, X0 y 0, y la segunda es el destino, X1 y 1. 56 00:11:15,259 --> 00:11:25,559 Debes tener en cuenta que el eje X, el horizontal, va de 0 a 320, y el eje Y, que es el vertical, va de 0 a 240 píxeles. 57 00:11:26,059 --> 00:11:34,899 En nuestro código le decimos que si el X del destino está entre 120 y 200 píxeles, que es más o menos el medio de la pantalla, 58 00:11:34,899 --> 00:11:42,179 debe poner los motores avanzando en el mismo sentido pero si x es mayor de 200 apunta a la 59 00:11:42,179 --> 00:11:49,419 derecha mueva el motor izquierdo rápidamente y el derecho algo más lento de esa forma avance 60 00:11:49,419 --> 00:11:56,919 girando a la derecha de la misma manera si x apunta a la izquierda es decir que es menor de 61 00:11:56,919 --> 00:12:03,500 120 debe poner el motor derecho a velocidad rápida y el izquierdo lento para que gire a la izquierda 62 00:12:03,500 --> 00:12:10,759 Según el circuito y la altura de la cámara, es posible que tengas que poner una pausa tras la puesta en marcha de los motores, 63 00:12:11,120 --> 00:12:15,460 para darle tiempo al procesador a reconocer la dirección en la que debe de moverse. 64 00:12:15,460 --> 00:12:25,200 El bloque de para siempre estará continuamente recuperando los datos de la cámara y llamando a la función mueve robot para que ponga en marcha los motores. 65 00:12:25,600 --> 00:12:30,019 Mientras el robot esté encendido, se estará ejecutando el siguiente código. 66 00:12:30,019 --> 00:12:34,799 Le pide a la cámara los datos de lo que está viendo y los guarda. 67 00:12:35,019 --> 00:12:41,220 Si Husky Lens detecta el vector con ID 1, que es la que hemos entrenado a la imagen o el que mide por defecto, 68 00:12:41,559 --> 00:12:47,899 obtiene las coordenadas del punto final de la flecha y las guarda en las variables X1 e Y1. 69 00:12:48,240 --> 00:12:55,179 Y tras esto, llama a la función mueveRobot para que se mueva según los datos que le lleguen del destino del vector. 70 00:12:55,179 --> 00:13:01,360 el código podría mejorarse considerando no sólo el final del vector sino también el inicio de 71 00:13:01,360 --> 00:13:06,259 esta forma podemos calcular el ángulo de inclinación lo que nos ayudaría a cambiar 72 00:13:06,259 --> 00:13:10,840 la velocidad de los motores para adaptarse mejor a los giros cerrados 73 00:13:52,320 --> 00:13:52,539 CC por Antarctica Films Argentina