Tartalomjegyzék:

Webvezérelt Rover: 14 lépés (képekkel)
Webvezérelt Rover: 14 lépés (képekkel)

Videó: Webvezérelt Rover: 14 lépés (képekkel)

Videó: Webvezérelt Rover: 14 lépés (képekkel)
Videó: ТОР 5 КИТАЙСКИХ ШИН! ЛУЧШАЯ БЮДЖЕТНАЯ РЕЗИНА! #автоподборфорсаж #ильяушаев (Выпуск 101) 2024, November
Anonim
Webvezérelt Rover
Webvezérelt Rover
Webvezérelt Rover
Webvezérelt Rover

A robotokkal való építkezés és a játék a legfőbb bűnös örömöm az életben. Mások golfoznak vagy síelnek, én viszont robotokat építek (mivel nem tudok golfozni vagy síelni:-). Pihentetőnek és szórakoztatónak találom! A legtöbb robot elkészítéséhez alvázkészleteket használok. A készletek használata segít abban, hogy azt csináljam, amit jobban szeretek, a szoftvert és az elektronikát, és jobb futóművet is készítsek a hüvelykujjamnak.

Ebben az utasításban megvizsgáljuk, mi szükséges egy egyszerű, de robusztus Wifi/webvezérelt rover elkészítéséhez. Az alváz az Actobotics Gooseneck. Mérete, bővíthetősége és költsége miatt választottam, de bármilyen más alvázat használhat.

Egy ilyen projekthez szükségünk lesz egy jó, egylapos számítógépre, és ehhez a robothoz a Raspberry Pi (RPI) Linux -alapú számítógép használatát választottam. Az RPI (és Linux) rengeteg kódolási lehetőséget kínál számunkra, és a Python lesz a kódolási oldal. A webes felülethez a Flaskot használom, amely egy könnyű webes keretrendszer a Python számára.

A motorok meghajtásához RoboClaw 2x5a -t választottam. Lehetővé teszi az egyszerű soros kommunikációt a parancsokhoz, és jól működik az RPI -vel és a Gooseneck motorjaival.

Végül van egy webkamerája a POV típusú videó visszacsatoláshoz a távoli vezetéshez. A későbbiekben minden témával részletesebben foglalkozom.

1. lépés: Szükséges hardver

Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges
Hardver szükséges
  • Actobotics Gooesneck alváz vagy az Ön által választott megfelelő csere
  • Választott Raspberry Pi (vagy klón) - B RPI modellt használnak erre a botra, de bármelyik, amely rendelkezik legalább két USB porttal, működik
  • Szabványos szervo lemez B x1
  • 90 ° egyszögű csatorna tartó x1
  • RoboClaw 2x5a motor meghajtó
  • S3003 vagy hasonló szabványos méretű szervó
  • Kis kenyérsütő vagy Mini kenyérpad
  • Női -női áthidaló vezetékek
  • Férfi -női áthidaló vezetékek
  • Webkamera (opcionális) - Logitech C110 -et használok, és itt található az RPI támogatott bütyköinek listája
  • 5v-6v tápforrás szervo tápellátáshoz
  • 7.2v-11.1v akkumulátor a hajtómotor táplálásához
  • 5v 2600mah (vagy magasabb) USB tápegység az RPI -hez
  • USB Wifi adapter

A botomon 4 hüvelykes kerekeket használok, hogy egy kicsit több terepjáró legyen. Ehhez az opcióhoz szüksége lesz:

  • 4 "nagy teherbírású kerék x2
  • 4 mm -es furatkészlet csavaros agy (0,770 hüvelyk) x2

2. lépés: Az alváz összeszerelése

Az alváz összeszerelése
Az alváz összeszerelése
Az alváz összeszerelése
Az alváz összeszerelése
Az alváz összeszerelése
Az alváz összeszerelése

Először szerelje össze a házat, követve az alvázhoz vagy a videóhoz mellékelt utasításokat. A befejezés után valami hasonlónak kell lennie a képhez. MEGJEGYZÉS: A nyakrész összeszerelésekor hagyja ki a rögzítőkonzolt.

A botomon úgy döntöttem, hogy lecserélem az alvázhoz tartozó kerekeket 4 nagy teherbírású kerekekre. Ez opcionális, és nem szükséges, hacsak nem akarja ugyanezt tenni.

3. lépés: Az elektronika felszerelése

Az elektronika felszerelése
Az elektronika felszerelése
Az elektronika felszerelése
Az elektronika felszerelése
Az elektronika felszerelése
Az elektronika felszerelése

