Antreiben des Servomotors mit offenem cv

Ich arbeite an einem Objekterkennungsroboterprojekt. Ich verwende Open-CV-Software, um Objekte zu erkennen. Meine Frage ist, wie ich offene CV-Ausgänge (XY-Koordinaten) zum Servomotor bringen kann. Und wie kann ich Computerports mit Open CV verbinden.

Sie möchten ein Weltansicht-Koordinatensystem erstellen und dann Objekte relativ zur Position des Roboters verfolgen.

Antworten (2)

Diese Frage ist etwas vage, aber vielleicht kann ich Ihnen einige Informationen geben, mit denen Sie die Qualität Ihres Beitrags verbessern können.

Ich gehe davon aus, dass der OpenCV-Teil funktioniert und Sie tatsächlich X/Y-Positionswerte erhalten. Wenn Sie OpenCV haben, dann gehe ich davon aus, dass Sie auch von Ihrem Compiler aus auf seine Binärdateien verlinken können. Beispielsweise können Sie in Visual Studio Verweise auf den .NET-Build von OpenCV (emgucv) hinzufügen. Ihre eigene App kann dann die X/Y-Werte abrufen.

An dieser Stelle müssen Sie nun Ihren Servomotor steuern. Sie können auf verschiedene Weise damit interagieren. Eine Möglichkeit besteht darin, einen dedizierten Servomotortreiber / Controller zu erhalten, der mit Ihrem PC über eine Vielzahl physikalischer Formate kommuniziert – RS232, CAN, USB, Ethernet, Ethercat, sind einige Beispiele. Wenn Sie eine davon haben, gibt es höchstwahrscheinlich eine Bibliothek, mit der Sie auch Ihre Anwendung verknüpfen können, um den Motor zu steuern.

Eine andere Möglichkeit besteht darin, ein Arduino, ein geeignetes Motorschild, zu verwenden und dann Ihr Arduino über die USB-Verbindung mit Ihrem PC zu verbinden. Dies wird zu einem virtuellen COM-Port und Sie müssen dann Ihr eigenes RS-232-Kommunikationsprotokoll implementieren, um Befehle an den Arduino zu senden. Der auf dem Arduino laufende Code würde dann diese eingehenden Befehle analysieren und dann die Motoren über das Motorschild steuern.

Wenn Sie Ihre Frage konkretisieren können, erhalten Sie wahrscheinlich noch mehr Hilfe von den Leuten hier.

Ich stimme zu, dass die Frage etwas vage ist, aber ich werde mein Bestes geben, um zu helfen. Ich gehe davon aus, dass Sie Ihre xy-Koordinaten problemlos über Ihren Objekterkennungscode erhalten können, und gehe daher auch davon aus, dass Sie den Winkel bestimmen können, in dem Sie Ihren Servomotor haben möchten. Ich denke, der einfachste Weg besteht darin, Ihren PC dazu zu bringen, über eine Art Kommunikationsprotokoll über Ihre PC-Ports (rs232, USB, Parallelport) mit einem separaten Prozessor (Mikrocontroller, FPGA) zu kommunizieren. Der Arduino ist ein netter einfacher Anfang dafür, da er eine eingebaute Servobibliothek hat, um Servomotoren zusammen mit einem einfachen UART-Kommunikationsprotokoll anzutreiben.

Wie Dave sagte, müssen Sie Ihr eigenes RS232-Protokoll implementieren, um die Befehle an den Arduino zu senden (wenn Sie sich für diesen Weg entscheiden). Sie könnten den Winkel in nur einem Byte senden (unter der Annahme von 0 bis 180 Grad). Sie könnten sogar Start- und Endbytes hinzufügen, nur um ein sichereres, robusteres Kommunikationsprotokoll zu erhalten. Möglicherweise möchten Sie auch, dass der Arduino Bestätigungssignale (ACK) zurücksendet, um festzustellen, ob die Daten ordnungsgemäß empfangen wurden oder nicht.

Jetzt spielt OpenCV keine Rolle bei der Verwendung der Comm-Ports auf Ihrem PC. Sie können mit Visual Studios auf den seriellen Anschluss (oder einen beliebigen Anschluss) zugreifen. Hier ist ein gutes Tutorial: http://msdn.microsoft.com/en-us/library/ff802693.aspx

Sobald Sie den Port korrekt geöffnet haben (im Allgemeinen sollten Sie den seriellen Port auf 8 Bit, 1 Stoppbit, keine Parität einstellen, wenn Sie den Arduino verwenden), ist die Kommunikation recht einfach. Grundsätzlich müssen Sie die Daten, die Sie senden möchten, in einen Zeichenpuffer laden und dann die Methode WriteFile() verwenden, um diesen Puffer zu senden. Die Methode kann Ihnen sogar mitteilen, wie viele Bytes geschrieben wurden, wenn Sie sicherstellen möchten, dass der Host die Daten korrekt gesendet hat. Die Methode ReadFile() funktioniert sehr ähnlich. Sie können den Arduino Daten von der Hostseite abrufen lassen und den Servowinkel aktualisieren, wenn Daten empfangen werden.