Archivo del Autor: joanillo

web de Rutas BTT, nueva versión (v4)

Hace años que publico las excursiones con BTT en el subdominio rutesgps.joanillo.org.

Todo empezó con la programación de la API de Google Maps. Más adelante se hizo la migración a OpenStreetMap. Y durante este tiempo he ido añadiendo funcionalidades. También, durante estos años siempre he hecho con los alumnos prácticas de geolocalización, en el marco de la asignatura de Javascript de DAW.

Así que ahora he añadido unas cuantas funcionalidades más: los videos de Relive; los puntos de interés; iconos de inicio y fin de ruta; 3 capas de visualización del terreno; aspectos de diseño; etc. Ahora, cada vez que añada una ruta, tengo un protocolo consistente para no cometer errores.

El pasado otoño me compré un GPS de ciclismo, el Bryton 450E (que está basado en mapas de OpenStreetMaps), y a pesar de sus limitaciones, le estoy sacando el máximo provecho. Y todo este trabajo no tendría ningíun sentido si esto no se tradujese en kilómetros de bicicleta y disfrutar de la naturaleza.

OpenCV: detectar círculos

Una vez ya sabemos detectar las rectas, ahora vamos a la parte de detectar los círculos. OpenCV nos da el círculo de mejor ajuste, con su centro y su radio. Por sólo nos falta aplicar el algoritmo de calcular el error de ajuste, como se explica en el anterior post.

Como fichero de entrada tenemos un CSV con los nombres de los participantes, el nombre del fichero de las rectas, y el nombre del fichero de los círculos. Como salida tenemos el fichero resultados.txt con las puntuaciones obtenidas por cada uno de los participantes.

Así pues, ahora sólo falta llevarlo a la práctica. Espero que sea pronto.

Medir la rodondez de un círculo

Después de resolver el problema de medir la linearidad de una recta, ahora toca medir la redondez de un círculo. En la imagen hay una captura de la solución que hemos implementado.

Hay bastante literatura sobre el tema, pero he preferido buscar la solución por mi cuenta. Dado un círculo, openCV ya nos da el círculo de mejor ajuste, con el centre y el radio. La primera idea es recorrer todos los puntos del círculo y hacer el sumatorio de todas las diferencias entre el punto y el radio. El valor da una buena idea de cómo de bueno es el círculo, en términos absolutos. Pero si ahora escalamos x2 o por x0.5 nuestro círculo, los resultados serán diferentes. Por tanto, no he de buscar un error absoluto, sino un error relativo.

La segunda idea es medir áreas. Concretamente, el cociente entre la diferencia de áreas del círculo dibujado y el círculo aproximado, dividido por el área del círculo. Como se ve en el papel, ahora sí que obtenemos un valor relativo de la rodondez del círculo. Una cosa que hemos de tener en cuenta es que cuando sumamos áreas, hay que coger el valor absoluto de la diferencia, para que no haya cancelaciones.

Cuanto más se aproxima a 0 el valor, más bueno es el círculo. Si el valor lo resto de 1, entonces el círculo perfecto valdrá R=1, y R=0.98 no sería tan bueno. Ahora falta implementarlo en mi programa.

Volvemos a la carga con OpenCV: detectar rectas

Después de un tiempo sin hacer nada con OpenCV, retomamos el proyecto antiguo de la aplicación de las rectas y círculos. Me explico, se trata de hacer un concurso para niños para evaluar si son capaces de hacer rectas y círculos perfectos. El problema es que ahora Maria y Pere ya tienen 14 iy10 anys, quizás ya son un poco mayores para esto. Pero ningún problema, lo haremos igualmente con otros niños más peques que tenemos por aquí.

Continuaré programando en C++, por aquello de programar más rápido, pero soy consciente de que la misma aplicación la podríamos hacer en Python, lenguaje con que he programado bastante últimamente.

Mostramos una captura donde se ve claramente cómo detectamos las rectas, dibujamos la recta de mejor ajuste, y mostramos el valor de la correlación que nos da el valor de como es de buena la recta dibujada. El siguiente paso será hacer los mismo con círculos.

Block (or book) stacking problem

Esta mañana he resuelto el problema de apilar libros (o bloques). Se trata de estudiar bajo qué condiciones puedo apilar bloques (de longitud L) de manera que los vaya desplazando un respecto al anterior, de manera que no caigan. Cuál es la condición límite para que no caigan? Con bloques de longitud L puedo conseguir un desplazamiento de longitud L?

Este problema recuerdo haberme peleado con él (y creo que en su día no lo llegué a solucionar) el verano de 1989 en Bagà, pues el problema estaba enunciado en el Schaum de Mecánica Teórica (Murray R, Spiegel). He buscado el libro (lo he encontrado en pdf en la red, seguro que lo tengo en una estantería), y en la foto se ve el enunciado del libro en la pág 249. NOTA: La figura que enseña el libro está mal y genera confusión: es al revés, el bloque de arriba es el que sobresale la mitad, y los bloques de abajo son los que están más juntos (la figura del llibre tiene un apilamiento claramente inestable, los bloques segur que caen porque el centro de gravedad está fuera del bloque de más abajo).

En aquella época no existía Internet, o sea que uno se peleaba con el problema solo, sin poder pedir ayuda. Ahora lo he resuelto (solito, hay que decirlo, ver el pdf en los enlaces de abajo), y después de resolverlo he buscado información complementaria que he encontrado de lo más interesante (videos de Youtube incluidos), ver los enlaces.

