Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Über Ethernet gesteuerter Roboterarm

Komponenten und Verbrauchsmaterialien

Arduino 101
× 1
WIZnet WIZ750SR
× 1
Android-Gerät
× 1
Roboterarm
Sie können jeden anderen Roboterarm verwenden, müssen jedoch möglicherweise den Code anpassen, wenn Ihr Roboterarm zu anders
× 1
Metal Gear Micro Servo
× 4

Apps und Onlinedienste

Arduino-IDE
WIZnet S2E-Konfigurationstool
Android Studio

Über dieses Projekt

Einführung

Ich liebe Roboterarme. Ich mag es, dass man nur ein paar einfache mechanische Teile, einige Servos oder Motoren und eine gute Software braucht, und man bekommt ein Gerät, das nicht nur spektakulär ist und Spaß macht, sondern auch wirklich nützlich ist. Ich wollte einen bauen, da ich einen Robotikkurs hatte, den ich wirklich liebte.

Man kann viel lernen, wenn man einen Roboterarm baut, daher denke ich, dass dies ein großartiges Projekt auf mittlerem Niveau ist, um Ihr Wissen in der Robotik zu vertiefen. Fangen wir an!

Roboterarm

Sie können Roboterarme ab etwa 20 $ kaufen. Zum Experimentieren wollte ich mit einem billigeren beginnen. Später werde ich einen ernsthafteren Roboterarm bauen oder kaufen, aber vorerst werde ich an diesem 25$ DIY-Roboterarm von Banggood arbeiten.

Dies ist ein 4DoF (Degrees of Freedom) Roboterarm, bei dem 3 Servos zum Bewegen verwendet werden und einer für den Effektor (ich habe ihn im Projekt Greifer genannt). Das bedeutet, dass der Greifer in einem bestimmten Bereich in jede beliebige Position gebracht werden kann, jedoch seine Winkel nicht verändert werden können. Dies ist eine erhebliche Einschränkung, aber im Moment ist es in Ordnung und für viele Dinge immer noch gut.

Der Bausatz wurde mit 4 Servos geliefert, sodass Sie neben einer Steuerung auch alle Komponenten zum Bau des Roboterarms erhalten. Diese Servos sind nicht schlecht, aber ich bevorzuge diese:

Diese Servos sind schneller als die blauen und verwenden Metallzahnräder anstelle von Kunststoff.

Die Roboterteile kamen in 4 Plastikfolien. Sie müssen die Teile von diesen Blättern entfernen.

Der Roboterarm-Bausatz besteht aus einer Reihe von Teilen. Ich empfehle Ihnen, sich das folgende Video anzusehen. In diesem Video baut ein Russe den gleichen Roboterarm. Der Bauabschnitt beginnt um 7:43 Uhr.

Ich habe auf dem Paket einen Link zum Bau des Roboterarms erhalten, aber die Qualität sowohl in den Bildern als auch in der Anleitung war sehr gering. Dieses Video ist viel besser. Möglicherweise können Sie herausfinden, was was ist, aber wenn Sie dies tun, landen Sie in einer fast endlosen Schleife von Montage, Demontage und Wiedermontage.

Seien Sie beim Einsetzen der Servos sehr vorsichtig. Diese Konstruktion mit dieser Art von Kunststoff neigt beim Anziehen der Schrauben sehr leicht zum Brechen. Auch an einigen anderen Teilen des Roboters ist der optimale Anzug der Schrauben wichtig. Machen Sie sie zu eng und Sie können die Segmente des Roboterarms nicht mit den Servos bewegen.

Nach einigen Bauarbeiten haben Sie Ihren eigenen Roboterarm.

Die Positionierservos haben ein ausreichend langes Kabel, aber der Greifer braucht viel längeres. Ich habe das Servo zerlegt, das alte Kabel entlötet und ein mindestens doppelt so langes Kabel verwendet.

Gehirn

Alles klar, der Roboterarm ist fertig, aber wahrscheinlich möchten Sie ihn irgendwie steuern. Dafür brauchte ich einen Mikrocontroller und wählte meinen Arduino 101 für diesen Job.

