Obsah:

Web Controlled Rover: 14 kroků (s obrázky)
Web Controlled Rover: 14 kroků (s obrázky)

Video: Web Controlled Rover: 14 kroků (s obrázky)

Video: Web Controlled Rover: 14 kroků (s obrázky)
Video: TOP 5 WEBŮ, KTERÉ MUSÍTE VIDĚT - INSPIRACE PRO TVORBU WEBU 2024, Prosinec
Anonim
Webem ovládaný rover
Webem ovládaný rover
Webem ovládaný rover
Webem ovládaný rover

Stavění a hraní si s roboty je moje hlavní životní vina. Ostatní hrají golf nebo lyžují, ale já stavím roboty (jelikož neumím hrát golf ani lyžovat:-). Přijde mi to relaxační a zábavné! K výrobě většiny svých robotů používám podvozkové sady. Používání sad mi pomáhá dělat to, co mě baví víc, software a elektroniku, a také přispět k lepšímu podvozku pro mé vlastní palce.

V tomto Instructable se podíváme na to, co je potřeba k vytvoření jednoduchého, ale robustního roveru ovládaného Wifi/webem. Použitým podvozkem je Actobotics Gooseneck. Vybral jsem si to kvůli velikosti, rozšiřitelnosti a ceně, ale můžete použít jakýkoli jiný podvozek podle vlastního výběru.

Pro takovýto projekt budeme potřebovat dobrý solidní jednodeskový počítač a pro tohoto robota jsem zvolil použití počítače Raspberry Pi (RPI) jako Linux. RPI (a Linux) nám dává spoustu možností kódování a pro kódovací stránku bude použit Python. Pro webové rozhraní používám Flask, odlehčený webový framework pro Python.

K pohonu motorů jsem zvolil RoboClaw 2x5a. Umožňuje jednoduchou sériovou komunikaci pro jeho ovládání a funguje dobře s RPI a motory na Goosenecku.

Konečně má webovou kameru pro video zpětnou vazbu typu POV pro dálkové ovládání. Každému tématu se budu podrobněji věnovat později.

Krok 1: Potřebný hardware

Potřebný hardware
Potřebný hardware
Potřebný hardware
Potřebný hardware
Potřebný hardware
Potřebný hardware
Potřebný hardware
Potřebný hardware
  • Podvozek Actobotics Gooesneck nebo vhodná náhrada podle vašeho výběru
  • Raspberry Pi podle vašeho výběru (nebo klon) - Na tomto robotu je použit model RPI B, ale každý s alespoň dvěma USB porty bude fungovat
  • Standardní servo deska B x1
  • 90 ° držák jednoho úhlu kanálu x1
  • Ovladač motoru RoboClaw 2x5a
  • Servo S3003 nebo podobné standardní velikosti
  • Malé prkénko nebo Mini prkénko
  • Propojovací vodiče mezi ženami a ženami
  • Propojovací vodiče mezi muži a ženami
  • Webová kamera (volitelně) - Používám Logitech C110 a zde je seznam podporovaných kamer pro RPI
  • Napájecí zdroj 5v-6v pro servo napájení
  • 7,2v-11,1v baterie pro napájení hnacího motoru
  • 5v 2 600 mAh (nebo vyšší) USB power banka pro RPI
  • USB Wifi adaptér

Na mém botu používám 4 kola, aby to bylo trochu více All-Terrain-Indoor. Pro tuto možnost budete potřebovat:

  • 4 "těžké kolo x2
  • Šroubový náboj se 4 mm vrtáním (0,770 palce) x2

Krok 2: Sestavení podvozku

Sestavení podvozku
Sestavení podvozku
Sestavení podvozku
Sestavení podvozku
Sestavení podvozku
Sestavení podvozku

Nejprve sestavte šasi podle pokynů přiložených k šasi nebo videu. Po dokončení byste měli mít něco jako obrázek. POZNÁMKA: Při montáži části krku ponechte montážní držák vypnutý.

Na svém botovi jsem se rozhodl vyměnit kola, s nimiž podvozek přišel, za 4 těžká kola. Toto je volitelné a není nutné, pokud nechcete dělat to samé.