A Gooseneck rengeteg helyet és lehetőséget kínál az elektronika felszerelésére. Ezeket a képeket útmutatóként adom meg, de választhat, hogyan szeretné mindezt elrendezni. A tábla és az elemek rögzítéséhez önálló, kétoldalas szalagot, tépőzárat vagy szervo szalagot használhat.

4. lépés: A webkamera hozzáadása

A webkamera hozzáadása
A webkamera hozzáadása
A webkamera hozzáadása
A webkamera hozzáadása
A webkamera hozzáadása
A webkamera hozzáadása

Ehhez a lépéshez vegye be a 90 fokos konzolot, a könnyű szervo agyat és a négy (4).3125 -os csavart:

  • Fogja meg a szervo agyat és helyezze a konzol egyik oldalára, és rögzítse őket a képen látható 0,2125 "-os csavarokkal.
  • Ezután szerelje be a szervót a szervo konzolba
  • Csatlakoztassa a 90 fokos konzolt a szervókürttel a szervoszlophoz, és a szervóhoz kapott kürtcsavarral kösse össze őket
  • Most szerelje fel a szervót a konzolba a liba nyakának tetejére a maradék csavarokkal
  • Rögzítse a kamerát cipzárral vagy kétoldalas szalaggal a 90 fokos konzolra

Ha szükséges, használja a képeket útmutatóként.

5. lépés: Az összes bekötése

Az összes bekötése
Az összes bekötése
Az összes bekötése
Az összes bekötése
Az összes bekötése
Az összes bekötése
Az összes bekötése
Az összes bekötése

Ennek a robotnak a kábelezése meglehetősen feszült.

A Motors:

Forrasztóvezetékek mindkét motoron, ha még nem tette meg

A robotok elülső részével (a végén a lúdnyakkal) fordítva Ön felé:

  • Csatlakoztassa a bal motor motorvezetékeit az M1A és M1B csatornához
  • Csatlakoztassa a jobb motor motorvezetékeit az M2A és M2B csatornákhoz

Földi (GND) csatlakozások:

  • Csatlakoztassa a RoboClaw egyik földelőcsapját a földelő ugródeszkához. A RoboClaw földelőcsapvonala a legközelebb van a középponthoz (lásd a képet)
  • Csatlakoztassa az RPI 6 -os PIN -kódját az áthidaló táblához. Lásd az RPI fejléc képét a pin hozzárendeléshez.
  • Csatlakoztassa a GND -t a szervoakkumulátorból az áthidaló tábla egyik csapjához.
  • Futtasson egy jumper vezetéket az áthidaló tábláról a szervó GND huzalra.

RPI a RoboClaw -hoz:

Csatlakoztassa az RPI GPIO14 TXD csapot a RoboClaw S1 csaphoz

Erő:

  • Csatlakoztassa a szervoakkumulátor POS vezetékét a szervo POS vezetékhez
  • Csatlakoztassa a POS vezetéket a motor akkumulátorából a RoboClaw motor tápbemeneti csatlakozójának POS (+) pontjához. A GND terminált egyelőre lekapcsolva hagyjuk.

6. lépés: Az RPI beállítása

Az RPI beállítása
Az RPI beállítása

Feltételezem, hogy a felhasználó tud valamit a Linuxról és az RPI -ről. Nem foglalkozom az egyik beállításával vagy csatlakoztatásával. Ha segítségre van szüksége, használja az alábbi oldalakat.

Az RPI beállításához tekintse meg a következő oldalakat:

  • RPI alapbeállítás
  • RPI Gyors útmutató
  • NOOBS beállítási céh

Általános ugróoldalak esetén az RPI főoldala és az eLinux oldalak nagyszerű kiindulópontok.

Nézze meg ezt a linket az RPI általános Wifi beállításához.

Ha valamilyen fényképezőgépet vagy webkamerát szeretne használni a boton, akkor nézze meg ezeket az oldalakat, hogy megszerezze az alapvető szükséges fájlokat.

  • RPI bütyök beállítása
  • eLinix RPI bütyök beállítása

Streamelő videó:

Van néhány módja annak, hogy a video streaming RPI -n működjön, de az általam preferált módszer a Motion használata.

Az RPI-re való telepítéshez futtassa ezt: sudo apt-get install motion

Ez az oktatható tétel átállítja a streamelésre is.

7. lépés: Az RPI soros port konfigurálása