Es ist das einzige offizielle Arduino-Board, das einen Intel-Mikrocontroller (Intel Curie) verwendet. Es verfügt über ein integriertes Gyroskop und einen Beschleunigungsmesser. Es hat auch Bluetooth, so dass ich in Zukunft die Möglichkeit habe, den Roboter über BLE zu steuern. Ein weiteres sehr nützliches Feature dieses Boards ist die Funktionsweise der seriellen Kommunikation. Im Gegensatz zu den meisten Arduinos sind die USB-Seriell und der UART an Pin 1 und 0 (TX und RX) nicht gleich. Es hat seine Vorteile, da ich keine anderen Kommunikationskreise von Pin 0 und 1 trennen muss, wenn ich das Arduino neu programmiere. Es ist auch für Debugging-Zwecke nützlich.

Wenn Sie die serielle Schnittstelle des USB-Ports verwenden möchten, müssen Sie 'Serial' verwenden und wenn Sie die GPIO0- und GPIO1-Pins verwenden möchten, haben Sie 'Serial1'

Der Arduino 101 hat 4 PWM-fähige GPIOs (GPIO3, GPIO5, GPIO6 und GPIO9) und ich habe sie alle verwendet, um die Servos zu steuern.

Kommunikation

Mein Roboterarm kann seriell gesteuert werden (Serial1 um genau zu sein). Dazu habe ich mein neuestes Kommunikationsmodul, das WIZ750SR, verwendet.

Dies ist ein kleines Ethernet-Modul mit einer Cortex-M0-MCU. In seiner Grundfunktionalität handelt es sich um ein Seriell-zu-Ethernet-Modul, aber Sie können das Modul leicht umprogrammieren, um Ihre Anforderungen zu erfüllen. Sie können dieses Board in ein I2C-zu-Ethernet-Board verwandeln, wenn Sie möchten.

Ein sehr cooles Feature ist der Onboard-TCP-Server (oder -Client). Mit dem TCP-Server können Sie das Arduino aus der Ferne steuern, genau wie über USB seriell, aber von überall auf der Welt! Auf der Arduino-Seite ist es vollständig transparent. Sie müssen Ihrer Skizze keinen zusätzlichen Code hinzufügen, um dieses Modul zu verwenden.

Ich habe auch ein WIZ750SR-TTL-EVB-Evaluierungsboard. Ich könnte den WIZ750SR mit Strom versorgen und habe einen Debug-USB-Anschluss, aber ich habe ihn außer einigen frühen Experimenten nicht verwendet.

Sowohl der Arduino 101 als auch der WIZ750SR verwenden 3,3 V und daher musste ich keine Pegelverschiebung für die TX- und RX-Pins verwenden. Der Arduino versorgt das Ethernet-Modul auch über seine Stromversorgung. Die Schaltung ist sehr einfach und Sie finden sie im Abschnitt Schaltpläne dieses Projekts. Die Servos haben eine eigene 5V Stromversorgung.

Einrichten des Moduls

Um dieses Board zu verwenden, müssen Sie es zuerst konfigurieren. Ich werde diesen Teil nicht noch einmal dokumentieren, da dies von den WIZnet-Jungs hier bereits getan wurde und Sie sicher sein können, dass Sie dort immer die neueste Dokumentation erhalten.

Ihre Dokumentation ist großartig, aber ich habe einige gut zu wissende Informationen und ich hatte einige (gelöste) Probleme, die es wert sind, geteilt zu werden.

Zum einen kann das Board über den USB-Port des Evaluation Boards mit Strom versorgt werden, aber ansonsten wird dieser Port hauptsächlich zum Debuggen und Flashen verwendet. Ich glaube, dass Sie über den USB-Port nicht mit dem TCP-Server des WIZ750SR kommunizieren können, aber Sie erhalten Debug-Informationen, wenn Sie sich mit diesem COM-Port verbinden. Es hat mich am Anfang etwas verwirrt, da ich nicht wusste, was mich erwartet.