La solución. Todo el sistema de los blocs 1…N-1 que están sobre el bloque N no caen si su centro de masas cae justo en el extremo del bloque N. Se puede resolver de forma iterativa: el bloque 1 se aguanta sobre el bloque 2 si lo ponemos en la mitad, L/2. El sistema bloques 1+2 se aguanta sobre el bloque 3 si el centro de masas de los bloques 1+2 está justo en el extremo del bloque 3. Vamos poniendo bloques, y vamos calculando los centros de masas, y vamos viendo cuál es la condición de equilibrio. Y al final (ver la solución) se encuentra que el centro de masas es una serie armónica:

Xi+1cm = L/2 * (1 + 1/2 + 1/3 + … + 1/i)

Y ahora un poco de matemáticas: la serie armónica es divergente (aunque diverge muy lentamente). Lo que significa que se puede conseguir un desplazamiento teórico tan grande como se quiera (vere el video del enlace, donde se consigue un desplazamiento bastante grande).

Ahora sólo me falta hacer la experiencia con Maria y Pere, a ver si lo podemos hacer este mes. Si lo conseguimos, colgaremos también el video.

Enlaces:

Visualización de rutas GPX con Relive. Bagà-Gréixer-Empedrats

Jordi me ha comentado esta aplicación muy chula para visualizar en 3D las rutas de bici: relive. Quiero mirar en este post si es fácil incrustar el video que se genera de la ruta dentro de una página web como puede ser este bloc. Pues sí, es fácil. El contenedor sencillamente es un iframe como cuando incrusto un video de Youtube. I por otra parte se necesita la URL del video. Esta url se consigue mirando el código fuente de la página de Relive, y buscar por contentURL. Por ejemplo:

itemProp=»contentURL» content=»https://www.relive.cc/view/vXOnEkVyQBv/mp4?x-ref=sc»

y obtengo la url:

https://www.relive.cc/view/vXOnEkVyQBv/mp4?x-ref=sc

El resultado es muy espectacular. En este caso se trata de una excursión que hice eb 2013, y la gracia estaba en bajar en bici por los Empedrats. Como era Semana Santa y bajaba mucha agua del fundido de la nieve, fue una aventura divertida. Imposible bajar en bici por los Empedrats, y tuve que hacer muchos equilibrios para no mojarme.

Recopilación de proyectos Aumentame EDU 2018

En el siguiente enlace se recogen una serie de experiencias educativas relacionadas con la RA y RV. Me ha interesado el concepto de Juego Serio, y he hecho la presentación con la herramienta genial.ly sobre esta experiencia educativa.

Cuando acabe el curso, con un poco de calma, quiero leerme todo este pdf, porque creo que me dará una visión más general sobre las posibilidades de la RA y RV en el aula.

Curs Realitat Virtual a l’Aula. Programació d’una unitat didàctica

Ya estamos acabando el curso de Realidad Virtual en el Aula. He tenido que programar una unidad didáctica para hacerla en clase, y he aprovechado el trabajo que he estado haciendo este trimestre relacionado con la programación con OpenStreetMap.

Mis alumnos de Javascript hacen aplicaciones web. El tema es: se puede considerar una aplicación web como Realitdad Aumentada? Creemos que sí, todo es combinar elementos de realidad virtual con elementos reales, com pueden ser fotos.

He diseñado una programación didáctica que se puede realizar en la UF2 del módulo 06 de DAW (Javascript). Se trata de hacer una aplicación web que, partiendo de la solución del Problema del Viajante de Comercio, sirva para conocer los árboles singulares de Barcelona siguiendo una ruta óptima. Todo esto amenizado con una aplicación web suficientemente atractiva.

50 años

Pues aquí estamos, 50 tacos. I además, el pasado septiembre este blog cumplió 10 años, otra cosa a celebrar. A nadie le interesa, pero da igual, yo sigo escribiendo, yo voy a la mía, y siempre aprendiendo.

Ruta por los árboles singulares de Barcelona (minimizando la distancia)

El problema del viajante de comercio (traveling salesman problem) es un problema clásico de la algorítmica: se trata de pasar por una serie de puntos, sin repetir ninguno, y minimizando la distancia recorrida. Hace unas pocas semanas que importé los árboles singulares de Barcelona a OpenStreetMaps, y creo que es una buena actividad didáctica para conocer los árboles de la ciudad hacer una ruta por unos cuantos de estos árboles.

Para hacerlo más interesante, podemos plantearnos el problema de hacer un recorrido que minimice la distancia, pasando por todos los árboles, y que vuelva al punto de partida. Estuve buscando diferentes implementaciones con Python que resolvieran el problema, hasta que encontré una que satisfacía mi restricción de volver al punto de partida.

Sobre esta solución he hecho alguna modificación para que me genere un fichero JSON con la solución. Finalmente, hemos de pintar sobre un mapa OSM nuestros punts (nodos); trazar una línea recta entre los puntos; y añadir un label-texto informativo sobre estos puntos. El resultado se puede ver en la imagen.

Evidentmente hemos hecho unas simplificaciones: la distancia mínima entre dos puntos es la línea recta, pero por la ciudad no podemos ir en línea recta, y además pueden haber subidas y bajadas. Pero como ejercicio didáctico creo que es interesante.

Aquí en Catalunya son populares las Carreras de Orientación. Creo que se podría aprovechar estas actividades en el tiempo de ocio y añadir una capa de conocimiento, como puede ser conocer los árboles, conocer monumentos, etc. Creo que para los niños y jóvenes puede ser una actividad divertida.

Referencias: