Inhoudsopgave:
- Stap 1: Benodigde hardware
- Stap 2: Het chassis monteren
- Stap 3: De elektronica monteren
- Stap 4: De webcam toevoegen
- Stap 5: Alles aansluiten
- Stap 6: De RPI instellen
- Stap 7: De RPI seriële poort configureren
- Stap 8: De Python-modules installeren
- Stap 9: De RoboClaw instellen
- Stap 10: Het Rover-programma/bestanden installeren
- Stap 11: De bot opstarten
- Stap 12: Toegang tot de Bot-besturingspagina
- Stap 13: De Python/Flask-code
- Stap 14: Andere hardware gebruiken
Video: Webgestuurde Rover: 14 stappen (met afbeeldingen)
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Bouwen en spelen met robots is mijn grootste guilty pleasure in het leven. Anderen spelen golf of skiën, maar ik bouw robots (omdat ik niet kan golfen of skiën:-). Ik vind het ontspannend en leuk! Om de meeste van mijn bots te maken, gebruik ik chassiskits. Het gebruik van kits helpt me te doen wat ik het liefste doe, de software en elektronica, en zorgt ook voor een beter chassis voor mezelf.
In deze Instructable zullen we kijken wat er nodig is om een eenvoudige maar robuuste wifi/webgestuurde rover te maken. Het gebruikte chassis is de Actobotics Gooseneck. Ik heb hem gekozen vanwege zijn grootte, uitbreidbaarheid en kosten, maar je kunt elk ander chassis naar eigen keuze gebruiken.
Voor een project als dit hebben we een goede solide single board computer nodig en voor deze bot heb ik ervoor gekozen om de Raspberry Pi (RPI) te gebruiken, een op Linux gebaseerde computer. De RPI (en Linux) geeft ons veel coderingsopties en Python zal worden gebruikt voor de coderingskant. Voor de webinterface gebruik ik Flask, een lichtgewicht webframework voor Python.
Om de motoren aan te drijven heb ik gekozen voor een RoboClaw 2x5a. Het maakt eenvoudige seriële communicatie mogelijk om het te besturen en werkt goed met de RPI en de motoren op de zwanenhals.
Ten slotte heeft het een webcam voor videofeedback van het POV-type om het op afstand te besturen. Ik zal elk onderwerp later in meer detail behandelen.
Stap 1: Benodigde hardware
- Actobotics Gooesneck-chassis of een geschikte vervanger naar keuze
- Raspberry Pi naar keuze (of kloon) - Een RPI-model B wordt gebruikt op deze bot, maar elke met ten minste twee USB-poorten zal werken
- Standaard servoplaat B x1
- 90 ° enkele hoek kanaalbeugel x1"
- RoboClaw 2x5a motordriver
- S3003 of vergelijkbare servo van standaardformaat
- Klein breadboard of mini breadboard
- Vrouwelijke naar vrouwelijke jumperdraden
- Man-vrouw jumperdraden
- Webcam (optioneel) - Ik gebruik een Logitech C110 en hier is een lijst met ondersteunde camera's voor de RPI
- 5v-6v stroombron voor servovermogen
- 7.2v-11.1v batterij voor aandrijfmotorvoeding
- 5v 2600mah (of hoger) USB powerbank voor de RPI
- USB Wifi-adapter
Op mijn bot gebruik ik 4 wielen om het een beetje meer All-Terrain-Indoor te maken. Voor deze optie heb je nodig:
- 4 "Zwaar uitgevoerd wiel x2
- 4 mm boring stelschroefnaaf (0,770 inch) x2
Stap 2: Het chassis monteren
Monteer eerst het chassis volgens de instructies die bij het chassis of de video zijn geleverd. Na het afronden zou je zoiets als de afbeelding moeten hebben. OPMERKING: Laat bij het monteren van het nekgedeelte de montagebeugel eraf.
Op mijn bot heb ik ervoor gekozen om de wielen waarmee het chassis werd geleverd te vervangen door 4 zware wielen. Dit is optioneel en niet nodig, tenzij je hetzelfde wilt doen.
Stap 3: De elektronica monteren
De Gooseneck heeft veel ruimte en mogelijkheden voor het monteren van je elektronica. Ik geef je deze foto's als richtlijn, maar je kunt kiezen hoe je het allemaal wilt indelen. U kunt afstandhouders, dubbelzijdige tape, klittenband of servotape gebruiken om het bord en de batterijen te monteren.
Stap 4: De webcam toevoegen
Neem de 90 graden beugel, lichtgewicht servo-hub en vier (4) van de.3125 -schroeven voor deze stap:
- Neem de servo-hub en plaats deze aan één kant van de beugel en bevestig ze samen met de.2125 "schroeven zoals afgebeeld
- Monteer vervolgens de servo in de servobeugel
- Bevestig de 90 graden beugel met de servohoorn aan de servo-ruggengraat en gebruik de hoornschroef die bij de servo is geleverd om ze met elkaar te verbinden
- Monteer nu de servo in beugel op de bovenkant van de zwanenhals met de resterende schroeven
- Monteer de camera met kabelbinders of dubbelzijdig plakband op de 90 graden beugel
Gebruik indien nodig de afbeeldingen voor handleidingen.
Stap 5: Alles aansluiten
De bedrading is redelijk recht naar voren voor deze robot.
De motoren:
Soldeersnoeren op beide motoren als je dat nog niet hebt gedaan
Met de voorkant van de robot (het uiteinde met de zwanenhals) van je af gericht:
- Sluit de motordraden op de linker motor aan op kanaal M1A en M1B
- Sluit de motordraden op de rechter motor aan op het kanaal M2A en M2B
Massa (GND) aansluitingen:
- Sluit een aardingspin op de RoboClaw aan op het grondjumperbord. De grondpinlijn op de RoboClaw is het dichtst bij het midden (zie foto)
- Verbind PIN 6 op de RPI met het jumperbord. Zie de RPI-headerfoto voor pintoewijzingen.
- Sluit de GND van het servobatterijpakket aan op een van de pinnen op het jumperbord.
- Leid een jumperdraad van het jumperbord naar de GND-draad van de servo's.
RPI naar RoboClaw:
Sluit de RPI GPIO14 TXD-pin aan op de RoboClaw S1-pin
Stroom:
- Sluit de POS-draad van de servobatterij aan op de POS-kabel van de servo
- Sluit de POS-draad van de motoraccu aan op de POS (+) van de RoboClaw-motorvoedingsingang. We laten de GND-terminal voorlopig los.
Stap 6: De RPI instellen
Ik neem aan dat de gebruiker hier iets weet over Linux en de RPI. Ik behandel niet hoe je er een moet instellen of verbinden. Als je daarbij hulp nodig hebt, gebruik dan de onderstaande pagina's.
Bekijk de volgende pagina's om uw RPI-configuratie te krijgen:
- RPI basisinstellingen
- RPI Snelstartgids
- NOOBS-configuratiegids
Voor algemene startpagina's zijn de RPI-hoofdpagina en de eLinux-pagina's geweldige plaatsen om te beginnen.
Zie deze link voor algemene wifi-instellingen van RPI.
Als je van plan bent een soort camera of webcam op de bot te gebruiken, bekijk dan deze pagina's om de benodigde basisbestanden te krijgen.
- RPI-camera instellen
- eLinix RPI-camera instellen
Streamingvideo:
Er zijn een paar manieren om videostreaming op een RPI te laten werken, maar de methode die ik verkies is het gebruik van Motion.
Om het op uw RPI te installeren, voert u dit uit: sudo apt-get install motion
Deze instructable gaat ook over het instellen voor streaming.
Stap 7: De RPI seriële poort configureren
We moeten de Linux-consolemodus uitschakelen voor het gebruik van de RX en TX omdat we vanaf deze poort met de RoboClaw-motorcontroller willen praten. Om dit te doen, kunt u deze methode of deze tool gebruiken. De keuze is aan jou over de methode, omdat ze uiteindelijk allebei hetzelfde doen.
Stap 8: De Python-modules installeren
U moet python op de RPI hebben geïnstalleerd, evenals het installatieprogramma pip van het python-pakket.
Om pip te installeren:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Vervolgens:
- sudo pip install flask
- sudo pip install pyserial
- sudo pip installeer RPIO
Dit zijn alle modules die nodig zijn om de code uit te voeren.
Stap 9: De RoboClaw instellen
Ik heb de robotcode die met de RoboClaw praat in de standaard seriële modus op 19200 baud.
Om de RoboClaw hiervoor in te stellen:
- Druk op de "MODE"-knop op de RoboClaw
- Druk op de instelknop totdat de LED 5 (vijf) keer knippert tussen de vertragingen
- Druk op de knop "LIPO" om op te slaan
- Druk vervolgens op de "SET"-knop totdat de LED 3 (drie) keer knippert tussen de vertragingen
- Druk op de LIPO-knop om op te slaan
Dat is het voor het instellen van de motorcontroller. Zie de hierboven gelinkte pdf voor meer informatie indien nodig.
Stap 10: Het Rover-programma/bestanden installeren
Download en kopieer het rover.zip-bestand naar uw RPI in uw pi-gebruikersmap.
Als je Linux of een Mac gebruikt, kun je 'scp' gebruiken om dit te doen:
scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~
Voor Windows kunt u pscp downloaden en gebruiken en vervolgens het volgende doen:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
Zodra het zipbestand naar de RPI is gekopieerd, logt u in als de pi-gebruiker.
Voer nu uit:
unzip rover.zip
Dit zal de bestanden uitpakken naar een map met de naam 'rover' en het volgende onder die map hebben:
- restrover.py (De python-code voor de robot)
- statisch (bevat de afbeeldingsbestanden voor de knoppen op de bedieningspagina)
- sjablonen (bevat het bestand index.htlm, de besturingswebpagina)
Als u een webcam gebruikt, wijzigt u de regel onderaan het bestand index.html in de sjabloonmap. Wijzig de URL in de IFRAME-regel zodat deze overeenkomt met de src-URL voor uw videostream.
Stap 11: De bot opstarten
Sluit de USB-voeding aan op de RPI.
Om de botcode op te starten, logt u in als de pi-gebruiker en voert u het volgende uit:
- cd rover
- sudo python restrover.py
Als alles in orde was, zou u een scherm moeten zien dat lijkt op de afbeelding in deze stap
Als u fouten of problemen ziet, moet u deze oplossen voordat u verder gaat.
Sluit nu de GND (-) draad aan op de NEG (-) aansluiting op de RoboClaw motor voedingsingang.
Stap 12: Toegang tot de Bot-besturingspagina
Nadat het python-script van de robot is uitgevoerd, schakelt u de RoboClaw in en navigeert u vervolgens naar het IP-adres van uw RPI zoals:
uw_rpi_ip
U zou de webbeheerpagina moeten zien verschijnen zoals in de afbeeldingen. Als dat niet het geval is, controleert u uw RPI-uitgangsterminal en zoekt u naar eventuele fouten en corrigeert u deze.
Eenmaal op de pagina bent u klaar om de bot te besturen.
De robot start in de instelling "Med run" en op gemiddelde snelheid.
De bot kan worden bediend via de knoppen op de pagina of met toetsen op het toetsenbord.
De sleutels zijn:
- w - vooruit
- z - achteruit/achteruit
- a - lange bocht naar links
- s - lange bocht naar rechts
- q - korte bocht naar links
- e - korte bocht naar rechts
- 1 - pan camera links
- 2 - pan camera rechts
- 3 - pan helemaal links
- 4 - pan helemaal rechts
- / - home/center camera
- h - robot stoppen/stoppen
Er is een vertragingsbuffer van een halve seconde tussen de verzonden commando's. Ik deed dit om ongewenste herhaalde commando's te elimineren. Je kunt dit natuurlijk uit de code verwijderen als je wilt (in index.html)
De rest van de bedieningselementen en de besturing ervan zouden voor zichzelf moeten spreken.
Stap 13: De Python/Flask-code
Deze bot maakt gebruik van Python en het Flask-webframework. Als je geïnteresseerd bent, kun je hier meer te weten komen over Flask.
Het grote verschil met een Flask-app en een normaal Python-script is @app.route class/method die wordt gebruikt om de URI-afhandeling uit te voeren. Afgezien daarvan is het voor het grootste deel vrijwel normale Python.
#!/usr/bin/env python
# # Wifi/Web-gedreven Rover # # Geschreven door Scott Beasley - 2015 # # Gebruikt RPIO, pyserial en Flask # import time import serial from RPIO import PWM from bottle import Flask, render_template, request app = Flask (_name_, static_url_path = '') # Maak verbinding met de comm-poort om met de Roboclaw-motorcontroller te praten. Probeer: # Wijzig hier de baudrate als deze anders is dan 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) behalve IOError: print ("Comm-poort niet gevonden") sys.exit (0) # Snelheids- en aandrijfregelvariabelen last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neutrale positie (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Een beetje stilstaan om de tijd tot rust te brengen time.sleep (3) # # URI-handlers - alle acties op de botpagina worden hier gedaan # # Stuur de bots-besturingspagina (startpagina) @app.route ("/") def index (): return render_template ('index.html', naam = Geen) @app.route ("/forward") def forward (): global last_direction, run_ti me print "Forward" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Indien niet continu, stop dan na vertraging als run_time > 0: last_direction = -1 stop () return "ok" @ app.route ("/backward") def backward (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Indien niet continu, stop dan na vertraging if run_time > 0: last_direction = -1 halt () return "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 seconde time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # sleep @1/2 seconde time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): globale laatste_richting, turn_t m_offset print "Left forward turn" go_left () # sleep @1/8 second time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Right forward turn" go_right () # sleep @1/8 second time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop stop () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction print "Stop" stop () last_direction = -1 # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # slaap 150ms tijd. sleep (0.150) return "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft" servo_pos = 500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/panfull_rt") def panfull_rt (): global servo_pos print "Pan volledig rechts" servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # Update huidige richting om nieuwe snelheid te krijgen if last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/speed_mid") def speed_mid (): global speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Update huidige richting om nieuwe snelheid te krijgen if last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # Update huidige richting om nieuwe snelheid te krijgen if last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/continuous ") def continuous (): global run_time print "Continuous run" run_time = 0 # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/mid_run") def mid_run (): global run_time print "Mid run" run_time = 0.750 stop () # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/short_time") def short_time (): global run_time print "Short run" run_time = 0.300 stop () # sleep 100ms time.sleep (0.100) return "ok" # # Motor drive functies # def go_forward (): global speed_offset if speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset if speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset != 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset if speed_offset != 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0', poort = 80, debug = True)
Als u geen foutopsporingsinformatie van Flask wilt of nodig hebt, stelt u debug in op 'false' op de regel app.run.
if _name_ == "_main_":
app.run (host = '0.0.0.0', poort = 80, debug = False)
Je kunt hier ook de poort wijzigen waarop de Flask http-server luistert.
Stap 14: Andere hardware gebruiken
Als je andere hardware wilt gebruiken, zoals een ander type SBC (Single Board Computer), zou je weinig problemen moeten hebben om Python en Flask op andere boards zoals de Beagle Bone, PCDuino enz. lay-out en gebruik de servo-aandrijfmogelijkheden van het nieuwe bord.
Om een ander type motordriver te gebruiken, hoeft u alleen maar de functies go_forward, go_backward, go_left, go_right en stop te wijzigen om te doen wat de vervangende motordriver nodig heeft om de motor die specifieke functie te laten doen.
Aanbevolen:
Een computer demonteren met eenvoudige stappen en afbeeldingen: 13 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Een computer demonteren met eenvoudige stappen en afbeeldingen: dit is een instructie over het demonteren van een pc. De meeste basiscomponenten zijn modulair en gemakkelijk te verwijderen. Wel is het belangrijk dat je er goed over georganiseerd bent. Dit zal helpen voorkomen dat u onderdelen kwijtraakt, en ook bij het maken van de hermontage e
Wi-fi-gestuurde FPV Rover-robot (met Arduino, ESP8266 en stappenmotoren): 11 stappen (met afbeeldingen)
Wi-fi-gestuurde FPV Rover-robot (met Arduino, ESP8266 en stappenmotoren): deze instructable laat zien hoe je een op afstand bestuurbare tweewielige robotrover via een wifi-netwerk kunt ontwerpen, met behulp van een Arduino Uno die is aangesloten op een ESP8266 wifi-module en twee stappenmotoren. De robot is te besturen vanaf een gewone internetbrows
Webgestuurde Valentijn: 8 stappen (met afbeeldingen)
Web Controlled Valentine: met deze mix van software en hardware kun je overal met internettoegang een met hart versierd nachtlampje laten branden. Dus of je je nu herinnert op het werk, in een café, thuis of op je (web-enabled) mobiele telefoon, je kunt je valentijn vertellen dat je
Webgestuurde bewakingscamera - Ajarnpa
Webgestuurde bewakingscamera: het doel van dit werk is om te laten zien hoe een bewakingssysteem kan worden gebouwd met de webpagina-interface. De webcam kan via de interface in verticale of horizontale richting worden gedraaid, maar alleen in het gebied dat grenssensoren toelaten. Het vervolg
Webgestuurde Arduino LED - Ajarnpa
Webgestuurde Arduino LED: deze instructable laat je zien hoe je een web-enabled driekleurige LED bouwt op basis van een Arduino en het WIZnet Ethernet-schild, bestuurbaar vanuit elke webbrowser. Omdat de LED wordt belicht via een eenvoudige RESTful-webservice die draait op de Arduino-kleur