Ich wollte etwas, um Computer Vision zu studieren, also habe ich einen Roboter wie diesen gebaut. Es ist mit dem YouTube-Video verknüpft. Klicken Sie daher auf das Bild. Sie können sehen, wie es funktioniert.
Spezifikationen
Linke und rechte Motoren drehen sich hin und her und links und rechts
5 Roboterarm mit Servo ausgestattet
Eine kleine Kamera mit einem Durchmesser von 8 mm ist an der Spitze des Roboterarms angebracht.
2 Primesense PS1080-Sensor (RGB-D-Kamera), der mit einem Servo schwingt
Hardware-Teil gesteuert von Arduino MEGA 2560
Ausgestattet mit einem kleinen PC (Windows 10) mit Intel Atom-Prozessor läuft der HTTP-Server
Fernsteuerung von Robotern über das HTTP-Protokoll
Steuern Sie diesen Roboter mit Python über WLAN. Dies ist ein Versuch, Kamerabilder, RGB-D-Bilder usw. aufzunehmen, die Bilder zu analysieren und zu verschieben.
Bei der Herstellung des Roboters habe ich einen Roboterstaubsauger wie Rumba als Basis zerlegt und modifiziert und verwendet. Es ist ein preisgünstiger Roboterstaubsauger, der in Nitori verkauft wird. Wenn es so billig ist, ist es in Ordnung, es zu zerlegen und umzubauen. Darüber hinaus befinden sich ein Roboterarm, ein Arduino, eine RGB-D-Kamera und ein kleiner PC mit einem Intel Atom-Prozessor, der die im Roboter installierte Hardware steuert. Arduino verwendet MEGA 2560, weil es eine große Anzahl von Servos steuern möchte. UNO, die ich oft sehe, ist etwas unzureichend, und ich frage mich, ob es angesichts der zukünftigen Expansion herzzerreißend ist. Der kleine PC hat die Modellnummer DG-M01IW und einen Akku, der 13 Stunden hält, obwohl er die Größe eines Taschenbuchs hat. Eingebaut. Es passt am besten zu diesem Roboter, und ich habe zwei davon gekauft.
Die Software auf der Roboterseite ist grob unterteilt in Firmware-ähnliche Software, die auf Arduino installiert ist, und Server-ähnliche Software, die einen HTTP-Server konfiguriert, der auf einem PC installiert ist (Windows 10).
Arduino Arduino braucht auch Kraft. Hierbei wird eine 7,2-V-Batterie verwendet, die für Funksteuerungen im Handel erhältlich ist.
Die Servosteuerung, die den Roboterarm und die RGB-D-Kamera unterstützt, ist die PWM-Steuerung von Arduino. Für den Motor, der zum Bewegen des Roboters verwendet wurde, wurde eine I2C-gesteuerte Motorsteuerung extern angebracht, und eine Schaltung wurde aufgebaut, um den Motor des Roboterstaubsaugers über I2C zu steuern. Dadurch kann sich der Roboter vor und zurück bewegen, nach links und rechts und drehen.
Die serielle Kommunikation mit dem PC wird von UART durchgeführt. Auf der Arduino-Seite haben wir die folgenden Protokolle für die Steuerung und Informationserfassung vorbereitet.
Durch Ausgabe des obigen Protokolls vom PC über die serielle Schnittstelle ist es möglich, das Servo frei zu steuern und Informationen zu erhalten. Wenn Sie beispielsweise "a0 + 90" senden, können Sie das Servo Nr. 0 in einen Winkel von + 90 ° bewegen, oder um "m + 255 + 255" können Sie die sich bewegenden linken und rechten Motoren in Vorwärtsrichtung drehen. Natürlich werden solche Details wie die Servogeschwindigkeitsregelung auf der Arduino-Seite vorgenommen.
PC (DG-M01IW) Der PC verfügt über einen eingebauten Akku, sodass er ohne externen Akku betrieben werden kann. Das Basisbetriebssystem verwendet das vorinstallierte Windows 10 Home so wie es ist. Arduino, RGB-D-Kamera, Kamera an der Spitze des Roboterarms usw. sind über USB angeschlossen. Da Bluetooth und Wi-Fi natürlich integriert sind, ist eine Wi-Fi-basierte Netzwerksteuerung nur mit diesem PC möglich.
Die Kommunikation mit Arduino erfolgt über die serielle UART-Kommunikation. Auf der PC-Seite sind die folgenden Aufgaben die Hauptaufgaben.
Abhängig von der auf der HTTP-Serverseite empfangenen URL wird das Kamerabild zurückgegeben und das Servo über Arduino gesteuert. Geben Sie beispielsweise image / jpeg für eine GET-Anforderung für "http: // .... / sensor / color" oder für eine GET-Anforderung für "http: // .... / arm0? Cmd = ..." zurück Bewegt den Roboterarm gemäß dem Parameter cmd.
Kurz gesagt, es ist die Aufgabe des PCs, die von HTTP empfangene Anforderung zu interpretieren, einen Befehl so wie er ist an Arduino zu senden und die Bild- / Tiefeninformationen zurückzugeben. Dieser PC ist klein genug, um an einem Roboter montiert zu werden, und wird batteriebetrieben. Daher werden keine Berechnungen durchgeführt, die die CPU-Last so weit wie möglich erhöhen. In diesem Bereich denke ich, dass dies eine Aufgabe ist, die auch mit Raspberry Pi erledigt werden kann, aber unerwartet wird das Band um USB zu einem Problem, insbesondere für RGB-D-Kameras ist Raspberry Pi eine schwere Last.
Der HTTP-Server wurde nach vielen Versuchen und Irrtümern in C ++ implementiert. Der Grund ist wie folgt.
Wenn das Betriebssystem auf Linux basiert, wäre es meiner Meinung nach einfacher und schneller, es zu erstellen, selbst wenn es auf C / C ++ basiert. Besonders um HTTP. Es war jedoch ein wenig mühsam, Linux auf einem Mini-PC mit Intel Atom-Prozessor (*) zu installieren. Deshalb habe ich aufgegeben und es basierend auf Windows 10 entwickelt. (Dank dessen war es möglicherweise einfacher, Visual Studio zum Debuggen usw. zu verwenden.)
*: Nur weil ich keine Linux-Distribution finden konnte, die die 32-Bit-Version von EFI boot w unterstützt, wollte ich es hier nicht schwer haben ... dachte ich. Ich wollte unbedingt Ubuntu einbinden.
Bis zu diesem Punkt kann der Roboter vollständig drahtlos über das Wi-Fi-Netzwerk gesteuert werden, und die Seite, die den Roboter durch Bildanalyse steuert, ist nicht an einen Betriebssystemtyp oder eine Sprache gebunden.
Mein Haupt-PC ist Mac Book Air Mid 2012, daher möchte ich auf jeden Fall mit einem Mac dorthin gehen. Also denke ich darüber nach, numpy, OpenCV 2.x, (+ TensorFlow) usw. basierend auf Python zu verwenden. Anfragen ist für HTTP-Beziehungen verfügbar.
Derzeit ist es so, als würde man nach einem roten Objekt suchen und es mit der in Qiita: "Lassen Sie uns rote Objekte mit Python erkennen" beschriebenen Methode verfolgen. Ich baue die Logik auf. Schließlich habe ich vor, es so weit zu bringen, dass ich es autonom mit dem Roboterarm greifen kann.
Ich möchte die Methode zum Clustering von Bildern unter Verwendung der von der RGB-D-Kamera erhaltenen Tiefendaten und der Punktgruppenverarbeitung unter Verwendung der Punktwolkenbibliothek vollständig nutzen. Ich habe verschiedene Logiken dieser Art basierend auf C ++ / Objective-C implementiert, aber ich bin jeden Tag beeindruckt von der zerstörerischen Kraft von Python + Numpy. Ich wünschte, ich wäre früher zu Python + Numpy gewechselt.
Während ich die bisher implementierte Logik auf Python portiere, plane ich von nun an, diese zu nutzen, um die Tiefe der Robotersteuerung zu erhöhen. Ich möchte diese Artikel schreiben, wenn ich einige Ergebnisse erhalte.
Recommended Posts