Krok 3: Montáž elektroniky

Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky
Montáž elektroniky

Gooseneck má spoustu prostoru a možností pro montáž vaší elektroniky. Tyto obrázky vám dávám jako vodítko, ale můžete si vybrat, jak byste to celé chtěli rozložit. K montáži desky a baterií můžete použít distanční podložky, oboustrannou pásku, suchý zip nebo servopásku.

Krok 4: Přidání webové kamery

Přidání webové kamery
Přidání webové kamery
Přidání webové kamery
Přidání webové kamery
Přidání webové kamery
Přidání webové kamery

K tomuto kroku vezměte 90stupňový držák, lehký servo náboj a čtyři (4) šrouby.3125 :

  • Vezměte servo náboj a umístěte jej na jednu stranu držáku a zajistěte je šrouby.2125 "jako na obrázku
  • Poté namontujte servo do držáku serva
  • Připevněte 90stupňový držák se servo houkačkou k páteři serva a pomocí šroubu klaksonu, který byl dodán se servem, je spojte dohromady
  • Nyní namontujte servo v držáku na horní část husího krku pomocí zbývajících šroubů
  • Namontujte kameru pomocí zipů nebo oboustranné pásky na držák 90 stupňů

V případě potřeby použijte obrázky pro průvodce.

Krok 5: Zapojte vše

Zapojení vše
Zapojení vše
Zapojení vše
Zapojení vše
Zapojení vše
Zapojení vše
Zapojení vše
Zapojení vše

Zapojení je u tohoto robota docela těsné.

Motory:

Pokud jste tak ještě neučinili, pájejte vývody na obou motorech

S roboty vpředu (konec s husím krkem) směrem od vás:

  • Připojte vodiče motoru na levém motoru ke kanálu M1A a M1B
  • Připojte vodiče motoru na pravém motoru ke kanálu M2A a M2B

Uzemnění (GND):

  • Připojte jeden zemnící kolík na RoboClaw k desce zemnící propojky. Uzemňovací čára na RoboClaw je nejblíže středu (viz obrázek)
  • Připojte PIN 6 na RPI k propojovací desce. Přiřazení pinů najdete na obrázku záhlaví RPI.
  • Připojte GND ze sady servo baterií k jednomu z kolíků na propojovací desce.
  • Veďte propojovací vodič z propojovací desky na vodič GND serva.

RPI pro RoboClaw:

Připojte pin RPI GPIO14 TXD ke kolíku RoboClaw S1

Napájení:

  • Připojte POS kabel ze serva baterie k POS kabelu serv
  • Připojte vodič POS z baterie motoru k POS (+) na svorce napájení motoru RoboClaw. Terminál GND zatím necháme odpojený.

Krok 6: Nastavení RPI

Nastavení RPI
Nastavení RPI

Předpokládám, že uživatel zde ví něco o Linuxu a RPI. Nezabývám se tím, jak jej nastavit nebo se k němu připojit. Pokud s tím potřebujete pomoci, použijte níže uvedené stránky.

Chcete -li získat nastavení RPI, podívejte se na následující stránky:

  • Základní nastavení RPI
  • Rychlý průvodce RPI
  • Guilde instalace NOOBS

Pro obecné skokové stránky jsou skvělým místem, kde začít, hlavní stránka RPI a stránky eLinux.

Na tomto odkazu najdete obecné nastavení Wifi pro RPI.

Pokud máte v plánu použít nějaký fotoaparát nebo webovou kameru na botu, podívejte se na tyto stránky a získejte základní potřebné soubory.

  • Nastavení kamery RPI
  • Nastavení kamery eLinix RPI

Streamování videa:

Existuje několik způsobů, jak zajistit streamování videa na RPI, ale já dávám přednost použití Motion.

Chcete-li jej nainstalovat do RPI, spusťte toto: sudo apt-get install motion

Tento instrukční program jde také o nastavení pro streamování.

Krok 7: Konfigurace sériového portu RPI