Zweitens, wenn die blaue LED leuchtet, wenn sich der WIZ750SR mit Ihrem Netzwerk verbindet, sollte Ihr Board korrekt funktionieren. Fahren Sie mit dem Konfigurationstool fort, es sollte das Board finden.

Mein größtes Problem trat zu diesem Zeitpunkt auf, als ich versuchte, im Konfigurationstool nach dem Gerät zu suchen. Beim ersten Mal hat es wunderbar funktioniert, aber dann hatte ich keine Zeit, also habe ich dort aufgehört. Nach zwei Wochen versuchte ich es erneut, aber es konnte das Board unter mehreren Betriebssystemen und Computern in mehreren Netzwerken nicht mehr finden.

Ich habe über den Debug-USB-Port des Evaluierungsboards mit der neuesten Firmware einen Neustart durchgeführt und es hat funktioniert. Mein Windows-PC konnte es immer noch nicht finden, aber die Python-Version unter Ubuntu konnte es. Ich bin mir nicht sicher, was das Problem war, aber diese Schritte haben mein Problem endlich gelöst. Nach erfolgreicher Konfiguration des WIZ750SR konnte mein Windows-PC ihn auch wiederfinden, sodass ich mit der Arbeit fortfuhr.

Wie ich gelesen habe, bringen VMs mit ihren virtuellen Netzwerkadaptern auch die Suche durcheinander. Wenn Sie also Probleme mit der Suche haben, sollten Sie sich das ansehen.

Ein großartiges Werkzeug zum Testen der TCP-Kommunikation ist NetCat. Mit dieser Software können Sie sich mit dem TCP-Server auf dem WIZ750SR verbinden. Verwenden Sie nach der Installation von NetCat diesen Befehl, um eine Verbindung herzustellen:

nc [tcp_server_ip] [tcp_server_port]  

Danach können Sie direkt Daten vom WIZ750SR senden und empfangen. Ich habe dieses Tool oft verwendet.

Von A nach B wechseln

Um einen Roboterarm zu bewegen, müssen Sie der Steuerung sagen, was Sie wollen. Der einfachste Weg ist, die Winkel aller Servos direkt zu aktualisieren. Das Aktualisieren der Gelenkwinkel kann mit einigem Versuch und Irrtum durchgeführt werden und kann tatsächlich gut funktionieren.

In meinem nächsten Roboterarmprojekt werde ich die inverse Kinematik verwenden, um den Roboterarm mit Weltkoordinaten zu steuern, aber im Moment werde ich den Roboter nur mit Gelenkwinkeln steuern.

Die Geschwindigkeit des Systems ist hier ein entscheidender Punkt. Die Servos sind sehr schnell, brauchen aber noch Zeit, um die empfangene Position zu erreichen. Andererseits mögen die Überbrückungsdrähte keine sehr schnellen Bewegungen, also musste ich die Dinge verlangsamen. Sowohl im Hardware- als auch im Softwarebereich.

Ich habe dies gemacht, indem ich eine Pfadberechnung zum System erstellt und Verzögerung eingefügt habe. Wenn Sie neue Gelenkwinkel für den Roboterarm senden, müssen Sie einen zusätzlichen Parameter angeben:Geschwindigkeit (mDelay). Grundsätzlich teilen Sie der Roboterarmsteuerung die minimale Schrittzeit der Schleife mit. Der Wegrechner berechnet für jeden Positionierservo eine optionale Schrittweite. Das bedeutet, dass alle Servos ungefähr gleichzeitig ihr Ziel erreichen und die Geschwindigkeit von der Verzögerung abhängt. Das Ergebnis ist jedes Mal eine sehr schöne und sanfte lineare Bewegung.

Der Effektor funktioniert anders. Grundsätzlich kann es nur einen offenen oder geschlossenen Zustand (mit 3 verschiedenen Stufen der geschlossenen Stärke) ohne fließenden Übergang haben. Natürlich möchten Sie das Objekt so schnell wie möglich greifen, während die Bewegung reibungslos und angenehm sein sollte.

