Estimado Dr. Zoiberg, me resulta curioso que después de decir que "no sabe cómo lo haría", ahora aporte una solución como obvia, pero que es secuencial, siendo un mecanismo de barrido. Por usar un algoritmo en pseudocódigo para su solución y comprobar si he entendido bien:
- Mientras haya piezas que deben actualizar su posición:
- Activar el servo encargado del movimiento en X hasta la posición indicada por el controlador
- Activar el servo encargado del movimiento en Y hasta la posición indicada por el controlador
- Activar el servo que empuja el cabezal para desplazar en Z la pieza escogida una cantidad indicada por el controlador
- Activar el servo que empuja el cabezal para devolver el cabeza a una posición que no colisione con el resto de piezas
- Fin mientras
La pieza que usted recomienda tiene unas dimensiones de 18.5 x 13.2 x 6.9 cm. Una velocidad estimada para un cabezal de impresora es de 20 mm/s.
Ahora se me plantean dos alternativas:
- El cabezal actualiza todas las piezas en cada vuelta (el desplazamiento por pin es menor, pero se mueven todos los pines)
- El cabezal actualiza sólo las piezas que necesitan modificar su altura
Voy a considerar la opción 2) y estimar que el desplazamiento de una pieza a la siguiente es, en media, la mitad de la distancia máxima del juguete, a saber: 9.75 en el eje X, 6.6 en el eje Y y 3.45 en el eje Z. En mm: 97.5, 66, 34.5 milímetros de desplazamiento por cada pieza (eje Z x2 porque recordemos que el cabezal debe subir y bajar para no colisionar con las piezas y poder moverse a la siguiente) , lo que supondría unos 11.62 segundos en colocar cada pieza pensando en que no hay aceleración ni deceleración, suponiendo 200 piezas actualizadas = 2324 segundos =
casi 39 minutos en "cargar" una imagen.
Por poner un caso más beneficioso para su planteamiento, digamos que paralelizamos 1) y 2) y el eje X y el eje Y se desplazan simultáneamente, por tanto, nos quedamos con el desplazamiento superior que es el que establece el umbral, pensando que cuando termina el desplazamiento en X, en Y ya está colocado. Los nuevos números serían: 97.5 mm + 34.5 mm+ 34.5 mm = 8.33 segundos estimados en mover cada pieza. Si ahora multiplicamos por un número reducido de piezas que deben ser actualizadas, digamos 200, tendríamos 1665 segundos para una actualización, lo que suponen
casi 28 minutos en "cargar" una imagen.
Efectivamente, se podrían programar algoritmos de búsqueda de rutas más eficientes (problema del viajante, que es de tipo NP-duro con solución O(m log
n) considerando métricas heurísticas). Pensando benevolentemente que usted también ha considerado esto en su respuesta, y aplicando optimizaciones, soluciones no exactas y consideraciones de adyacencia que hacen más rápido resolver el problema aunque quizás la ruta no fuera la mejor existente, pero sí una de las mejores, podemos decir que m = 0.814, pensando que n es el tiempo que lleva el desplazamiento en el plano XY (97.5 mm) pero no afecta a los desplazamientos en Z (34.5 x 2 mm), tendríamos un tiempo de 0.814 log 4.87 + 3.45 = 4 segundos por pieza. En actualizar 200 piezas (de nuevo un caso favorable para su planteamiento), hablaríamos de 800 segundos =
13.3 minutos para cargar una imagen.
Es cierto que hay asunciones, imprecisiones matemáticas y simplificaciones del problema empleando medias, etc., pero valga el ejemplo para hacernos una idea de los órdenes de tiempo que estamos manejando. Ahora hagamos un ejercicio de imaginación y pongamos un caso negativo, donde hubiera que actualizar decenas o cientos de miles de piezas. Creo que esta propuesta está bien como salvapantallas o como lámpara de lava, si me permite.
Además, para que su solución funcione, entiendo que hay que imantar los pines y añadir un electro-imán al cabezal (activable y desactivable), puesto que sin imanes, podemos "empujar" una pieza, pero ¿cómo "tiramos" de ella? ¿duplicamos el sistema para que empuje desde arriba o desde abajo? (descartado por el tema táctil) ¿se programa una pinza, un mecanismo de succión o lo que sea, con el inherente problema de tolerancia a precisión del cabezal, que se desajusta?. Entiendo que la solución más fácil es de nuevo con imanes. Si tenemos un imán, ¿no es más fácil y rápido desplazarlo en un campo magnético inducido por una bobina? ¿Se le ocurre alguna otra alternativa? ¿Por qué le parece mal a usted la solución de las bobinas impresas? ¿Qué problema hay con imprimir la parte mecánica en 3D para no tener que montar todas las piezas manualmente?
Temo que su solución no cumple con lo que se está hablando en el hilo, sería lenta y poco eficiente. Si la he entendido bien con mi limitado pensamiento computacional, aumenta además de manera muy significativa el peso del dispositivo y su portabilidad. Espero que mi respuesta haya sido suficientemente detallada, a pesar de mis limitaciones. Leyendo su firma, parece que usted hace afirmaciones bastante seguras y no deja de ser paradójico que luego lleve por bandera esa frase. A mí también me gustan las citas y empleo de vez en cuando una en mis ponencias y conferencias: George Bernard Shaw - “The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man.” -
Sea como fuere, estoy invirtiendo demasiado tiempo aquí y parece que las discusiones del foro no están alcanzando un punto que me sea de utilidad, yendo más bien hacia otros derroteros en los que no me interesa entrar. Por tanto, no voy a seguir respondiendo ni leyendo este hilo.
Gracias por vuestros comentarios constructivos y el tiempo dedicado a entender e intentar aportar partes de la solución.