Abychom mohli mluvit s ovladačem motoru RoboClaw z tohoto portu, budeme muset vypnout režim konzoly Linux pro používání RX a TX. K tomu můžete použít tuto metodu nebo tento nástroj. Metoda je na vás, protože oba nakonec dělají totéž.

Krok 8: Instalace modulů Pythonu

Budete potřebovat python nainstalovaný na RPI a také pip installer balíčku python.

Chcete -li nainstalovat pip, postupujte takto:

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

Pak:

  1. sudo pip install baňka
  2. sudo pip install pyserial
  3. sudo pip install RPIO

To budou všechny moduly potřebné ke spuštění kódu.

Krok 9: Nastavení RoboClaw

Mám kód robota, který mluví s RoboClaw ve standardním sériovém režimu při 19200 baudech.

Chcete -li RoboClaw nastavit pro toto, postupujte takto:

  1. Na RoboClaw stiskněte tlačítko „MODE“
  2. Stiskněte tlačítko set, dokud LED dioda mezi prodlevami 5krát (pětkrát) nezabliká
  3. Uložte kliknutím na tlačítko „LIPO“
  4. Dále stiskněte tlačítko „SET“, dokud LED dioda nebliká 3 (třikrát) mezi zpožděními
  5. Uložte stisknutím tlačítka LIPO

To je vše pro nastavení ovladače motoru. V případě potřeby naleznete další informace v pdf uvedeném výše.

Krok 10: Instalace programu/souborů Rover

Stáhněte a zkopírujte soubor rover.zip do svého RPI ve vašem uživatelském adresáři pi.

Pokud používáte Linux nebo Mac, můžete k tomu použít 'scp':

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

Pro Windows si můžete stáhnout a použít pscp a poté:

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

Jakmile je soubor zip zkopírován do RPI, přihlaste se do něj jako uživatel pí.

Nyní spusťte:

rozepnout rover.zip

Tím rozbalíte soubory do složky s názvem „rover“a v této složce budete mít následující:

  • restrover.py (Python kód pro robota)
  • static (uchovává obrazové soubory pro tlačítka na ovládací stránce)
  • šablony (obsahuje soubor index.htlm, kontrolní webovou stránku)

Pokud používáte webovou kameru, upravte řádek v dolní části souboru index.html ve složce šablony. Změňte adresu URL v řádku IFRAME tak, aby odpovídala adrese src vašeho video streamu.

Krok 11: Spuštění robota nahoru

Spuštění Bot Up
Spuštění Bot Up

Připojte napájení USB k RPI.

Chcete -li spustit kód robota, přihlaste se jako uživatel pi a spusťte:

  • cd rover
  • sudo python restrover.py

Pokud bylo vše v pořádku, měli byste vidět obrazovku podobnou obrázku v tomto kroku

Pokud uvidíte nějaké chyby nebo problémy, budete je muset opravit, než budete pokračovat.

Nyní připojte vodič GND (-) ke svorce NEG (-) na vstupu motoru RoboClaw.

Krok 12: Přístup na stránku ovládání robota

Přístup na stránku ovládání robota
Přístup na stránku ovládání robota
Přístup na stránku ovládání robota
Přístup na stránku ovládání robota

Poté, co se spustí skript pythonu robota, zapněte RoboClaw a poté přejděte na IP svého RPI jako:

your_rpi_ip

Měli byste vidět vyskakovací stránku pro web jako na obrázcích. Pokud ne, zkontrolujte výstupní terminál RPI a vyhledejte případné chyby a opravte je.

Jakmile jste na stránce, jste připraveni ovládat robota.

Robot se spustí v nastavení „Střední běh“a při střední rychlosti.

Robota lze ovládat pomocí tlačítek na stránce nebo pomocí kláves na klávesnici.

Klíče jsou:

  • w - vpřed
  • z - vzad/vzad
  • a - dlouhá zatáčka doleva
  • s - dlouhá pravá zatáčka
  • q - krátké odbočení doleva
  • e - krátké odbočení doprava
  • 1 - otočná kamera vlevo
  • 2 - panoramatická kamera vpravo
  • 3 - pánev úplně vlevo
  • 4 - pánev zcela vpravo
  • / - domácí/ středová kamera
  • h - zastavit/zastavit robota