Es gibt derzeit 2 Arten von Befehlen in diesem System. Hier ist ein Beispiel für beide:

  • G 1 --> Schließen Sie den Greifer leicht. 0 bedeutet offen
  • A 10 130 120 110 --> Bewegung des Roboterarms mit 10 ms Schrittzeit, 130° oberen Gelenkwinkel, 120° unteren Gelenkwinkel und 110° Basisrotatorwinkel.

Android-App für die Fernbedienung

Okay, jetzt kann ich den Roboterarm von überall auf der Welt steuern, muss aber jeden neuen Befehl manuell schreiben. So macht es nicht viel Spaß. Ich brauchte eine viel benutzerfreundlichere Möglichkeit, den Roboterarm zu steuern, also habe ich eine Android-Anwendung entwickelt, um genau das zu tun.

Die App verfügt über einen TCP-Client, sodass sie sich direkt mit dem TCP-Server des WIZ750SR verbinden kann. Der Roboterarm speichert den Plot für alte und zukünftige Bewegungen nicht. Es kennt nur eine aktuelle Torposition. Dies bedeutet, dass die Anwendung nicht nur den gesamten Bewegungsplot an den Roboterarm sendet, sondern basierend auf dem Positionsfeedback regelmäßig neue Positionen an den Roboterarm sendet. Wenn Sie die App schließen oder die Verbindung zum WIZ750SR trennen, stoppt der Roboterarm, sobald er seine letzte empfangene Position erreicht hat.

Nachdem Sie sich mit dem Roboterarm verbunden haben, gelangen Sie zum Bildschirm Konfigurieren. Es enthält 3 Seiten. Der erste ist Run (dazu später mehr), der zweite ist Init und der dritte ist Loop. Init und Loop sind im Grunde gleich, ihr einziger Unterschied besteht darin, wo sie die Position speichern.

Der Bildschirm enthält neben dem Speichern-Button 4 Suchleisten und eine Greiferschaltfläche. Diese Schieberegler dienen zum Einstellen der Position und der Geschwindigkeit der Bewegung, während der Greifknopf zum Öffnen oder Schließen des Effektors dient. Alle Änderungen erfolgen sofort, Sie sehen die neue Position auf dem Roboterarm sofort, müssen jedoch auf die Schaltfläche Speichern klicken, um sie dem Plot hinzuzufügen. Hier ist eine kurze Demonstration dazu:

Wenn Sie sowohl den Greiferstatus als auch die Roboterarmposition ändern, wird dies als zwei verschiedene Befehle gespeichert. Zuerst der Greiferbefehl und dann der Positionsbefehl.

Die Ausführung des Plots wird erwartungsgemäß mit init gestartet. Init und Loop funktionieren genau wie die Setup- und Loop-Funktionen von Arduino. Init ist gut für Bewegungen, die später nicht wiederholt werden. Wenn die Init-Befehle abgeschlossen sind, folgen die Schleifenbefehle. Die Schleifenbefehle werden für immer wiederholt, oder zumindest bis Sie den Plot stoppen. Wenn Sie weder loop noch init benötigen, lassen Sie dieses Feld einfach leer.

Diese Felder sind EditText-Felder, was bedeutet, dass Sie ihren Inhalt einfach bearbeiten oder löschen können. Wenn Sie die Schieberegler nicht verwenden möchten, können Sie die Befehle von Hand schreiben. Sie können den Plot auch kopieren und einfügen. Die Anwendung merkt sich den zuletzt ausgeführten Plot zur späteren Verwendung.

Die erste Zeile unter "Konfigurieren" dient als visuelles Feedback zum Testen. Der linke Teil zeigt Ihnen die letzte Zielposition für den Roboterarm (S - gesendet), während das rechte Feld die aktuelle Position davon ist (R - empfangen). Die App sendet eine neue Zielposition an den Roboterarm, sobald das Ziel und die aktuelle Position übereinstimmen.

