Estoy construyendo un laberinto automático de laberintos y utilizando una cámara web para controlar mi laberinto.
Basado en sugerencias en otros foros, estoy tratando de controlar el movimiento de la bola del laberinto al menos en una dirección en este momento. Entonces, estoy tratando de controlar el movimiento de mi bola entre dos coordenadas 466,288 y 466,152. La entrada a la placa del controlador del motor paso a paso es el tiempo, no hay pasos para rotar para cada eje, es decir, x e y.
La placa del controlador del motor paso a paso que estoy usando es la placa del controlador del motor paso a paso del huevo: enlace
Entonces, para moverme entre dos puntos, ¿debo crear una cantidad de puntos intermedios entre los dos puntos, es decir, 288 y 152 (digamos 260 240 230 ... 150) y corregir el movimiento de mi bola?
Mi algoritmo de procesamiento de imágenes no es lo suficientemente rápido para rastrear la bola que la bola simplemente giraría y caería en un agujero.
Algunos sugirieron que usara una plantilla estándar como se muestra en el siguiente video y corrija los movimientos de mi bola por la desviación en el camino:
También encontré una herramienta de procesamiento de imágenes en la que resolvieron el mismo problema utilizando puntos de paso para el movimiento de la bola. Al ver demasiadas soluciones para el mismo problema, estoy totalmente confundido en resolver el problema. Soy consciente de que debo implementar un controlador PID. Pero, ¿cómo debo solucionar los problemas en etapas? Estoy atascado y solo frustrado por encontrar una ventaja en la solución del problema.
Mi configuración se ve así:
...yaquíhayunacapturadepantallademisoftware:
Revisión 2: También estoy enfrentando un nuevo problema ahora: Anteriormente, controlaba los motores paso a paso a través del subprograma Java del puerto serie Arduino. Soy capaz de conducir los steppers utilizando el applet.
Tengo que restablecer la placa cada vez que intento comunicarme a través del puerto serie. Además, el motor paso a paso se energiza en pequeños intervalos cuando no se le envía ningún comando. Cuando el motor paso a paso entra en este modo, no puedo controlar mi placa sin reiniciarla. Cualquier ayuda sería apreciada.
Revisión 3:
Hice algunos progresos donde obtuve el algoritmo PID implementado. Por favor encuentre el video a continuación: enlace
Ahora tengo un problema con la velocidad a la que se implementa el algoritmo PID. En realidad, mi procesamiento de imágenes finaliza un ciclo en 200 ms, identifica una bola y envía los comandos a la placa del controlador del motor paso a paso. Aunque a mi puerto serie se le envían comandos para cambiar de dirección, mi stepper sigue girando en la misma dirección. Puedes encontrar el comportamiento extraño en el video de arriba.
Mi idea es que debería restringir los valores PID con un límite máximo donde, si el valor PID calculado es mayor que 100, debería enviar un 100. Espero escuchar sus comentarios sobre esto.
La forma en que implementé el controlador PID es que identifiqué el punto de inicio de la plantilla usando el algoritmo de coincidencia de plantillas e identificé la bola usando otro algoritmo de coincidencia de plantillas. Ahora, hice que la bola se moviera al centroide de la plantilla del punto de inicio. ¿Cómo puedo hacer que siga la línea recta con el algoritmo PID?
Revisión 4:
He aislado la trayectoria pero no puedo encontrar la función correcta para imprimir las coordenadas de píxeles correctas desde el punto de inicio. ¿Algún pensamiento?