Sisällysluettelo:
- Vaihe 1: Tarvittava laitteisto
- Vaihe 2: Rungon kokoaminen
- Vaihe 3: Elektroniikan asennus
- Vaihe 4: Verkkokameran lisääminen
- Vaihe 5: Johdottaa kaikki
- Vaihe 6: Määritä RPI
- Vaihe 7: RPI -sarjaportin määrittäminen
- Vaihe 8: Python -moduulien asentaminen
- Vaihe 9: RoboClawin asennus
- Vaihe 10: Rover -ohjelman/tiedostojen asennus
- Vaihe 11: Botin käynnistäminen
- Vaihe 12: Botin ohjaussivun avaaminen
- Vaihe 13: Python/Flask Code
- Vaihe 14: Muiden laitteiden käyttö
Video: Web -ohjattu Rover: 14 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Robottien rakentaminen ja leikkiminen on suurin syyllinen elämässäni. Toiset pelaavat golfia tai hiihtoa, mutta minä rakennan robotteja (koska en voi pelata golfia tai hiihtää:-). Minusta se on rentouttavaa ja hauskaa! Useimpien robottien valmistamiseen käytän runkosarjoja. Pakkausten käyttö auttaa minua tekemään enemmän sitä, mistä pidän, ohjelmistoja ja elektroniikkaa ja tekee myös paremman rungon peukalolleni.
Tässä Instructable -ohjelmassa tarkastelemme, mitä tarvitaan yksinkertaisen mutta vankan Wifi/web -ohjatun roverin tekemiseen. Käytetty alusta on Actobotics Gooseneck. Valitsin sen koon, laajennuskyvyn ja kustannusten vuoksi, mutta voit käyttää mitä tahansa muuta valitsemasi alusta.
Tällaiseen projektiin tarvitsemme hyvän kiinteän yhden levyn tietokoneen ja tälle botille päätin käyttää Linux -pohjaista Raspberry Pi (RPI) -tietokonetta. RPI (ja Linux) tarjoaa meille paljon koodausvaihtoehtoja ja Pythonia käytetään koodauspuolella. Web -käyttöliittymässä käytän Flaskia, joka on kevyt verkkokehys Pythonille.
Moottorien käyttämiseksi valitsin RoboClaw 2x5a. Se mahdollistaa yksinkertaisen sarjaliikenteen kommunikoinnin ja toimii hyvin RPI: n ja Gooseneckin moottoreiden kanssa.
Lopuksi siinä on verkkokamera POV -tyyppiselle videopalautteelle etäkäyttöä varten. Käsittelen kutakin aihetta tarkemmin myöhemmin.
Vaihe 1: Tarvittava laitteisto
- Actobotics Gooesneck -runko tai sopiva vaihtoehto
- Valitsemasi Raspberry Pi (tai klooni) - Tässä botissa käytetään RPI -mallia B, mutta kaikki, joissa on vähintään kaksi USB -porttia, toimivat
- Vakiovarustelevy B x1
- 90 ° yhden kulman kanavan kiinnike x1
- RoboClaw 2x5a -moottorin ohjain
- S3003 tai vastaava vakiokokoinen servo
- Pieni leipälauta tai Mini -leipälauta
- Naaras -naarashyppyjohdot
- Uros -naarasliitinjohdot
- Verkkokamera (valinnainen) - Käytän Logitech C110: tä, ja tässä on luettelo RPI: n tuetuista kameroista
- 5v-6v virtalähde servovirralle
- 7.2v-11.1v akku käyttömoottorin virransyöttöön
- 5v 2600mah (tai korkeampi) USB -virtapankki RPI: lle
- USB Wifi -sovitin
Käytän botissani 4 tuuman renkaita, jotta se olisi hieman enemmän All-Terrain-Indoor. Tätä vaihtoehtoa varten tarvitset:
- 4 "raskaat pyörät x2
- 4 mm: n reikäruuvin napa (0,770 tuumaa) x2
Vaihe 2: Rungon kokoaminen
Kokoa runko ensin rungon tai videon mukana toimitettujen ohjeiden mukaisesti. Kun olet valmis, sinulla pitäisi olla jotain kuvan kaltaista. HUOMAUTUS: Jätä kiinnityspidike pois päältä, kun asennat kaulaosaa.
Botissani valitsin rungon mukana tulleet pyörät 4 tuuman raskaille pyörille. Tämä on valinnainen eikä sitä tarvita, ellet halua tehdä samoin.
Vaihe 3: Elektroniikan asennus
Gooseneckissä on paljon tilaa ja vaihtoehtoja elektroniikan kiinnittämiseen. Annan sinulle nämä kuvat ohjeeksi, mutta voit valita, miten haluat esittää kaiken. Voit kiinnittää levyn ja akut stand-off-laitteilla, kaksipuolisella teipillä, tarranauhalla tai servoteipillä.
Vaihe 4: Verkkokameran lisääminen
Ota 90 asteen kiinnike, kevyt servopyörä ja neljä (4).3125 ruuvia tähän vaiheeseen:
- Ota servopyörä ja aseta se kannattimen toiselle puolelle ja kiinnitä ne.2125 "ruuveilla, kuten kuvassa
- Kiinnitä seuraavaksi servo servokannattimeen
- Kiinnitä 90 asteen kannatin ja servosarvi servopäähän ja yhdistä ne servon mukana toimitetulla äänitorvella.
- Kiinnitä nyt Servo pidikkeeseen hanhen kaulan yläosaan jäljellä olevilla ruuveilla
- Kiinnitä kamera vetoketjuilla tai kaksipuolisella teipillä 90 asteen kiinnikkeeseen
Käytä kuvia oppaina tarvittaessa.
Vaihe 5: Johdottaa kaikki
Johdotus on melko kireä eteenpäin tälle robotille.
Moottorit:
Juotosjohdot molemmissa moottoreissa, jos et ole jo tehnyt niin
Robotit edessä (pää hanhenkaulalla) poispäin sinusta:
- Liitä vasemman moottorin moottorijohdot kanaviin M1A ja M1B
- Kytke oikean moottorin moottorijohdot kanaviin M2A ja M2B
Maaliitännät (GND):
- Kytke yksi RoboClawin maadoitustappi maadoitushyppylevyyn. RoboClawin maadoitusjohto on lähimpänä keskustaa (katso kuva)
- Liitä RPI: n PIN 6 hyppylevyyn. Katso RPI -otsikon kuvasta nastamääritykset.
- Liitä GND servoakusta yhteen hyppylevyn nastoista.
- Vie hyppyjohdin hyppylevyltä servo GND -johtimelle.
RPI RoboClawille:
Liitä RPI GPIO14 TXD -tappi RoboClaw S1 -tappiin
Teho:
- Kytke POS -johto servoakusta servo POS -johtoon
- Liitä moottorin akun POS -johto RoboClaw -moottorin teholiitännän POS -liittimeen (+). Jätämme GND -terminaalin toistaiseksi irrotettuna.
Vaihe 6: Määritä RPI
Oletan, että käyttäjä tietää jonkin verran Linuxista ja RPI: stä. En käsittele sitä, miten asetan tai muodostan yhteyden. Jos tarvitset apua siinä, käytä alla olevia sivuja.
Katso RPI -asetukset seuraavilta sivuilta:
- RPI -perusasetukset
- RPI Pikaopas
- NOOBS -asennus kilta
Yleisille hyppysivuille RPI-pääsivu ja eLinux-sivut ovat loistava aloituspaikka.
Katso tästä linkistä RPI: n yleiset Wifi -asetukset.
Jos aiot käyttää jonkinlaista kameraa tai verkkokameraa botissa, katso nämä sivut saadaksesi tarvittavat perustiedostot.
- RPI -nokan asetukset
- eLinix RPI -kameran asennus
Striimaa video:
On olemassa muutamia tapoja saada videon suoratoisto toimimaan RPI: llä, mutta menetelmä, jota pidän parempana, on Motion.
Asenna se RPI: lle suorittamalla tämä: sudo apt-get install motion
Tämä opettavainen ohittaa sen asettamisen myös suoratoistoon.
Vaihe 7: RPI -sarjaportin määrittäminen
Meidän on poistettava Linux -konsolitila käytöstä RX: n ja TX: n käyttämiseksi, koska haluamme keskustella RoboClaw -moottorinohjaimen kanssa tästä portista. Voit tehdä tämän käyttämällä tätä menetelmää tai tätä työkalua. Valinta on sinun menetelmässä, koska molemmat tekevät lopulta saman asian.
Vaihe 8: Python -moduulien asentaminen
Tarvitset pythonin asennettuna RPI: hen sekä python -paketin asennusohjelman pip.
Asenna pip seuraavasti:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Sitten:
- sudo pip asennuspullo
- sudo pip asenna pyserial
- sudo pip asenna RPIO
Tämä on kaikki koodit, joita tarvitaan koodin suorittamiseen.
Vaihe 9: RoboClawin asennus
Minulla on robotti koodi, joka puhuu RoboClaw'n kanssa vakio -sarjatilassa 19200 baudilla.
Määritä RoboClaw tähän:
- Paina "MODE" -painiketta RoboClawissa
- Paina asetuspainiketta, kunnes LED vilkkuu 5 (viisi) kertaa viiveiden välillä
- Tallenna painamalla "LIPO" -painiketta
- Paina seuraavaksi "SET" -painiketta, kunnes LED vilkkuu 3 (kolme) kertaa viiveiden välillä
- Tallenna painamalla LIPO -painiketta
Siinä moottorinohjaimen asettaminen. Katso yllä olevasta linkistä pdf, jos haluat lisätietoja.
Vaihe 10: Rover -ohjelman/tiedostojen asennus
Lataa ja kopioi rover.zip -tiedosto pi -hakemistosi RPI: hen.
Jos käytössäsi on Linux tai Mac, voit käyttää sitä scp: llä:
scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~
Windowsissa voit ladata pscp: n ja käyttää sitä ja tehdä sitten:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
Kun zip -tiedosto on kopioitu RPI: lle, kirjaudu siihen pi -käyttäjänä.
Juokse nyt:
purkaa rover.zip
Tämä purkaa tiedostot kansioon nimeltä "rover" ja kansiossa on seuraavat tiedot:
- restrover.py (Python -koodi robotille)
- staattinen (pitää hallintasivun painikkeiden kuvatiedostot)
- mallit (sisältää index.htlm -tiedoston, ohjaussivun)
Jos käytät verkkokameraa, muokkaa mallikansion index.html -tiedoston alareunassa olevaa riviä. Muuta IFRAME -rivin URL -osoite vastaamaan videovirran src -URL -osoitetta.
Vaihe 11: Botin käynnistäminen
Liitä USB -virta RPI: hen.
Käynnistä bot -koodi kirjautumalla sisään pi -käyttäjänä ja suorittamalla:
- cd rover
- sudo python restrover.py
Jos kaikki oli OK, sinun pitäisi nähdä kuvan kaltainen näyttö tässä vaiheessa
Jos näet virheitä tai ongelmia, sinun on korjattava ne ennen jatkamista.
Kytke nyt GND (-) -johto RoboClaw-moottoritulon NEG (-) -liitäntään.
Vaihe 12: Botin ohjaussivun avaaminen
Kun robotin python -skripti on käynnissä, käynnistä RoboClaw ja siirry sitten RPI: n IP -osoitteeseen, kuten:
sinun_rpi_ip
Sinun pitäisi nähdä Web -ohjaussivu ponnahdusikkunassa kuten kuvissa. Jos ei, tarkista RPI -lähtöliitin ja etsi mahdolliset virheet ja korjaa ne.
Kun olet sivulla, olet valmis hallitsemaan bottia.
Robotti käynnistyy "Med run" -asennossa ja keskinopeudella.
Bottia voidaan ohjata sivun painikkeilla tai näppäimistön näppäimillä.
Avaimet ovat:
- w - eteenpäin
- z - taakse/taaksepäin
- a - pitkä käännös vasemmalle
- s - pitkä käännös oikealle
- q - lyhyt käännös vasemmalle
- e - lyhyt oikea käännös
- 1 - panorointikamera vasemmalla
- 2 - panorointi oikea
- 3 - pannu täynnä vasemmalla
- 4 - pannu täynnä
- / - koti/ keskikamera
- h - pysäytä/pysäytä robotti
Lähetettyjen komentojen välillä on puolen sekunnin viivepuskuri. Tein tämän poistamaan ei -toivotut toistuvat komennot. Voit tietysti poistaa tämän koodista, jos haluat (hakemistossa index.html)
Muiden säätimien ja niiden hallinnan tulisi olla itsestään selviä.
Vaihe 13: Python/Flask Code
Tämä botti käyttää Pythonia ja Flask -verkkokehystä. Voit oppia lisää Flaskista täältä, jos olet kiinnostunut.
Suuri ero Flask -sovellukseen ja normaaliin Python -komentosarjaan on @app.route -luokka/-menetelmä, jota käytetään URI -käsittelyn suorittamiseen. Muuten se on suurelta osin melko normaali Python.
#!/usr/bin/env python
# # Wifi/Web -pohjainen Rover # # Kirjoittanut Scott Beasley - 2015 # # Käyttää RPIO: ta, pyserialia ja pulloa # tuontiajan tuontisarja RPIO: sta tuonti PWM pullojen tuonnista Pullo, render_template, request app = Flask (_name_, static_url_path = '')) # Muodosta yhteys porttiin ja puhu Roboclaw -moottorinohjaimelle: # Muuta siirtonopeutta tässä, jos se on eri kuin 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) paitsi IOError: print ("Comm port not not found ") sys.exit (0) # Nopeus- ja taajuusmuuttajan muuttujat last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo neutraali asento (koti) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18)) def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti minä tulosta "Eteenpäin" go_forward () last_direction = 0 # uni 100ms + run_time time.sleep (0.100 + run_time) # Jos ei ole jatkuvaa, pysäytä viiveen jälkeen, jos run_time> 0: last_direction = -1 halt () palauta "ok" @ app.route ("/backward") def backward (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # uni 100ms + run_time time.sleep (0.100 + run_time) # Jos ei jatkuvaa, keskeytä viiveen jälkeen jos run_time> 0: last_direction = -1 halt () palauta "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 second 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 () # uni @1/2 toisen kerran.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): globaali viimeinen_suunta, käännös_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 halt () 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 halt () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction print "stop" halt () last_direction = -1 # uni 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) # lepotila 150 ms. uni (0.150) return "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # uni 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) # uni 150ms time.sleep (0.150) return" ok " @app.route ("/panfull_rt ") def panfull_rt (): global servo_pos print" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # uni 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 # Päivitä nykyinen suunta saadaksesi uuden nopeuden, jos 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 # Päivitä nykyinen suunta saadaksesi uusi nopeus, jos 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 # Päivitä nykyinen suunta saadaksesi uuden nopeuden, jos last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/jatkuva ") def jatkuva (): yleinen run_time print" Jatkuva juoksu "run_time = 0 # uni 100ms time.sleep (0.100) return" ok " @app.route ("/mid_run ") def mid_run (): global run_time print" Mid run "run_time = 0.750 halt () # 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 halt () # lepotila 100 ms aika. nukkuminen (0.100) palauta "ok" # # Moottorikäytön toiminnot # def go_forward (): globaali nopeuden_siirto, jos nopeuden_siirto! = 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', port = 80, debug = True)
Jos et halua tai tarvitset virheenkorjaustietoja Flaskista, aseta debug -asetukseksi 'false' app.run -rivillä.
jos _nimi_ == "_pää_":
app.run (isäntä = '0.0.0.0', portti = 80, virheenkorjaus = epätosi)
Voit myös muuttaa porttia, jota Flask http -palvelin kuuntelee täällä.
Vaihe 14: Muiden laitteiden käyttö
Jos haluat käyttää muuta laitteistoa, kuten toisen tyyppistä SBC: tä (Single Board Computer), sinulla pitäisi olla vähän ongelmia saada Python ja Flask toimimaan muilla levyillä, kuten Beagle Bone, PCDuino jne.… Sinun on vaihdettava koodi vastaamaan GPIO: ta asettella ja käyttää uuden levyn servoajo -ominaisuuksia.
Jos haluat käyttää toisen tyyppistä moottoriajuria, sinun on vain muokattava go_forward-, go_backward-, go_left-, go_right- ja pysäytystoimintoja, jotta voit tehdä sen, mitä korvaava moottoriajuri tarvitsee, jotta moottori suorittaa kyseisen toiminnon.
Suositeltava:
Itseohjaavan veneen rakentaminen (ArduPilot Rover): 10 vaihetta (kuvilla)
Itseohjaavan veneen rakentaminen (ArduPilot Rover): Tiedätkö mikä on siistiä? Miehittämättömät itseajoneuvot. Ne ovat itse asiassa niin siistejä, että me (ylioppilaskollegani ja minä) aloimme rakentaa sellaisen itse vuonna 2018. Siksi myös lähdin tänä vuonna lopettamaan sen vihdoin vapaa -ajallani. Tässä Inst
SOLARBOI - 4G Solar Rover Out tutkimaan maailmaa!: 3 vaihetta (kuvilla)
SOLARBOI - 4G Solar Rover Out to Explore the World !: Pienestä asti olen aina rakastanut tutkia. Vuosien varrella olen nähnyt monia rakennuksia kauko -ohjattavia autoja, joita ohjataan WiFi -yhteydellä, ja ne näyttivät tarpeeksi hauskoilta. Mutta haaveilin mennä niin paljon pidemmälle - ulos todelliseen maailmaan, kauas rajojen ulkopuolelle
IOT Lunar Rover Raspberrypi+Arduino: 5 vaihetta (kuvilla)
IOT Lunar Rover Raspberrypi+Arduino: Tämä projekti on saanut inspiraationsa Intian kuutehtävästä Chandryaan-2, joka toteutetaan syyskuussa 2019.Tämä on erityinen tehtävä, koska he laskeutuvat paikkaan, jossa kukaan ei ole ennen laskeutunut. osoittaakseni tukeni päätin tehdä
Koirarobotti: Lego Robot Rover verkkokameralla: 17 vaihetta (kuvilla)
Koirarobotti: Lego Robot Rover Verkkokameralla: Näin voit tehdä Lego -robotin, jota voit ohjata miltä tahansa näytöltä wifi -yhteyden kautta. Siinä on myös verkkokamera, joten näet missä olet ja LED -valot silmille! Tämä on loistava projekti lasten kanssa, koska he voivat tehdä logon rakentamisen ja voit osallistua
Arduino RC Amphibious Rover: 39 vaihetta (kuvilla)
Arduino RC Amphibious Rover: Parin viime kuukauden aikana olemme kehittäneet kauko -ohjattavan roverin, joka voi liikkua sekä maalla että vedellä. Vaikka ajoneuvo, jolla on samankaltaiset ominaisuudet, käyttää erilaisia voimansiirtomekanismeja, yritimme saavuttaa kaikki käyttövoimat