Inhaltsverzeichnis:

Roboter für virtuelle Präsenz - Gunook
Roboter für virtuelle Präsenz - Gunook

Video: Roboter für virtuelle Präsenz - Gunook

Video: Roboter für virtuelle Präsenz - Gunook
Video: The Big Bang Theory: Mobile Virtual Presence Device (Clip) | TBS 2024, November
Anonim
Image
Image
Mobiles Roboterauto
Mobiles Roboterauto

Dieser mobile Roboter interagiert mit seiner physischen Umgebung, indem er die "virtuelle Präsenz" der Person darstellt, die ihn aus der Ferne steuert. Jeder kann überall auf der Welt darauf zugreifen, um Leckereien zu verteilen und mit Ihnen zu spielen.

Die Arbeit hier wird von zwei Personen (einer in Deutschland und einer in den USA) entwickelt, um über die traditionellen Mittel der internetbasierten Kommunikation hinauszugehen, indem eine physische Schnittstelle für die Ferninteraktion geschaffen wird. Da COVID-19 die Welt weiterhin beeinflusst und jeder dafür verantwortlich ist, unsere physische Exposition gegenüber Menschen zu begrenzen, versuchen wir, die greifbare Verbindung wiederherzustellen, die Teil der physischen Interaktion ist.

Es basiert auf dem ESP32-Kamera-Roboter-FPV-Teacher-Entry Instructable und wurde modifiziert, um Abstandssensor, Leckerchenspender und "Steuerung von überall auf der Welt" zu enthalten, vorausgesetzt, Sie haben eine einigermaßen stabile Internetverbindung.

Lieferungen

Das Projekt besteht aus 4 Hauptteilen - einem mobilen Roboterauto, einem Chipspender, einem Joystick und einem Netzwerkkommunikations-Setup.

Mobiles Roboterauto

  • Steckbrett
  • 2-Rad-Antriebsmotor und Chassis-Roboter-Kit (einschließlich Räder, Gleichstrommotoren, Montageplatte und Schrauben)
  • Arduino Mega 2560 (wenn Sie ohne Abstandssensor oder Chip-Dispenser bauen, hat ein Uno genug Pins)
  • (3) 9V-Batterien (haben Sie noch ein paar mehr, da Sie sie beim Debuggen entleeren)
  • LM2596 Netzteilmodul DC/DC Buck 3A Regler (oder ähnlich)
  • ESP32-CAM Wifi-Modul
  • FT232RL FTDI USB zu TTL Serial Converter (zur Programmierung der ESP32-CAM)
  • HC-SR04 Ultraschall-Abstandssensor
  • L298N Motortreiber
  • (3) LEDs (beliebige Farbe)
  • (3) 220 Ohm Widerstände

Spänespender

  • (2) SG90-Servos
  • Karton / Pappe

Joystick

  • Arduino Uno
  • Joystick-Modul
  • Mini-Breadboard, (1) LED, (1) 220 Ohm Widerstand (optional)

Sonstiges

Viele Steckbrett-ÜberbrückungsdrähteExtra Karton / PappeBandSchereLineal / MaßbandKleiner KreuzschlitzschraubendreherKleiner Schlitzschraubendreher

Geduld =)

Schritt 1: Mobiles Roboterauto

Das Robot Car Chassis dient als mobile Plattform, wobei ein Arduino MEGA als Hauptmikrocontroller die Motoren antreibt, Sensorwerte ausliest und die Servos ansteuert. Die meisten Aktionen werden ausgeführt, indem der Arduino MEGA Befehle über die serielle Kommunikation empfängt, die von der ESP32-CAM gesendet werden. Während ESP32 einen Kamera-Livestream zur Steuerung des Roboters bereitstellt, besteht seine andere Funktion darin, eine drahtlose Verbindung zwischen dem Roboter und dem Server zu verwalten, sodass Benutzer ihn von überall auf der Welt steuern können. Der ESP32 empfängt per Tastendruck Befehle von der Webseite und sendet diese als char-Werte an den Arduino MEGA. Basierend auf dem empfangenen Wert fährt das Auto vorwärts, rückwärts usw. Da die Fernsteuerung über das Internet von vielen externen Faktoren abhängt, einschließlich hoher Latenz, schlechter Stream-Qualität und sogar Verbindungsabbrüchen, ist ein Distanzsensor integriert, um einen Absturz des Roboters zu verhindern in Gegenstände.*Aufgrund des hohen und schwankenden Strombedarfs des ESP32-Chips wird für den Betrieb mit Batteriestrom ein Netzteilregler empfohlen (siehe Schaltplan).