Mezi odeslanými příkazy je půlsekundová vyrovnávací paměť zpoždění. Udělal jsem to, abych eliminoval nechtěné opakované příkazy. Toto můžete samozřejmě z kódu odstranit, pokud chcete (v index.html)

Zbytek ovládacích prvků a jejich ovládání by mělo být samozřejmé.

Krok 13: Kód Pythonu/baňky

Tento robot používá Python a webový framework Flask. Pokud máte zájem, můžete se o baňce dozvědět více zde.

Velkým rozdílem od aplikace Flask a běžného skriptu Pythonu je třída/metoda @app.route, která se používá k manipulaci s URI. Kromě toho je to většinou normální Python.

#!/usr/bin/env python

# # Wifi/webem poháněný Rover # # Napsal Scott Beasley - 2015 # # Používá RPIO, pyserial a Flask # čas importu sériového importu z RPIO import PWM z importu baňky Flask, render_template, žádost app = Flask (_name_, static_url_path = '') # Připojte se ke komunikačnímu portu a promluvte si s ovladačem motoru Roboclaw zkuste: # Zde změňte přenosovou rychlost, pokud se liší od 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) kromě IOError: print („Comm port not nalezeno ") sys.exit (0) # Proměnné řízení rychlosti a pohonu last_direction = -1 speed_offset = 84 turn_tm_offset = 0,166 run_time = 0,750 # Servo neutrální poloha (home) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Malé zdržení pro ustavení času. spánek (3) # # obslužné rutiny URI - zde se provádějí všechny akce stránky robota # # odešlete stránku pro ovládání robotů (domovská stránka) @app.route ("/") def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti vytisknu "Vpřed" go_forward () last_direction = 0 # spánek 100ms + doba_času běhu.spánek (0,100 + doba_běhu) # Pokud to není souvislé, pak se zastaví po zpoždění, pokud run_time> 0: last_direction = -1 zastaví () vrátí "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) # Pokud není nepřetržitý, pak se zastaví po zpoždění pokud 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.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 second time.sleep (0,500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ltforward") def ltforward (): global last_direction, turn_t m_offset tisk "Otočení doleva" 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 # sleep 100ms time.sleep (0.100) return "ok" @app.route ("/panlt") def panlf (): global servo_pos tisk "Panlt" servo_pos -= 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # spánek 150ms čas. 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 (): globální tisk servo_pos "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # spánek 150ms time.sleep (0.150) return" ok " @app.route ("/panfull_rt ") def panfull_rt (): global servo_pos tisk" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # spánek 150ms time.sleep (0.150) návrat "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0,001 # Aktualizujte aktuální směr, abyste získali novou rychlost, pokud 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ální speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0,166 # Aktualizujte aktuální směr, abyste získali novou rychlost, pokud 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 # Aktualizujte aktuální směr, abyste získali novou rychlost, pokud last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/continuous ") def continual (): 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 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 () # spánek 100ms čas.spánek (0,100) návrat "ok" # # Funkce motorového pohonu # def go_forward (): globální 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 - offset rychlosti)) roboclaw.write (chr (128 + offset rychlosti)) else: roboclaw.write (chr (1 + offset rychlosti)) 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)

Pokud nechcete nebo nepotřebujete informace o ladění z baňky, nastavte ladění na 'false' na řádku app.run.

if _name_ == "_main_":

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

Také zde můžete změnit port, na kterém server Flask http naslouchá.

Krok 14: Použití jiného hardwaru

Pokud chcete použít jiný hardware, například jiný typ SBC (jednodeskový počítač), měli byste mít malé problémy se spuštěním Pythonu a Flasku na jiných deskách, jako je Beagle Bone, PCDuino atd … Budete muset změnit kód tak, aby odpovídal GPIO rozvržení a využití schopností servopohonu nové desky.

Chcete -li použít jiný typ ovladače motoru, stačí upravit funkce go_forward, go_backward, go_left, go_right a halt, aby cokoli, co náhradní ovladač motoru potřebuje, aby motor vykonával danou funkci.

Doporučuje: