Servomotor de conducción usando cv abierto

Estoy trabajando en un proyecto de robot de detección de objetos. Estoy usando un software de cv abierto para detectar objetos. Mi pregunta es cómo puedo tomar salidas cv abiertas (coordenadas xy) al servomotor. Y cómo puedo conectar los puertos de la computadora usando cv abierto.

Querrá crear un sistema de coordenadas de visión del mundo y luego realizar un seguimiento de los objetos en relación con la posición del robot.

Respuestas (2)

Esta pregunta es un poco vaga, pero tal vez pueda brindarle información que le permita mejorar la calidad de su publicación.

Supongo que tiene la parte de OpenCV funcionando y, de hecho, obtiene los valores de posición X/Y. Si tiene OpenCV funcionando, supongo que también puede vincular sus archivos binarios desde su compilador. Por ejemplo, puede agregar referencias a la compilación .NET de OpenCV (emgucv) en Visual Studio. Su propia aplicación podrá obtener los valores X/Y.

En este punto, ahora necesita controlar su servomotor. Puede interactuar con él de varias maneras. Una forma es obtener un controlador / controlador de servomotor dedicado que se comunique con su PC a través de una variedad de formatos físicos: RS232, CAN, USB, Ethernet, Ethercat, son algunos ejemplos. Si tiene uno de estos, lo más probable es que haya una biblioteca a la que también pueda vincular su aplicación para controlar el motor.

Otra opción es usar un Arduino, un protector de motor adecuado, y luego conectar su Arduino a su PC a través de la conexión USB. Esto se convierte en un puerto COM virtual y luego deberá implementar su propio protocolo de comunicación RS-232 para enviar comandos al Arduino. El código que se ejecuta en Arduino analizaría estos comandos entrantes y luego controlaría los motores a través del escudo del motor.

Si puede hacer que su pregunta sea más específica, es probable que obtenga aún más ayuda de las personas aquí.

Estoy de acuerdo en que la pregunta es un poco vaga, pero haré todo lo posible para ayudar. Supongo que puede obtener sus coordenadas xy muy bien a través de su código de detección de objetos y, por lo tanto, también asumo que puede determinar el ángulo en el que desea su servomotor. Creo que la forma más fácil es hacer que su PC se comunique con un procesador separado (microcontrolador, FPGA) a través de algún tipo de protocolo de comunicación a través de los puertos de su PC (rs232, USB, puerto paralelo). El Arduino es un buen comienzo fácil para esto, ya que tiene una biblioteca Servo incorporada para impulsar motores servo junto con un protocolo de comunicación UART simple.

Como dijo Dave, tendrá que implementar su propio protocolo rs232 para enviar los comandos al Arduino (si elige seguir esta ruta). Puede enviar el ángulo en solo un byte (suponiendo de 0 a 180 grados). Incluso podría agregar bytes de inicio y finalización solo para un protocolo de comunicación más seguro y sólido. También es posible que desee que Arduino envíe señales de reconocimiento (ACK) para determinar si los datos se recibieron correctamente o no.

Ahora, OpenCV no juega ningún papel en el uso de los puertos de comunicación en su PC. Puede acceder al puerto serie (o cualquier puerto) con Visual Studios. Aquí hay un buen tutorial: http://msdn.microsoft.com/en-us/library/ff802693.aspx

Una vez que haya abierto el puerto correctamente (generalmente, querrá tener el puerto serie configurado en 8 bits, 1 bit de parada, sin paridad si usa Arduino), la comunicación es bastante simple. Básicamente, necesita cargar los datos que desea enviar en un búfer de caracteres y luego usar el método WriteFile() para enviar ese búfer. El método incluso puede decirle cuántos bytes se escribieron si desea asegurarse de que el extremo del host haya enviado los datos correctamente. El método ReadFile() funciona de manera muy similar. Puede tener el sondeo de Arduino para obtener datos desde el lado del host y actualizar el ángulo del servo cada vez que se reciben datos.