Schritt 2: Mobiles Roboterauto - Schaltplan

Mobiles Roboterauto - Schaltplan
Mobiles Roboterauto - Schaltplan

Wir werden Sie Schritt für Schritt durch den Zusammenbau führen.

Schritt 3: Mobiles Roboterauto - Montage (Motoren)

Mobiles Roboterauto - Montage (Motoren)
Mobiles Roboterauto - Montage (Motoren)

Nachdem Sie das 2WD-Chassis zusammengebaut haben, verbinden wir zunächst die Motoren und den Akku über den L298N-Treiber mit dem Arduino MEGA.

Schritt 4: Mobiles Roboterauto - Montage (Entfernungssensor)

Mobiles Roboterauto - Montage (Entfernungssensor)
Mobiles Roboterauto - Montage (Entfernungssensor)

Da einige Komponenten angeschlossen werden müssen, fügen wir ein Steckbrett hinzu, damit wir die Stromversorgung und die gemeinsame Masse einfacher verbinden können. Nachdem wir die Drähte neu organisiert haben, schließen Sie den Abstandssensor an und befestigen Sie ihn an der Vorderseite des Roboters.

Schritt 5: Mobiles Roboterauto - Montage (ESP32 CAM)

Mobiles Roboterauto - Montage (ESP32 CAM)
Mobiles Roboterauto - Montage (ESP32 CAM)

Als nächstes schließen Sie das ESP32-CAM-Modul an und befestigen es neben dem Abstandssensor in der Nähe der Vorderseite des Roboters. Denken Sie daran, dass diese ziemlich stromhungrige Komponente eine eigene Batterie und einen DC-Regler benötigt.

Schritt 6: Mobiles Roboterauto - Montage (Chipspender)

Mobiles Roboterauto - Montage (Chipspender)
Mobiles Roboterauto - Montage (Chipspender)

Fügen wir nun den Chip-Dispenser hinzu (mehr dazu im Abschnitt "Chip Dispenser"). Verdrahten Sie die beiden Servos gemäß dem Fritzing-Diagramm und befestigen Sie den Spender am Heck des Roboters.

Schritt 7: Mobiles Roboterauto - Montage (Cookies!)

Mobiles Roboterauto - Montage (Cookies!)
Mobiles Roboterauto - Montage (Cookies!)

Schließlich fügen wir dem Spender Leckereien hinzu!

Schritt 8: Mobiles Roboterauto - Arduino-Code

RobotCar_Code ist der Code, den Sie auf dem Arduino Mega laden müssen.

So funktioniert es: Der Arduino hört auf Bytes, die vom ESP32 über die serielle Kommunikation auf dem 115200-Band gesendet werden. Basierend auf dem empfangenen Byte bewegt sich das Auto vorwärts, rückwärts, links, rechts usw., indem es entweder eine HIGH- oder LOW-Spannung an die Motoren sendet, um die Richtung zu steuern, sowie eine PWM-Variable zwischen 0-255, um die Geschwindigkeit zu steuern. Um Kollisionen zu vermeiden, liest dieser Code auch die vom Distanzsensor eingehenden Werte und wenn die Distanz kleiner als ein bestimmter Schwellenwert ist, bewegt sich der Roboter nicht vorwärts. Wenn der Arduino schließlich einen Befehl erhält, einen Leckerbissen zu verteilen, aktiviert er die Servos im Chip-Dispenser.

Schritt 9: Mobiles Roboterauto - ESP32-Code