Wie Sie sehen, stoppte der Roboterarm, als es nur Init gab, sobald er die Init-Befehle beendet hatte.

Mit meiner App kann man einiges machen, aber es gibt viele Verbesserungsmöglichkeiten in der Zukunft. Ich plane, Funktionen, bedingte Kontrolle, Schleifen mit Argumenten usw. in den Diagrammen zu verwenden.

Wenn Sie einen ähnlichen Roboter bauen möchten, finden Sie sowohl den Arduino-Code als auch die Robot Arm Controller-Anwendung im Code-Segment dieses Projekts.

Ergebnisse

Ich habe sowohl init- als auch loop-Befehle verwendet und es ermöglichte mir, einige mäßig komplexe Aufgaben zu erledigen. Hier ist ein Video darüber, wie mein Roboterarm einige Gummienten aufstellt (init) und sie dann eine nach der anderen für immer um sich selbst bewegt (Loop).

Wie Sie sehen können, wenn man bedenkt, dass es sich um einen sehr billigen Roboterarm mit schwerwiegenden hardwarebedingten Einschränkungen handelt, sind die Bewegungen sehr glatt, kontinuierlich und genau.

Fazit

Meine Software funktioniert sehr gut und ich werde in Zukunft auf jeden Fall daran arbeiten, diesen Roboterarm zu verbessern oder einen fortgeschritteneren zu bauen. Ich habe alles erreicht, was ich für dieses Projekt geplant hatte und ohne ernsthafte Blockierungsprobleme.

Der Arduino 101 eignet sich hervorragend für diesen Zweck. Einzige Einschränkung des Boards sind die nur 4 PWM-fähigen GPIOs. Es könnte in Zukunft ein Problem werden, wenn ich einen neuen Roboterarm mit mehr Freiheitsgraden baue, aber die getrennte USB-Seriell und GPIO-Seriell ist bei der Entwicklung sehr nützlich und dieses Board kann auch viel Rechenleistung bereitstellen.

Ich denke, die Android-Anwendung war eine gute Idee, aber ich muss sie robuster und benutzerfreundlicher machen und ihre Funktionalität erhöhen. Im Moment ist es eine Alpha-Version.

Der WIZ750SR war eine sehr schöne Überraschung. Ich hatte befürchtet, dass ich noch mehr Probleme mit diesem Board haben werde, aber nach der Konfiguration hat es perfekt funktioniert. Es war total transparent und ich hatte null Probleme damit. Dies ist ein sehr einfach zu bedienendes Gerät und das beste Ethernet-Modul, das ich je mit einem meiner Mikrocontroller verwendet habe.

Die Arbeit mit Roboterarmen macht extrem viel Spaß, daher werde ich auf jeden Fall mehr dazu lernen und mein Wissen dann in Zukunft mit euch teilen! Danke fürs Lesen!

Code

Arduino Web-Editor
Sie können den Arduino Web Editor verwenden, um auf den Arduino-Code meines Projekts zuzugreifen und ihn direkt hochzuladen
Arduino- und Android-Code
https://github.com/abysmalsb/Robot-Arm-Controller

Schaltpläne

Im Moment verwendet das System zwei getrennte Stromquellen. Eine vom USB-Port des Arduino und eine andere 5V-Quelle, die zum Bewegen der Servos verwendet wird.

Herstellungsprozess

  1. Raspberry Pi Roboter über Bluetooth gesteuert
  2. Gestengesteuerter Roboter mit Raspberry Pi
  3. Windows 10 IoT Core:Sprachgesteuerter Roboter
  4. WLAN-gesteuerter Roboter mit Raspberry Pi
  5. ROObockey:Ferngesteuerter, zielunterstützter Straßenhockey-Roboter
  6. Zweiarmiger SCARA-Roboter
  7. MeArm-Roboterarm – Ihr Roboter – V1.0
  8. Alexa-gesteuerte LEDs über Raspberry Pi
  9. Nunchuk-gesteuerter Roboterarm (mit Arduino)
  10. Sprachgesteuerter Roboter