Az RX és TX használatához le kell tiltanunk a Linux konzol módot, mivel erről a portról szeretnénk beszélni a RoboClaw motorvezérlővel. Ehhez ezt a módszert vagy ezt az eszközt használhatja. A módszer a választás, mivel mindketten ugyanazt teszik.

8. lépés: A Python modulok telepítése

Szüksége lesz az RPI -re telepített pythonra, valamint a python csomag telepítő pip -jére.

A pip telepítéséhez tegye a következőket:

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

Azután:

  1. sudo pip telepítő lombik
  2. sudo pip install pyserial
  3. sudo pip telepítse az RPIO -t

Ez lesz a kód futtatásához szükséges összes modul.

9. lépés: A RoboClaw beállítása

A robot kódja a RoboClaw -val beszél szabványos soros módban 19200 baudon.

A RoboClaw beállításához tegye a következőket:

  1. Nyomja meg a RoboClaw "MODE" gombját
  2. Nyomja meg a set gombot, amíg a LED 5 (ötször) fel nem villan a késleltetések között
  3. Nyomja meg a "LIPO" gombot a tároláshoz
  4. Ezután nyomja meg a "SET" gombot, amíg a LED 3 (három) alkalommal fel nem villan a késleltetések között
  5. Nyomja meg a LIPO gombot a tároláshoz

Ennyi a motorvezérlő beállításához. Ha szükséges, nézze meg a fenti linken található pdf -t.

10. lépés: A Rover program/fájlok telepítése

Töltse le és másolja a rover.zip fájlt a pi felhasználói könyvtár RPI -jébe.

Ha Linuxot vagy Mac -et futtat, akkor az "scp" segítségével teheti meg:

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~

Windows esetén letöltheti és használhatja a pscp -t, majd tegye a következőket:

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

Miután a zipfájlt átmásolta az RPI -be, jelentkezzen be pi felhasználóként.

Most fuss:

bontsa ki a rovert.zip

Ezzel kicsomagolja a fájlokat a "rover" nevű mappába, és a következő lesz a mappában:

  • restrover.py (A robot python kódja)
  • statikus (a vezérlőoldal gombjainak képfájljait tartalmazza)
  • sablonok (tartalmazza az index.htlm fájlt, a vezérlő weboldalt)

Ha webkamerát használ, módosítsa a sablonmappában az index.html fájl alja melletti sort. Módosítsa az IFRAME sor URL -jét, hogy megfeleljen a videofolyam src URL -jének.

11. lépés: Indítsa el a botot

A Bot Up elindítása
A Bot Up elindítása

Csatlakoztassa az USB tápellátást az RPI -hez.

A botkód elindításához jelentkezzen be pi felhasználóként, és futtassa:

  • cd rover
  • sudo python restrover.py

Ha minden rendben volt, ebben a lépésben a képhez hasonló képernyőt kell látnia

Ha bármilyen hibát vagy problémát lát, a további lépések előtt meg kell javítania azokat.

Most csatlakoztassa a GND (-) vezetéket a RoboClaw motor teljesítménybemenetének NEG (-) csatlakozójához.

12. lépés: A robotvezérlő oldal elérése

A Bot Control oldal elérése
A Bot Control oldal elérése
A Bot Control oldal elérése
A Bot Control oldal elérése

Miután a robot python parancsfájlja fut, kapcsolja be a RoboClaw -ot, majd navigáljon az RPI IP -jéhez, például:

your_rpi_ip

Látnia kell, hogy a webvezérlő oldal megjelenik, mint a képeken. Ha nem, ellenőrizze az RPI kimeneti terminált, és keresse meg a hibákat, és javítsa ki azokat.

Miután belépett az oldalra, készen áll a bot irányítására.

A robot a "Med run" beállításban és közepes sebességgel indul.

A botot az oldalon található gombokkal vagy a billentyűzet gombjaival lehet vezérelni.

A kulcsok a következők:

  • w - előre
  • z - vissza/hátra
  • a - hosszú balra kanyarodás
  • s - hosszú jobbra kanyarodás
  • q - rövid balra kanyarodás
  • e - rövid jobbra kanyarodás
  • 1 - panoráma kamera balra
  • 2 - panoráma jobbra
  • 3 - serpenyő balra
  • 4 - serpenyő jobbra
  • / - otthoni/ középső kamera
  • h - robot leállítása/leállítása

Fél másodperc késleltetési puffer van az elküldött parancsok között. Ezt azért tettem, hogy kiküszöböljem a nem kívánt ismétlődő parancsokat. Természetesen törölheti ezt a kódból, ha úgy tetszik (az index.html -ben)

A többi vezérlésnek és vezérlésének magától értetődőnek kell lennie.