Der ESP32 ermöglicht die Kommunikation zwischen Server und Arduino über Wifi. Es wird separat vom Arduino programmiert und hat seinen eigenen Code:

  • ESP32_Code.ino ist der Code für ESP32, um Informationen an den Arduino zu senden
  • app_httpd.cpp ist der Code, der für den standardmäßigen ESP32-Webserver benötigt wird und stellt die Funktion ein, um auf Tastendrücke zu warten. Gut zum Debuggen und Testen im lokalen WLAN. Es wird nicht für die Kommunikation außerhalb des lokalen Netzwerks verwendet.
  • camera_index.h ist der HTML-Code für die Standard-Webanwendung
  • camera_pins.h definiert die Pins je nach ESP32-Modell

Der ESP32-Code verwendet die Wifi-Bibliothek sowie das ESP32-Add-on, das in der Arduino-IDE installiert werden kann, indem Sie die folgenden Schritte ausführen:

  1. Gehen Sie in der Arduino IDE zu Datei > Einstellungen
  2. Geben Sie dann auf der Registerkarte Einstellungen unter Additional Boards Manager URL Folgendes ein: "https://dl.espressif.com/dl/package_esp32_index.json"
  3. Öffnen Sie nun den Boards Manager und gehen Sie zu Tools > Board > Boards Manager und suchen Sie nach dem ESP32, indem Sie "ESP32" eingeben.
  4. Sie sollten "esp32 von Espressif Systems" sehen. Klicken Sie auf Installieren.
  5. Jetzt sollte das ESP32-Add-On installiert sein. Um zu überprüfen, gehen Sie zurück zur Arduino IDE und gehen Sie zu Tools> Board und wählen Sie das "ESP32 Wrover Module".
  6. Gehen Sie erneut zu Extras > Upload-Geschwindigkeit und stellen Sie es auf "115200" ein.
  7. Gehen Sie schließlich zu Extras> Partitionsschema und stellen Sie es auf "Riesige APP (3 MB kein OTA / 1 MB SPIFFS) ein.
  8. Sobald Sie dies abgeschlossen haben, empfehle ich Ihnen, diesem Tutorial von RandomNerdTutorials zu folgen, das detailliert erklärt, wie Sie die Einrichtung des ESP32 abschließen und Code mit dem FTDI-Programmierer hochladen Programmieren des ESP32

Schritt 10: Spänespender

Spänespender
Spänespender

Der Chip Dispenser ist eine kostengünstige Ergänzung zum mobilen Roboter, die es ihm ermöglicht, die lokale Umgebung zu beeinflussen und mit Menschen / Tieren zu interagieren, indem er einen leckeren Leckerbissen hinterlässt. Es besteht aus einer Karton-Außenbox mit 2 innen montierten Servos sowie einer inneren Kartonkartusche, die Gegenstände (wie Süßigkeiten oder Hundeleckerli) zum Ausgeben aufnimmt. Ein Servo fungiert als Tor, während das andere den Gegenstand herausschiebt.

*Alle Maße sind in Millimetern

Schritt 11: Joystick

Joystick
Joystick

Während es Spaß machen kann, einen Roboter mit der Tastatur zu steuern, macht es noch mehr Spaß und intuitiv, einen Joystick zu verwenden, bei dem der Roboter direkt auf die Richtung reagiert, die Sie drücken. Da dieser Roboter über auf der Webseite aufgezeichnete Tastendrücke betätigt wird, brauchten wir unseren Joystick, um eine Tastatur zu emulieren. Auf diese Weise können Benutzer ohne Joystick den Roboter weiterhin direkt über eine Tastatur steuern, andere jedoch können den Joystick verwenden.

Dafür hatten wir nur ein Arduino Uno, das die Bibliothek nicht verwenden kann, also haben wir es direkt mit einem USB-Protokoll programmiert, das als Device Firmware Update (DFU) bekannt ist und es ermöglicht, das Arduino mit einer generischen USB-HID-Tastatur-Firmware zu flashen. Mit anderen Worten, wenn das Arduino an den USB angeschlossen ist, wird es nicht mehr als Arduino, sondern als Tastatur erkannt!

Schritt 12: Joystick - Schaltplan

Joystick - Schaltplan
Joystick - Schaltplan

So haben wir den Joystick verdrahtet.

Schritt 13: Joystick - Tastaturemulator

Damit Ihr Arduino Uno eine Tastatur emulieren kann, müssen Sie den Atmega16u2-Chip direkt auf dem Arduino über ein manuelles Geräte-Firmware-Update (DFU) programmieren. Die folgenden Schritte beschreiben den Prozess für einen Windows-Computer und helfen Ihnen hoffentlich, einige der Probleme zu vermeiden, auf die wir gestoßen sind.

Der erste Schritt besteht darin, den Atmel-USB-Treiber manuell auf den Arduino zu schreiben, damit er als USB und nicht als Arduino erkannt wird, wodurch er mit dem FLIP-Programmierer geflasht werden kann.

  1. Laden Sie den FLIP-Programmierer von Atmel hier herunter
  2. Schließen Sie Ihr Arduino Uno an
  3. Gehen Sie zum Geräte-Manager und suchen Sie das Arduino. Es befindet sich unter COM oder Unbekanntes Gerät. Stecken Sie es ein und aus, um sicherzustellen, dass es sich um das richtige Gerät handelt.
  4. Sobald Sie das Arduino Uno im Geräte-Manager gefunden haben, klicken Sie mit der rechten Maustaste darauf und wählen Sie Eigenschaften> Treiber> Treiber aktualisieren> Auf meinem Computer nach Treibersoftware suchen> Lassen Sie mich aus einer Liste verfügbarer Treiber auf meinem Computer auswählen> Datenträger> Navigieren Sie zum Datei "atmel_usb_dfu.inf" und wählen Sie diese aus. Dies sollte sich in dem Ordner befinden, in dem Ihr Atmel FLIP Programmer installiert wurde. Auf meinem Computer ist es hier: C:\Program Files (x86)\Atmel\Flip 3.4.7\usb\atmel_usb_dfu.inf
  5. Treiber installieren
  6. Gehen Sie nun zurück zum Geräte-Manager, Sie sollten ein "Atmel USB Devices" mit dem Arduino Uno sehen, das jetzt als ATmega16u2 beschriftet ist!

Jetzt, da der Computer das Arduino Uno als USB-Gerät erkennt, können wir es mit dem FLIP-Programmierer mit 3 separaten Dateien flashen und in eine Tastatur verwandeln.

Wenn Sie Ihr Arduino Uno nach dem ersten Teil ausgesteckt haben, stecken Sie es wieder ein.

  1. FLIP öffnen
  2. Setzen Sie das Arduino Uno zurück, indem Sie die Stromversorgung kurz mit Masse verbinden.
  3. Klicken Sie auf Geräteauswahl (Symbol wie ein Mikrochip) und wählen Sie ATmega16U2
  4. Klicken Sie auf Kommunikationsmedium auswählen (Symbol wie ein USB-Kabel) und wählen Sie USB. Wenn Sie den ersten Teil richtig ausgefüllt haben, sollten die anderen grauen Schaltflächen verwendbar sein.
  5. Gehen Sie zu Datei> Hex-Datei laden> und laden Sie die Datei Arduino-usbserial-uno.hex. hoch
  6. Im FLIP-Fenster sollten Sie drei Abschnitte sehen: Operations Flow, FLASH Buffer Information und ATmega16U2. Aktivieren Sie im Betriebsablauf die Kontrollkästchen für Löschen, Programmieren und Überprüfen, und klicken Sie dann auf Ausführen.
  7. Klicken Sie nach Abschluss dieses Vorgangs im Abschnitt ATmega16U2 auf Anwendung starten.
  8. Schließen Sie das Arduino an, indem Sie es vom Computer trennen und wieder anschließen.
  9. Setzen Sie das Arduino Uno zurück, indem Sie die Stromversorgung kurz mit Masse verbinden.
  10. Öffnen Sie die Arduino IDE und laden Sie die Datei JoyStickControl_Code.ino auf das Board hoch.
  11. Schließen Sie das Arduino an, indem Sie es vom Computer trennen und wieder anschließen.
  12. Setzen Sie das Arduino zurück, indem Sie die Stromversorgung kurzzeitig mit Masse verbinden.
  13. Gehen Sie zurück zu FLIP und stellen Sie sicher, dass in der Geräteauswahl Atmega16U2 angezeigt wird
  14. Klicken Sie auf Kommunikationsmedium auswählen und wählen Sie USB.
  15. Gehen Sie zu Datei> Hex-Datei laden> und laden Sie die Datei Arduino-keyboard-0.3.hex. hoch
  16. Im FLIP-Fenster sollten Sie drei Abschnitte sehen: Operations Flow, FLASH Buffer Information und ATmega16U2. Aktivieren Sie im Betriebsablauf die Kontrollkästchen für Löschen, Programmieren und Überprüfen, und klicken Sie dann auf Ausführen.
  17. Klicken Sie nach Abschluss dieses Vorgangs im Abschnitt ATmega16U2 auf Anwendung starten.
  18. Schließen Sie das Arduino an, indem Sie es vom Computer trennen und wieder anschließen.
  19. Wenn Sie nun zum Geräte-Manager gehen, sollte sich unter Tastaturen ein neues HID-Tastaturgerät befinden.
  20. Öffnen Sie einen Notizblock oder einen beliebigen Texteditor und bewegen Sie den Joystick. Sie sollten sehen, wie Zahlen eingegeben werden!

