Roboter läuft mit Arduino und Python

Ich habe so einen Roboter gemacht

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.

https://www.youtube.com/watch?v=hIaIxOBjJzQ

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.

Details zur Roboterseite

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.

Bildanalyselogik

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

Roboter läuft mit Arduino und Python
Versuchen Sie, Google Chrome mit Python und Selenium auszuführen
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Versuchen Sie, Python mit Try Jupyter auszuführen
Python mit Pyenv und Venv
Funktioniert mit Python und R.
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Leuchtendes Leben mit Python und OpenCV
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Scraping mit Node, Ruby und Python
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
[Maschinelles Lernen] Versuchen Sie, Spark MLlib mit Python auszuführen, und geben Sie Empfehlungen ab
IME On / Off wird in Zusammenarbeit mit Python und Arduino durch LED angezeigt
Bedienbarkeit von Arm und mobilem Roboter Ellipse mit Python zeichnen
Kommunizieren Sie mit gRPC zwischen Elixir und Python
Datenpipeline-Aufbau mit Python und Luigi
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
Überwachen Sie Mojo-Ausfälle mit Python und Skype
FM-Modulation und Demodulation mit Python Part 3
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Passwortlose Authentifizierung mit RDS und IAM (Python)
Python-Installation und Paketverwaltung mit pip
Verwenden von Python und MeCab mit Azure Databricks
POST verschieden mit Python und empfange mit Flask
Bilder mit Pupil, Python und OpenCV aufnehmen
Fraktal zum Erstellen und Spielen mit Python
Ein Memo mit Python2.7 und Python3 in CentOS
Verwenden Sie PIL oder Pillow mit Cygwin Python
Erstellen und entschlüsseln Sie Caesar-Code mit Python
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Lesen und Schreiben von JSON-Dateien mit Python
Umgang mit "Jahren und Monaten" in Python
[Anfänger] Python installieren und Programme ausführen (Windows)
Ich habe Numba mit Python3.5 installiert und verwendet
Tweet-Analyse mit Python, Mecab und CaboCha
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
Verkehrsüberwachung mit Kibana, ElasticSearch und Python
FM-Modulation und Demodulation mit Python Part 2
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Laden Sie einfach mp3 / mp4 mit Python und youtube-dl herunter!
Betreiben Sie Haushaltsgeräte mit Python und IRKit
Bereinigen Sie die Python-Umgebung mit Pythonz und virtualenv
Üben des Web-Scrapings mit Python und Selen