Sisällysluettelo:

Web -ohjattu Rover: 14 vaihetta (kuvilla)
Web -ohjattu Rover: 14 vaihetta (kuvilla)

Video: Web -ohjattu Rover: 14 vaihetta (kuvilla)

Video: Web -ohjattu Rover: 14 vaihetta (kuvilla)
Video: Виниловый сайдинг! Секреты монтажа и полезные хитрости, о которых мало кто знает! 2024, Marraskuu
Anonim
Web -ohjattu Rover
Web -ohjattu Rover
Web -ohjattu Rover
Web -ohjattu Rover

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

Laitteisto tarvitaan
Laitteisto tarvitaan
Laitteisto tarvitaan
Laitteisto tarvitaan
Laitteisto tarvitaan
Laitteisto tarvitaan
Laitteisto tarvitaan
Laitteisto tarvitaan
  • 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

Alustan kokoaminen
Alustan kokoaminen
Alustan kokoaminen
Alustan kokoaminen
Alustan kokoaminen
Alustan 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

Elektroniikan asennus
Elektroniikan asennus
Elektroniikan asennus
Elektroniikan asennus
Elektroniikan asennus
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

Verkkokameran lisääminen
Verkkokameran lisääminen
Verkkokameran lisääminen
Verkkokameran lisääminen
Verkkokameran lisääminen
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 kaikki ylös
Johdotus kaikki ylös
Johdotus kaikki ylös
Johdotus kaikki ylös
Johdotus kaikki ylös
Johdotus kaikki ylös
Johdotus kaikki ylös
Johdotus kaikki ylös

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

RPI: n asettaminen
RPI: n asettaminen

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:

  1. sudo apt-get install python-setuptools
  2. sudo easy_install pip

Sitten:

  1. sudo pip asennuspullo
  2. sudo pip asenna pyserial
  3. 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:

  1. Paina "MODE" -painiketta RoboClawissa
  2. Paina asetuspainiketta, kunnes LED vilkkuu 5 (viisi) kertaa viiveiden välillä
  3. Tallenna painamalla "LIPO" -painiketta
  4. Paina seuraavaksi "SET" -painiketta, kunnes LED vilkkuu 3 (kolme) kertaa viiveiden välillä
  5. 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

Botin käynnistäminen
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

Bot -ohjaussivun avaaminen
Bot -ohjaussivun avaaminen
Bot -ohjaussivun avaaminen
Bot -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: