Estoy construyendo un solucionador automático de laberintos de laberintos y estoy usando 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 pelota 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 controladora del motor paso a paso que estoy usando es la placa controladora del motor paso a paso egg bot: http://www.sparkfun.com/products/10025
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 pelota?
Mi algoritmo de procesamiento de imágenes no es lo suficientemente rápido como para seguir la bola que la bola simplemente giraría y caería en un agujero.
Algunos sugirieron que use una plantilla estándar como se muestra en el siguiente video y corrija los movimientos de mi bola para la desviación en el camino:
http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded
También me encontré con una herramienta de procesamiento de imágenes donde resolvieron el mismo problema utilizando puntos de paso para el movimiento de la pelota. Al ver demasiadas soluciones al mismo problema, estoy totalmente confundido al resolver el problema. Soy consciente de que debería implementar un controlador PID. Pero, ¿cómo debo resolver los problemas por etapas? Estoy atascado y frustrado al encontrar una ventaja inicial para resolver el problema.
Mi configuración se ve así:
... y aquí hay una captura de pantalla de mi software:
Revisión 2: Ahora también me enfrento a un nuevo problema: antes controlaba los motores paso a paso a través del applet Java de puerto serie Arduino. Puedo conducir los steppers usando 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 conseguí implementar el algoritmo PID. Encuentre el video a continuación: http://www.youtube.com/watch?v=MEfp7RqPmqY
Ahora tengo un problema con la velocidad a la que se implementa el algoritmo PID. En realidad, el procesamiento de mi imagen finaliza un ciclo en 200 ms, identifica una bola y envía los comandos a la placa controladora del motor paso a paso. Aunque mi puerto serie recibe 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 de PID con un límite máximo en el que si el valor de PID calculado es mayor que 100, debería enviar un 100. Espero escuchar sus opiniones sobre esto.
La forma en que implementé el controlador PID es que identifiqué el punto de partida de la plantilla usando el algoritmo de coincidencia de plantilla e identifiqué la pelota usando otro algoritmo de coincidencia de plantilla. Ahora, hice que la pelota se moviera al centroide de la plantilla de punto de partida. ¿Cómo hago 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íxel correctas desde el punto de partida. ¿Alguna idea?