Wenn Sie den Code in der Arduino-Skizze ändern möchten, zum Beispiel neue Befehle an den Joystick schreiben, müssen Sie ihn jedes Mal mit allen 3 Dateien flashen.

Einige nützliche Links:Arduino DFUAtLibUsbDfu.dll nicht gefunden

Dieser Tastaturemulator basiert auf diesem Tutorial von Michael vom 24. Juni 2012.

Schritt 14: Netzwerkkommunikation

Netzwerk-Kommunikation
Netzwerk-Kommunikation

Um von überall auf der Welt einen Videostream zu empfangen und Befehle an den Roboter zu senden, benötigen wir eine Möglichkeit, Daten zur und von der ESP32-CAM zu übertragen. Dies erfolgt in zwei Teilen, einem Verbindungshandler in Ihrem lokalen Netzwerk und einem öffentlichen Server. Laden Sie die drei Dateien herunter, um dies zu erreichen:

  • Handlers.py: leitet Informationen von ESP32-CAM und dem öffentlichen Server weiter (getestet auf Python 3.8)
  • Flask_app.py: Definiert, wie Ihre App auf eingehende Anfragen reagiert.
  • Robot_stream.html: rendert Videos in Ihrem Browser und hört auf Befehle über Tastatur / Joystick (getestet in Chrome)

Connection HandlerSie können dies direkt in app_httpd.cpp codieren, aber zum einfacheren Debuggen verwenden wir ein Python-Skript, das auf einem PC ausgeführt wird, der mit demselben Netzwerk verbunden ist. Öffnen Sie handlers.py und aktualisieren Sie die IP-Adresse und den Benutzernamen auf Ihren eigenen, und schon können Sie loslegen. Der Stream wird gestartet, wenn Sie diese Datei ausführen.

Öffentlicher Server Um auf alles im Internet zuzugreifen, können Sie einen Server mit einem PaaS Ihrer Wahl starten. Bei Pythonanywhere (PA) dauert die Einrichtung weniger als 5 Minuten:

  1. Registrieren Sie sich für ein Konto und melden Sie sich an
  2. Gehen Sie zur Registerkarte „Web“und klicken Sie auf „Neue Web-App hinzufügen“, wählen Sie Flask und Python 3.6
  3. Kopiereflakon_app.py in das Verzeichnis /mysite
  4. Kopieren Sie robot_stream.html in das Verzeichnis /mysite/templates
  5. Klicken Sie auf „Neu laden“

Und … Sie sind fertig!

Haftungsausschluss: Dieser Netzwerk-Workflow ist schnell und einfach, aber alles andere als ideal. RTMP oder Sockets wären für das Streaming besser geeignet, werden jedoch von PA nicht unterstützt und erfordern etwas Erfahrung mit Netzwerk- und Server-Setup. Es wird außerdem empfohlen, einige Sicherheitsmechanismen hinzuzufügen, um den Zugriff zu kontrollieren.

Schritt 15: Alles zusammenfügen

Schalten Sie nun Ihren Roboter ein, führen Sie handlers.py auf einem Computer aus (der mit demselben Netzwerk wie der Roboter verbunden ist), und Sie können den Roboter von einem Browser aus basierend auf der von Ihnen festgelegten URL von überall aus steuern. (z. B.

Empfohlen: