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?
Respuestas:
Primero, dado que los steppers son excelentes para el posicionamiento (no hay necesidad de una retroalimentación de posición), ciertamente debes limitar su movimiento como lo has dicho tú mismo. No estoy seguro de cómo está diseñado el eje del motor en este momento, pero si se fija al motor, dejar que siga girando podría dañar el equipo.
A continuación, el retraso de transporte de 200 ms en su sensor probablemente será demasiado lento, de lo contrario, deberá reducir la velocidad mucho para reducir la velocidad de la bola. De manera similar a lo que dijo el cirujano de cohetes , debe simplificar el algoritmo de procesamiento de imágenes para calcular la ruta solo una vez y luego calcular rápidamente solo la posición de la pelota en cada cuadro. Si desea omitir este paso rápidamente, busque una bola roja en lugar de esta, y luego verifique solo el componente rojo en su imagen RGB, hasta que encuentre un algoritmo mejor.
Para el control PID, comience con el hecho de que realmente necesita dos controladores PID separados, uno para el motor este-oeste y el otro para el norte-sur. Si tiene dos motores exactos, sus parámetros deben ser iguales.
Para que un controlador PID actúe, necesita conocer el error : diferencia entre la posición deseada y la posición real de la pelota. Los componentes X e Y de este desplazamiento serán las entradas para dos controladores PID (uno para cada motor). Para obtener el error, primero debe tener la posición deseada en su camino: una trayectoria .
Para obtener la trayectoria, debe procesar la imagen y obtener la ruta , así como su punto de inicio y finalización. No estoy seguro de si su algoritmo es capaz de distinguir la ruta del resto del tablero en este momento, pero si no, tenga en cuenta que este es un algoritmo propio para manejar antes de continuar. Nuevamente, puede omitir esta parte ingresando manualmente los puntos de unión, si está ansioso por ver algunos resultados rápidamente. En cualquier caso, debe poder definir la velocidad del punto de ajuste y hacer que su software mueva la posición de coordenadas deseada sobre la ruta, desde el principio hasta el final. Obviamente, comenzará con una velocidad baja deseada.
Entonces, antes de comenzar con el control, primero debe revisar la siguiente lista de verificación:
Puede resultar que es mejor crear la trayectoria un segmento a la vez , y continuar con el siguiente segmento cuando esa bola termina el anterior. De lo contrario, deberá asegurarse de que la pelota no sobrepase la trayectoria deseada (que puede ser difícil de lograr)
fuente
Si tiene una posición fija para la cámara y una lectura momentánea para ambos ejes, entonces no necesita reconocer el camino pintado, los agujeros y las paredes en los marcos. Se puede hacer de una sola vez durante el tiempo de configuración. En tiempo de ejecución, es posible que solo necesite detectar la ubicación exacta de la única bola de metal brillante.
Para detectar la bola, puede usar 1 LED IR fijo y filtro de banda estrecha en la cámara. El algoritmo debe calcular el píxel más brillante y traducir X, Y a X, Y real teniendo en cuenta pasos como:
No debe ser computacionalmente intensivo y depende principalmente de un par de valores absolutos.
Normalmente, una CPU pequeña debería hacerlo con el ritmo de la velocidad de fotogramas.
fuente