==== Robótica Móvil Enero-Junio 2019 === == Calificaciones Finales Licenciatura == [[https://ugtomx-my.sharepoint.com/:x:/g/personal/jpi_ramirez_ugto_mx/EfvG4ypWGNtMr9tXpjJRV7gB-B_ZMdBgY78wVWcMi4iIOA?e=vHqZWR| Hoja de Excel con calificaciones finales por NUA]] [[https://www.dropbox.com/s/hejkjy0mpgf8gb5/RoboticaMovilMIE.pdf?dl=0|Temario y criterios de evaluación (Maestría)]] [[https://www.dropbox.com/s/1je2w0u2zvfd528/RoboticaMovil.pdf?dl=0|Temario y criterios de evaluación (Licenciatura)]] === Proyecto de Implementación (Licenciatura) === Entrega: 7 de junio de 2019, 14:00hrs Laboratorio de Electrónica DICIS. Enlace para entregar el reporte en formato PDF: https://www.dropbox.com/request/MyNP9eopgbSMeqFb6ZP4 [{{ :img_20190607_144537.jpg?400 | Algunos proyectos del semestre Enero-Junio 2019}}] == Descripción del proyecto == Básico: Navegación reactiva con la combinación de dos algoritmos: * Evasión de obstáculos utilizando sensor(es) ultrasónico(s) * Seguimiento de fuente de luz utilizando la diferencia de intensidades en 2 sensores Avanzado: ”Dead reckoning” y creación de mapa (rejilla de ocupación) Visualización de la rejilla de ocupación === Proyecto de Simulación (Licenciatura) === Entrega: 17 de mayo de 2019. Enviar un archivo PDF con el reporte, y un comprimido con todo el código fuente y archivos auxiliares necesarios a través del enlace https://www.dropbox.com/request/A7fhsfgv4VJQHtrLT3Mz /* === Tarea 1 (Licenciatura) === Entrega: 12 de marzo antes de las 23:59. * Implementación del algoritmo “bug” para buscar fuentes, con el robot Pioneer p3dx. * La ubicación de la fuente se definirá en las variables xf, yf dentro de su código. * Utilizar los sensores ultrasónicos para rodear los obstáculos en el camino del robot. * Un programa en Python por equipo. * El programa será probado por el profesor en un escenario de 15x15m2 en V-REP, sin mostrárselo a los estudiantes. Enviar un archivo .py por equipo, con el nombre NombreequipoTarea1.py a [[https://www.dropbox.com/request/IvqHqt1RYEsyCKE9DAZd|este enlace]]. */ === Tarea 1 (Licenciatura) === [[https://www.dropbox.com/s/719l1scqvh7zo4g/LicTarea1.xlsx?dl=0|Calificaciones por equipo]] (Es un libro de Excel, una calificación por cada hoja o pestaña) === Tarea 2 (Licenciatura) === [[https://www.dropbox.com/s/5u9lh1mzahw04lf/LicTarea2.xlsx?dl=0|Calificaciones por equipo]] (Es un libro de Excel, una calificación por cada hoja o pestaña) === Tarea 3 (Licenciatura) === [[https://www.dropbox.com/s/1qoclze7q37rbvv/LicTarea3.xlsx?dl=0|Calificaciones por equipo]] (Es un libro de Excel, una calificación por cada hoja o pestaña) /* === Tarea 2 (Licenciatura) === Entrega: 29 de marzo antes de las 23:59. * Implementación del algoritmo “bug” para buscar fuentes, con el robot Pioneer p3dx. * La ubicación de la fuente se definirá en las variables xf, yf dentro de su código. * Utilizar los sensores ultrasónicos para rodear los obstáculos en el camino del robot. * Crear una rejilla de ocupación con resolución de 0.25x0.25m^2 por celda que cubra todo un escenario de 10x10m^2. * Utilizar los sensores ultrasónicos para actualizar el contenido de las celdas de la rejilla de ocupación, mientras el robot intenta llegar a su destino. * Un programa en Python por //equipo//. * El programa será probado por el profesor en un escenario de 10x10m2 en V-REP, sin mostrárselo a los estudiantes. Enviar un archivo .py por equipo, con el nombre NombreEquipoTarea2.py a [[https://www.dropbox.com/request/YM4AjesCqq6dIWAAwVsc|este enlace]]. */ /* === Tarea 3 (Licenciatura) === Entrega: 12 de abril antes de las 23:59. * Se utilizará un robot Pioneer p3dx en V-REP. * El programa debe cargar un mapa en forma de rejilla de ocupación, y enviar a un robot desde su ubicación inicial en una simulación de V-REP hasta un destino especificado por el usuario. * El mapa a cargar será una rejilla de ocupación con resolución de 0.25x0.25m^2 por celda que cubra todo un escenario de 15x15m^2. * El mapa que se utilizará para evaluar su programaserá creado por el profesor con el comando savetxt, del módulo numpy, con el nombre "map.txt". * La ubicación del destino se definirá en las variables xf, yf dentro de su código. Esta ubicación estará dada en metros, dentro del mundo de la simulación. * Es importante que el robot NO colisione con los obstáculos, se le dará un peso especial a este aspecto en la calificación. * Si se especifica una ubicación de destino que se encuentre dentro de un obstáculo, que esté demasiado cerca de un obstáculo o si no existe una ruta entre origen y destino, el programa debe reportarlo y no enviar al robot. * Se considerarán la longitud de la ruta creada y la distancia recorrida por el robot como aspectos a evaluar. Longitudes de ruta mayores a la más corta se penalizarán, también ejecuciones de trayectoria inexactas por parte del robot. * Un programa en Python por //equipo//. * El programa será probado por el profesor en un escenario de 15x15m2 en V-REP, sin mostrárselo a los estudiantes. * Si su programa requiere ser dividido en varios archivos de Python, dele el nombre de main.py al archivo principal. Enviar un archivo .zip por equipo que contenga todas las partes de su programa, con el nombre NombreEquipoTarea3.zip a [[https://www.dropbox.com/request/JkUqmtOYGKUGe1qukd3t|este enlace]]. */ /* === Tarea 1 (Maestría) === Entrega: 11 de marzo antes de las 23:59. * Implementación del algoritmo “bug” para buscar fuentes, con el robot Pioneer p3dx. * La ubicación de la fuente se definirá en las variables xf, yf dentro de su código. * Utilizar los sensores ultrasónicos para rodear los obstáculos en el camino del robot. * A partir de los v(t) y omega(t) calculados para mover el robot, graficar x(t), y(t) y theta(t) (integración simple de 1er orden). Asuma que x(0), y(0), theta(0) son cero. Puede usar numpy y matplotlib para crear las gráficas. * Un programa en Python por //persona//. * El programa será probado por el profesor en un escenario de 15x15m2 en V-REP, sin mostrárselo a los estudiantes. Enviar un archivo .py por equipo, con el nombre ApellidosNombresTarea1.py a [[https://www.dropbox.com/request/NQcP9bqlu3kc5NGTu5hh|este enlace]]. */ === Tarea 1 (Maestría) === [[https://www.dropbox.com/s/hsmay9n6fzjbvpm/MIETarea1.xlsx?dl=0|Calificaciones por NUA]] (Es un libro de Excel, una calificación por cada hoja o pestaña) === Tarea 2 (Maestría) === [[https://www.dropbox.com/s/yajo57t8f3r5d2a/MIETarea2.xlsx?dl=0|Calificaciones por NUA]] (Es un libro de Excel, una calificación por cada hoja o pestaña) /* === Tarea 2 (Maestría) === Entrega: 25 de marzo antes de las 23:59. * Implementación del algoritmo “bug” para buscar fuentes, con el robot Pioneer p3dx. * La ubicación de la fuente se definirá en las variables xf, yf dentro de su código. * Utilizar los sensores ultrasónicos para rodear los obstáculos en el camino del robot. * Crear una rejilla de ocupación (probabilística) con resolución de 0.25x0.25m^2 por celda que cubra todo un escenario de 10x10m^2. * Utilizar los sensores ultrasónicos para actualizar el contenido de las celdas de la rejilla de ocupación, mientras el robot intenta llegar a su destino. Asuma un modelo de sensor con probabilidad de falso positivo de 0.01 en todo el rango de 0 a 1m, y falso negativo también de 0.01. En caso de detección, no agregue ruido a la medición. * Utilizando matplotlib, pygame o cualquier otra alternativa disponible en la distribución Anaconda, cree una visualización de la rejilla de ocupación, preferentemente en (casi) tiempo real. * Un programa en Python por //persona//. * El programa será probado por el profesor en un escenario de 10x10m2 en V-REP, sin mostrárselo a los estudiantes. Enviar un archivo .py por equipo, con el nombre ApellidosNombresTarea2.py a [[https://www.dropbox.com/request/LkBV2KhaydRSzwAnZcZ0|este enlace]]. */ /* === Proyecto Final (Maestría) === * Crear un mundo de 15x15m2 de manera programática, con muros perimetrales (fuera del área de 15x15) y obstáculos cilíndricos. * Generar un roadmap probabilístico para cubrir el espacio de configuración libre. * Implementar una búsqueda en grafo para hallar una ruta entre cualquier configuración inicial y meta. * Enviar a un robot Pioneer 3dx sin colisionar, desde su qInicial a su qMeta. * Mientras el robot viaja de qInicial a qMeta, generar una rejilla de ocupación de 60x60 y desplegarla al final del recorrido. Además, almacenarla en formato de texto con la función numpy.savetxt(). * Los obstáculos serán especificados por el usuario en un archivo de texto, una línea por obstáculo, separando con espacios: posx posy radio. * El programa debe, al final, graficar el espacio de configuración y el roadmap generado (dibujar los nodos y aristas del grafo). * Para la entrega, debe enviar el código en Python y un reporte en PDF a https://www.dropbox.com/request/Yt0KWnhXD2cW47IWYGQQ (realizar un envío por archivo). * Fecha de entrega: 12 de abril de 2019, límite a las 23:59hrs. */ === Calificaciones Proyecto Final (Maestría) === https://www.dropbox.com/s/pmu0pp7iu8za3mv/MIEProyFinal.xlsx?dl=0 === Información útil para el curso === Herramientas de robótica, visión y control de Peter Corke [[http://petercorke.com/wordpress/toolboxes/robotics-toolbox|RVC toolbox]] * Simulador V-REP (utilizar la edición pro EDU para el curso) [[http://www.coppeliarobotics.com/downloads.html|V-REP]] * [[http://www.coppeliarobotics.com/helpFiles/en/remoteApiFunctionsPython.htm#simxGetObjectPosition|API remota para Python de V-REP]] * [[http://www.coppeliarobotics.com/helpFiles/en/remoteApiConstants.htm#operationModes| Constantes para la API remota de V-REP ]] Distribución de Python Anaconda [[https://www.anaconda.com/download|Anaconda]] Repositorio con muestras del código del curso [[https://github.com/jpiramirez/roboticamovil|GitHub RoboticaMovil]] Proveedor de un kit útil para el curso [[https://www.laboratorioescolar.com/CARRITO-EVASOR-DE-OBSTACULOS-CON-ARDUINO-UNO,11949_1496845219|LABESA]] Nota: no es obligatorio adquirir los materiales con este proveedor, solo es una opción conveniente y a precio razonable. Para el análisis de estabilidad de un controlador de robots con propulsión diferencial, revisar: M. Aicardi, G. Casalino, A. Bicchi and A. Balestrino, "Closed loop steering of unicycle like vehicles via Lyapunov techniques," in //IEEE Robotics & Automation Magazine//, vol. 2, no. 1, pp. 27-35, March 1995. doi: 10.1109/100.388294 Para exploración con robot terrestre, revisar: https://www.dropbox.com/s/3wanjixn6jj69al/yamauchi.pdf?dl=0 Algoritmo de Dijkstra interactivo https://www-m9.ma.tum.de/graph-algorithms/spp-dijkstra/index_en.html Algoritmo A* interactivo https://www-m9.ma.tum.de/graph-algorithms/spp-a-star/index_en.html