Conduciendo un servo motor usando cv abierto

2

Estoy trabajando en un proyecto de robot de detección de objetos. Estoy usando un software cv abierto para detectar objetos. Mi pregunta es ¿cómo puedo abrir salidas de cv abiertas (coordenadas x-y) al motor servo? Y ¿cómo puedo conectar puertos de computadora usando cv abierto.

    
pregunta yasitha

2 respuestas

2

Esta pregunta es un poco vaga, pero quizás pueda proporcionarte alguna información que te permita mejorar la calidad de tu publicación.

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

En este punto, ahora necesita controlar su servomotor. Usted podría 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, es muy probable que haya una biblioteca a la que también puede 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, a continuación, deberá implementar su propio protocolo de comunicación RS-232 para enviar comandos a Arduino. El código que se ejecuta en el Arduino luego analizará estos comandos entrantes y luego controlará los motores a través del protector del motor.

Si puede hacer que su pregunta sea más específica, es probable que reciba más ayuda de la gente aquí.

    
respondido por el Dave
0

Estoy de acuerdo en que la pregunta es un poco vaga, pero haré todo lo posible para ayudar. Supongo que puede obtener sus coordenadas x-y bien a través de su código de detección de objetos y, por lo tanto, también supongo 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). Arduino es un buen comienzo fácil para esto, ya que tiene una biblioteca Servo integrada para manejar los servomotores junto con un protocolo de comunicación UART simple.

Como dijo Dave, vas a tener que implementar tu propio protocolo rs232 para enviar los comandos al Arduino (si decides ir por esta ruta). Puede enviar el ángulo en un solo byte (suponiendo que sea de 0 a 180 grados). Incluso podría agregar bytes de inicio y fin solo para un protocolo de comunicación más seguro y robusto. También es posible que desee que Arduino envíe una o varias señales de acuse de recibo (ACK) para determinar si los datos se recibieron correctamente o no.

Ahora, OpenCV no participa 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: enlace

Una vez que haya abierto correctamente el puerto (en general, querrá tener el puerto serie configurado en 8 bits, 1 bit de parada, sin paridad si utiliza 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 hacer que Arduino realice un sondeo de datos desde el lado del host y actualice el ángulo del servo cada vez que se reciben los datos.

    
respondido por el dhsieh2

Lea otras preguntas en las etiquetas