13. lépés: A Python/Flask kód

Ez a bot a Python és a Flask webes keretrendszert használja. Ha érdekel, itt többet megtudhatsz a lombikról.

A nagy különbség a Flask alkalmazástól és a normál Python -szkripttől a @app.route osztály/módszer, amelyet az URI kezeléshez használnak. Ettől eltekintve nagyjából normális Python.

#!/usr/bin/env python

# # Wifi/webvezérelt Rover # # Írta: Scott Beasley - 2015 # # RPIO, pyserial és Lombik # importálási időt használ az RPIO -ból, importálja a PWM -t a lombik importjából Lombik, render_template, request app = Lombik,) # Csatlakozzon a komm porthoz, és beszéljen a Roboclaw motorvezérlővel. Próbálja meg: # Itt módosítsa az átviteli sebességet, ha ez eltér az 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) kivételével IOError: print ("Comm port not found ") sys.exit (0) # Sebesség és hajtásvezérlő változók last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo semleges helyzet (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos.) def index (): return render_template ('index.html', name = Nincs) @app.route ("/forward") def forward (): globális utolsó_irány, fut_ti me print "Előre" go_forward () last_direction = 0 # alvás 100ms + futásidő.alvás (0.100 + run_time) # Ha nem folyamatos, akkor késleltetés után álljon meg, ha run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/backward") def backward (): globális last_direction, run_time print "Backward" go_backward () last_direction = 1 # alvás 100ms + futási idő.sleep (0.100 + run_time) # Ha nem folyamatos, akkor késleltetés után álljon le 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 second time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @app.route ("/right") def right (): globális utolsó_irány, turn_tm_offset print "Jobb" go_right () # sleep @1/2 second time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): globális utolsó_irány, turn_t m_offset print "Balra előre kanyarodás" go_left () # alvás @1 /8 másodperc.route ("/rtforward") def rtforward (): globális last_direction, turn_tm_offset print "Jobbra fordulás" 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 (): globális last_direction print "Stop" halt () last_direction = -1 # alvás 100ms time.sleep (0.100) return "ok" @app.route ("/panlt") def panlf (): globális servo_pos nyomtatás "Panlt" servo_pos -= 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # 150ms idő. sleep (0.150) return "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # alvás 150ms time.sleep (0.150) return "ok" @app.route ("/panfull_lt") def panfull_lt (): globális servo_pos nyomtatás "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # alvás 150ms time.sleep (0.150) return" ok " @app.route ("/panfull_rt ") def panfull_rt (): globális servo_pos print" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # alvás 150ms time.sleep (0.150) return "ok" @app.route ("/speed_low") def speed_low (): globális sebesség_eltolás, utolsó_irány, ford_tm_eltolódás speed_offset = 42 turn_tm_offset = 0.001 # Frissítse az aktuális irányt, hogy új sebességet kapjon, ha 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 (): globális speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Frissítse az aktuális irányt, hogy új sebességet kapjon, ha 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 (): globális sebesség_eltolás, utolsó_irány, ford_tm_eltolódás speed_offset = 126 tur n_tm_offset = 0.332 # Frissítse az aktuális irányt, hogy új sebességet kapjon, ha last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/folyamatos ") def folyamatos (): globális futásidejű nyomtatás" Folyamatos futás "run_time = 0 # alvás 100 ms 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 () # alvás 100 ms time.sleep (0.100) return "ok" # # Motor hajtás funkciók # def go_forward (): globális sebesség_eltolás, ha 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 (): globális 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 (): globális 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 (): globális speed_offset, ha 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)

Ha nem akarja, vagy szüksége van a hibakeresési információkra a lombikból, állítsa a hibakeresést „false” értékre az app.run sorban.

ha _név_ == "_fő_":

app.run (host = '0.0.0.0', port = 80, debug = False)

Itt is megváltoztathatja azt a portot, amelyet a lombik http szerver hallgat.

14. lépés: Más hardver használata

Ha más hardvert szeretne használni, például egy másik típusú SBC -t (egy fedélzeti számítógép), akkor kevés problémája lehet a Python és a Flask futtatásával más táblákon, például a Beagle Bone, a PCDuino stb. elrendezését és használja az új tábla szervohajtási képességeit.

Más típusú motorvezérlő használatához csak módosítania kell a go_forward, go_backward, go_left, go_right és halt függvényeket, hogy megtehesse azt, amire a cseremotor -meghajtónak szüksége van ahhoz, hogy a motor elvégezze ezt a funkciót.

Ajánlott: