Virtuele aanwezigheidsrobot: 15 stappen
Virtuele aanwezigheidsrobot: 15 stappen
Anonim
Image
Image
Mobiele robotauto
Mobiele robotauto

Deze mobiele robot interageert met zijn fysieke omgeving, door de "virtuele aanwezigheid" weer te geven van de persoon die hem op afstand bestuurt. Het is voor iedereen, waar ook ter wereld, toegankelijk om lekkernijen uit te delen en met je te spelen.

Het werk hier is ontwikkeld door twee mensen (een in Duitsland en een in de VS) als een poging om verder te gaan dan de traditionele manieren van op internet gebaseerde communicatie door een fysieke interface te creëren voor interactie op afstand. Aangezien COVID-19 de wereld blijft beïnvloeden en iedereen verantwoordelijk is voor het beperken van onze fysieke blootstelling aan mensen, proberen we de tastbare verbinding terug te brengen die deel uitmaakt van fysieke interactie.

Het is gebaseerd op de ESP32-Camera-Robot-FPV-Teacher-Entry Instructable en aangepast om afstandssensor, traktatiedispenser en "controle van overal ter wereld" op te nemen, op voorwaarde dat je een enigszins stabiele internetverbinding hebt.

Benodigdheden

Het project heeft 4 hoofdonderdelen: een mobiele robotauto, een chipdispenser, een joystick en een netwerkcommunicatie-instelling.

Mobiele robotauto

  • Breadboard
  • 2-wielaangedreven motor en chassisrobotkit (inclusief wielen, gelijkstroommotoren, montagebord en schroeven)
  • Arduino Mega 2560 (als je bouwt zonder de afstandssensor of de Chip Dispenser heeft een Uno genoeg pinnen)
  • (3) 9V-batterijen (heb er nog een paar in de buurt, want u zult ze leegmaken bij het debuggen)
  • LM2596 Voedingsmodule DC/DC Buck 3A-regelaar (of vergelijkbaar)
  • ESP32-CAM wifi-module
  • FT232RL FTDI USB naar TTL Seriële Converter (voor het programmeren van de ESP32-CAM)
  • HC-SR04 Ultrasone afstandssensor
  • L298N-motorstuurprogramma
  • (3) LEDS (elke kleur)
  • (3) 220 Ohm Weerstanden

Chipdispenser

  • (2) SG90-servo's
  • Karton / Karton

Joystick

  • Arduino Uno
  • Joystick-module
  • Mini Breadboard, (1) LED, (1) 220 Ohm weerstand (optioneel)

Ander

Veel Breadboard Jumper WiresExtra Karton / KartonTapeSchaarLiniaal / MeetlintKleine Philips SchroevendraaierKleine Platte Schroevendraaier

Geduld =)

Stap 1: Mobiele robotauto

Het chassis van de robotwagen dient als een mobiel platform, met een Arduino MEGA als de belangrijkste microcontroller die de motoren aanstuurt, sensorwaarden leest en de servo's aanstuurt. De meeste acties worden uitgevoerd door de Arduino MEGA opdrachten te laten ontvangen via seriële communicatie, verzonden vanaf de ESP32-CAM. Terwijl ESP32 een camera-livestream biedt om de robot te besturen, is zijn andere functie het beheren van een draadloze verbinding tussen de robot en de server, zodat gebruikers hem overal ter wereld kunnen bedienen. De ESP32 ontvangt opdrachten van de webpagina via toetsaanslagen en stuurt ze naar de Arduino MEGA als char-waarden. Op basis van de ontvangen waarde gaat de auto vooruit, achteruit etc. Omdat afstandsbediening via internet afhankelijk is van veel externe factoren, waaronder hoge latentie, slechte streamkwaliteit en zelfs verbroken verbindingen, is er een afstandssensor ingebouwd om te voorkomen dat de robot crasht in objecten. *Vanwege de hoge en fluctuerende stroomvereisten van de ESP32-chip wordt een voedingsregelaar aanbevolen voor gebruik met batterijvoeding (zie bedradingsschema).

Stap 2: Mobiele robotauto - schakelschema

Mobiele robotauto - schakelschema
Mobiele robotauto - schakelschema

We zullen je stap voor stap helpen om dit te monteren.

Stap 3: Mobiele robotauto - montage (motoren)

Mobiele Robotwagen - Montage (Motoren)
Mobiele Robotwagen - Montage (Motoren)

Nadat je het 2WD-chassis hebt gemonteerd, beginnen we met het aansluiten van de motoren en de batterij op de Arduino MEGA via de L298N-driver.

Stap 4: Mobiele robotauto - montage (afstandssensor)

