====== Configuración del Software ====== - Abra VSCode desde el directorio de Applications en la unidad flash - Haga clic en el pequeño cuadrado verde en la esquina inferior izquierda de la pantalla.\\ \\ {{ :pibot:challenge1:softwarewin:s1.png |VSCode Pantalla principal}} - Seleccione la opción "Connect Current Window to Host..."\\ \\ {{ :pibot:challenge1:softwarewin:s2.png |VSCode Remote-SSH}} - Escribe "pi@pibot##" y presiona enter\\ \\ Reemplace el texto "pibot##" con la etiqueta en el pibot La contraseña para ingresar cuando se le solicite es "DogsAndCatsAreNice2." sin las comillas. Los '.' al final es importante! Es posible que tarde un par de minutos en instalar algunos archivos en el PiBot. {{ :pibot:challenge1:softwarewin:s3.png |VSCode Conección remota}} - Haga clic en el botón "Open Folder"\\ \\ {{ :pibot:challenge1:softwarewin:s4.png |VSCode Carpeta abierta}} - Seleccione la carpeta "pibot" y haga clic en el botón "OK"\\ \\ {{ :pibot:challenge1:softwarewin:s5.png |VSCode Navegar}} - Seleccione el archivo picar-line-tracking.py en la lista de la izquierda\\ \\ {{ :pibot:challenge1:softwarewin:s6.png |VSCode picar-line-tracking.py}} - Seleccione File->Save As... y guarde el archivo como picar-line-maze.py\\ \\ {{ :pibot:challenge1:softwarewin:s7.png |VSCode picar-line-maze.py}} - Use la información a continuación para cambiar el código para que PiBot resuelva el laberinto - Una vez que se completen los cambios en el código, guárdelo con File->Save ===== Explicación del Software ===== * Lea la presentación que se encuentra [[https://www.pololu.com/file/0J195/line-maze-algorithm.pdf|aquí]] para aprender cómo hacer que un robot resuelva un laberinto.\\ \\ Preste especial atención a la sección sobre Intersección y Manejo de Giros que comienza en la diapositiva 26. * Realice los cambios para manejar todas las decisiones para las intersecciones en el ciclo while al final del archivo * Cree nuevas funciones para cualquier código que necesite usar varias veces y para mantener el código en el ciclo while legible * Use una lista para guardar las decisiones para que PiBot pueda completar el laberinto en el camino más corto la segunda vez a través\\ \\ Para convertir una variable en una lista, asígnele un valor entre corchetes. listvar = [] Para agregar un nuevo valor a una lista, use el método append listvar.append("L") Para eliminar elementos de la lista, use el método pop listvar.pop() # Eliminar el último elemento listvar.pop(0) # Eliminar el primer elemento listvar.pop(1) # Quitar el segundo elemento listvar.pop(-1) # Eliminar el último elemento listvar.pop(-2) # Eliminar el segundo del último elemento Para acceder al valor de un elemento en particular en la lista, coloque el índice del elemento entre corchetes. El índice del primer elemento es '0'. Los números negativos comienzan al final de la lista. myval = listvar[3] # Recupera el cuarto elemento myval = listvar[1] # Recuperar el segundo elemento lastval = listvar[-1] # Recuperar el último elemento almostlastval = listvar[-2] # Recuperar del segundo al último elemento También se puede utilizar una variable como índice. En ese caso, el valor de la variable debe ser un número y se utilizará para determinar el índice del valor que se devuelve de la lista.ivar = 3 ivar2 = ivar + 3 myval = listvar[ivar] # Recupera el cuarto elemento myval2 = listvar[ivar2] # Recupera el séptimo elemento * La lógica para conducir el PiBot a lo largo de la línea debe tomarse lo más rápido posible, pero las decisiones que determinan si está en una intersección deben tomarse más lentamente. * Use un contador de bucles en el bucle while y solo tome decisiones sobre cómo encontrar las intersecciones cada 'n' bucles * Puede haber casos en los que PiBot "verá" una intersección en el medio de la línea donde no hay una mientras conduce por * Imprima información mientras PiBot toma decisiones para ayudar a depurar si las cosas no salen como esperaba * Las ruedas PiBot se colocarán en la línea de salida, por lo que para los sensores se verá como una línea recta por delante. * El PiBot debe detenerse cuando llegue a la caja al final del laberinto. * El programa puede hacer una pausa cuando llega al final del laberinto y esperar a que se presione una tecla para indicarle que comience de nuevo cuando vuelva al comienzo. * Utilice la función "input" para esperar a que se presione una tecla "enter" * Una forma más avanzada de manejar el reinicio es guardar la ruta a un archivo y luego salir cuando llega al final. De esa manera, puede leer el archivo al principio si existe y ejecutar el mismo laberinto incluso después de apagarlo. Consulte [[https://www.geeksforgeeks.org/reading-and-writing-lists-to-a-file-in-python/|este enlace]] para obtener información sobre cómo leer y escribir listas en archivos. * Si desea ser realmente elegante, haga que el programa obtenga el nombre del archivo de un parámetro ingresado cuando se ejecuta para que se puedan guardar múltiples laberintos y volver a ejecutar cuando lo desee\\ \\ Será necesario importar el módulo sys para obtener los parámetros de la línea de comandos. El módulo argparse es útil para facilitar la definición y obtención de parámetros. Google es tu amigo para descubrir cómo implementar esto * Para un desafío adicional, escriba el programa para que el PiBot pueda retroceder por el laberinto en reversa, de un extremo a otro, en lugar de llevarlo hasta el inicio para su segunda ejecución.\\ \\ No solo las decisiones serán en orden inverso, los giros también serán al revés. * Puntos de bonificación si haces que el PiBot haga un "baile feliz" cuando llega al final del laberinto :-)\\ \\ Gran vergüenza será tuya si realiza su "Danza Feliz" antes de llegar al final del laberinto. :-( [[:es:pibot:challenge1#software|Regresar al Desafío 1]]