Mobiele Robotwagen - Montage (Afstandssensor)
Mobiele Robotwagen - Montage (Afstandssensor)

Omdat er nogal wat componenten zijn om aan te sluiten, laten we een breadboard toevoegen, zodat we de stroom en de gedeelde aarde gemakkelijker kunnen verbinden. Nadat we de draden opnieuw hebben georganiseerd, sluit u de afstandssensor aan en bevestigt u deze aan de voorkant van de robot.

Stap 5: Mobiele robotauto - montage (ESP32 CAM)

Mobiele Robotwagen - Montage (ESP32 CAM)
Mobiele Robotwagen - Montage (ESP32 CAM)

Sluit vervolgens de ESP32-CAM-module aan en bevestig deze naast de afstandssensor aan de voorkant van de robot. Onthoud dat dit nogal energieverslindende onderdeel zijn eigen batterij en een DC-regelaar nodig heeft.

Stap 6: Mobiele robotauto - montage (chipdispenser)

Mobiele Robotwagen - Montage (Chip Dispenser)
Mobiele Robotwagen - Montage (Chip Dispenser)

Laten we nu de chipdispenser toevoegen (meer hierover in de sectie "Chipdispenser"). Sluit de twee servo's aan volgens het Fritzing-diagram en bevestig de dispenser aan de staart van de robot.

Stap 7: Mobiele robotauto - Montage (cookies!)

Mobiele Robotwagen - Montage (Cookies!)
Mobiele Robotwagen - Montage (Cookies!)

Tot slot voegen we lekkernijen toe aan de dispenser!

Stap 8: Mobiele robotauto - Arduino-code

RobotCar_Code is de code die u op de Arduino Mega moet laden.

Hier is hoe het werkt: de Arduino luistert naar bytes die worden verzonden vanaf de ESP32 via seriële communicatie op de 115200-band. Op basis van de ontvangen byte zal de auto vooruit, achteruit, links, rechts enz. rijden door een HOGE of LAGE spanning naar de motoren te sturen om de richting te regelen, evenals een PWM-variabele tussen 0-255 om de snelheid te regelen. Om botsingen te voorkomen, leest deze code ook de waarden die binnenkomen van de afstandssensor en als de afstand kleiner is dan een bepaalde drempel, zal de robot niet vooruit gaan. Ten slotte, als de Arduino een commando ontvangt om een traktatie af te geven, activeert het de servo's in de Chip Dispenser.

Stap 9: Mobiele robotauto - ESP32-code

De ESP32 zorgt voor communicatie tussen de server en Arduino via Wifi. Het wordt apart van de Arduino geprogrammeerd en heeft zijn eigen code:

  • ESP32_Code.ino is de code voor ESP32 om informatie naar de Arduino te sturen
  • app_httpd.cpp is de code die nodig is voor de standaard ESP32-webserver en stelt de functie in om te luisteren naar toetsaanslagen. Goed voor het debuggen en testen op lokale wifi. Het wordt niet gebruikt voor communicatie buiten het lokale netwerk.
  • camera_index.h is de html-code voor de standaard webapplicatie
  • camera_pins.h definieert de pinnen afhankelijk van het ESP32-model

De ESP32-code maakt gebruik van de wifi-bibliotheek en de ESP32-add-on, die in de Arduino IDE kan worden geïnstalleerd door deze stappen te volgen:

  1. Ga in de Arduino IDE naar Bestand > Voorkeuren
  2. Voer vervolgens op het tabblad Instellingen onder URL van extra bordenbeheer het volgende in: "https://dl.espressif.com/dl/package_esp32_index.json"
  3. Open nu de Boards Manager en ga naar Tools > Board > Boards Manager en zoek naar de ESP32 door "ESP32" te typen
  4. U zou "esp32 by Espressif Systems" moeten zien. Klik op Installeren.
  5. Nu moet de ESP32-add-on worden geïnstalleerd. Ga om dit te controleren terug naar de Arduino IDE en ga naar Tools > Board en selecteer de "ESP32 Wrover Module".
  6. Ga opnieuw naar Extra > Uploadsnelheid en stel deze in op "115200".
  7. Ga ten slotte naar Tools> Partition Scheme en stel het in op "Enorme APP (3MB No OTA/1MB SPIFFS)
  8. Zodra je dit hebt voltooid, raad ik aan om deze tutorial van RandomNerdTutorials te volgen, waarin in detail wordt uitgelegd hoe je het instellen van de ESP32 kunt voltooien en code kunt uploaden met de FTDI Programmer De ESP32 programmeren

Stap 10: Chipdispenser

Chipdispenser
Chipdispenser

De Chip Dispenser is een goedkope toevoeging aan de mobiele robot waardoor deze de lokale omgeving kan beïnvloeden en interactie kan hebben met mensen / dieren door een smakelijke traktatie achter te laten. Het bestaat uit een kartonnen buitendoos met 2 servo's erin gemonteerd, evenals een kartonnen binnenpatroon die items (zoals snoep of hondensnoepjes) bevat om af te geven. Een servo fungeert als een poort terwijl de andere het item naar buiten duwt.

*Alle afmetingen zijn in millimeters

Stap 11: Joystick

Joystick
Joystick

Hoewel het leuk kan zijn om een robot met het toetsenbord te besturen, is het nog leuker en intuïtiever om een joystick te gebruiken, waarbij de robot direct reageert op basis van de richting waarin je duwt. Omdat deze robot wordt bediend via toetsaanslagen die op de webpagina zijn opgenomen, hadden we onze joystick nodig om een toetsenbord te emuleren. Op deze manier kunnen gebruikers zonder joystick de robot nog steeds rechtstreeks vanaf een toetsenbord besturen, maar kunnen anderen de joystick gebruiken.

Hiervoor hadden we alleen een Arduino Uno die niet de mogelijkheid heeft om de bibliotheek te gebruiken, dus hebben we deze rechtstreeks geprogrammeerd met behulp van het USB-protocol dat bekend staat als Device Firmware Update (DFU), waarmee de Arduino kan worden geflitst met een generieke USB HID-toetsenbordfirmware. Met andere woorden, wanneer de arduino op de usb is aangesloten, wordt deze niet langer herkend als een arduino maar als een toetsenbord!

Stap 12: Joystick - Schakelschema

Joystick - Schakelschema
Joystick - Schakelschema

Hier is hoe we de joystick hebben aangesloten.

Stap 13: Joystick - Toetsenbordemulator

Om uw Arduino Uno een toetsenbord te laten emuleren, moet u de Atmega16u2-chip rechtstreeks op de Arduino programmeren via een Manual Device Firmware Update (DFU). De volgende stappen beschrijven het proces voor een Windows-machine en helpen u hopelijk enkele van de problemen te voorkomen die we tegenkwamen.

De eerste stap is om de Atmel USB-driver handmatig naar de Arduino te schrijven, zodat deze wordt herkend als een USB en niet als een Arduino, waardoor deze kan worden geflitst met de FLIP-programmer.

  1. Download Atmel's FLIP Programmer van hier
  2. Sluit uw Arduino Uno. aan
  3. Ga naar Apparaatbeheer en zoek de Arduino. Het staat onder COM of Unknown Device. Sluit hem aan en uit om er zeker van te zijn dat dit het juiste apparaat is.
  4. Zodra u de Arduino Uno in Apparaatbeheer hebt gevonden, klikt u er met de rechtermuisknop op en selecteert u eigenschappen > Stuurprogramma > Stuurprogramma bijwerken > Blader door mijn computer naar stuurprogrammasoftware > Laat me kiezen uit een lijst met beschikbare stuurprogramma's op mijn computer > Schijf hebben > Blader naar de bestand "atmel_usb_dfu.inf" en selecteer het. Dit zou in de map moeten staan waar uw Atmel FLIP Programmer is geïnstalleerd. Op mijn computer is het hier: C:\Program Files (x86)\Atmel\Flip 3.4.7\usb\atmel_usb_dfu.inf
  5. Installeer de driver
  6. Ga nu terug naar Apparaatbeheer, je zou een "Atmel USB-apparaten" moeten zien met de Arduino Uno nu gelabeld als een ATmega16u2!

Nu de computer de Arduino Uno herkent als een USB-apparaat, kunnen we de FLIP Programmer gebruiken om deze met 3 afzonderlijke bestanden te flashen en er een toetsenbord van te maken.

Als je je Arduino Uno na het eerste deel hebt losgekoppeld, sluit je hem weer aan.

  1. FLIP openen
  2. Reset de Arduino Uno door kort de stroom op aarde aan te sluiten.
  3. Klik op Apparaatselectie (pictogram zoals een microchip) en selecteer ATmega16U2
  4. Klik op Selecteer een communicatiemedium (pictogram zoals een USB-kabel) en selecteer USB. Als je het eerste deel correct hebt voltooid, zouden de andere grijze knoppen bruikbaar moeten worden.
  5. Ga naar Bestand > Hex-bestand laden > en upload het bestand Arduino-usbserial-uno.hex
  6. In het FLIP-venster ziet u drie secties: Operations Flow, FLASH Buffer Information en ATmega16U2. Vink in de bewerkingsstroom de vakjes voor Wissen, Programmeren en Verifiëren aan en klik vervolgens op Uitvoeren.
  7. Zodra dit proces is voltooid, klikt u op Toepassing starten in het gedeelte ATmega16U2.
  8. Sluit de Arduino aan door hem los te koppelen van de computer en weer aan te sluiten.
  9. Reset de Arduino Uno door kort de stroom op aarde aan te sluiten.
  10. Open de Arduino IDE en upload het bestand JoyStickControl_Code.ino naar het bord.
  11. Sluit de Arduino aan door hem los te koppelen van de computer en weer aan te sluiten.
  12. Reset de arduino door kort de stroom op aarde aan te sluiten.
  13. Ga terug naar FLIP, zorg ervoor dat bij apparaatselectie Atmega16U2 staat
  14. Klik op Selecteer een communicatiemedium en selecteer USB.
  15. Ga naar Bestand > Hex-bestand laden > en upload het bestand Arduino-keyboard-0.3.hex
  16. In het FLIP-venster ziet u drie secties: Operations Flow, FLASH Buffer Information en ATmega16U2. Vink in de bewerkingsstroom de vakjes voor Wissen, Programmeren en Verifiëren aan en klik vervolgens op Uitvoeren.
  17. Zodra dit proces is voltooid, klikt u op Toepassing starten in het gedeelte ATmega16U2.
  18. Sluit de Arduino aan door hem los te koppelen van de computer en weer aan te sluiten.
  19. Als je nu naar Apparaatbeheer gaat, zou er een nieuw HID-toetsenbordapparaat moeten zijn onder Toetsenborden.
  20. Open een kladblok of een willekeurige teksteditor en begin met het bewegen van de joystick. Je zou moeten zien dat er cijfers worden getypt!

Als je de code in de Arduino-schets wilt wijzigen, bijvoorbeeld door nieuwe commando's naar de joystick te schrijven, moet je deze elke keer met alle 3 de bestanden flashen.

Enkele nuttige links:Arduino DFUAtLibUsbDfu.dll niet gevonden

Deze toetsenbordemulator is gebaseerd op deze tutorial van Michael op 24 juni 2012.

Stap 14: Netwerkcommunicatie

Netwerk communicatie
Netwerk communicatie

Om videostreams te ontvangen en opdrachten naar de robot te sturen, waar ook ter wereld, hebben we een manier nodig om gegevens van en naar de ESP32-CAM te krijgen. Dit gebeurt in twee delen, een verbindingshandler op uw lokale netwerk en een openbare server. Download hiervoor de drie bestanden:

  • Handlers.py: geeft informatie door van ESP32-CAM en de openbare server (getest op Python 3.8)
  • Flask_app.py: definieert hoe uw app reageert op inkomende verzoeken.
  • Robot_stream.html: geeft video weer in uw browser en luistert naar commando's via toetsenbord / joystick (getest op Chrome)

Verbindingshandler U kunt dit rechtstreeks coderen in app_httpd.cpp, maar voor eenvoudiger debuggen gebruiken we een Python-script dat wordt uitgevoerd op een pc die op hetzelfde netwerk is aangesloten. Open handlers.py en werk het IP-adres en de gebruikersnaam bij naar die van u, en u bent klaar om te gaan. De stream start wanneer u dit bestand uitvoert.

Public Server Om toegang te krijgen tot alles op internet, kunt u een server starten met een PaaS naar keuze. Op pythonanywhere (PA) duurt dit instellen minder dan 5 minuten:

  1. Maak een account aan en log in
  2. Ga naar het tabblad "Web" en klik op "Een nieuwe web-app toevoegen", kies Flask en Python 3.6
  3. Kopieer flask_app.py naar /mysite directory
  4. Kopieer robot_stream.html naar de map /mysite/templates
  5. Klik op "Opnieuw laden"

En… je bent helemaal klaar!

Disclaimer: deze netwerkworkflow is snel en eenvoudig, maar verre van ideaal. RTMP of sockets zouden geschikter zijn voor streaming, maar ze worden niet ondersteund op PA en vereisen enige ervaring met netwerken en serverconfiguratie. Het wordt ook aanbevolen om een beveiligingsmechanisme toe te voegen om de toegang te controleren.

Stap 15: Alles samenbrengen

Zet nu uw robot aan, voer handlers.py uit op een computer (verbonden met hetzelfde netwerk als de robot) en u kunt de robot besturen vanuit een browser op basis van de url die u instelt, waar u maar wilt. (bijv.