Raspberry Pi Robot

Robot

Čaute, ja som Martin.

V nasledujúcom článku sa Vám pokúsim vysvetliť a názorne ukázať, aké je jednoduché a hlavne zábavné si spraviť vlastného robota. Áno, tento robot “len” jazdí a zobrazuje video, ale pre začiatok je to dosť. Tí, čo už poznajú Raspberry Pi, ktoré som na tohoto robota použil, tak určite vedia, že to nemusí byť konečná verzia a že sa dá k robotovi pripojiť veľa iných doplnkov a senzorov. K tomuto projektu som použil nasledujúce veci:

  1. Raspberry Pi (najlepšie B alebo B+, lebo verzia 2 nemá funkčnú knižnicu WebIOPi a ZERO nemá moznosť kamery cez CSI)
  2. Raspberry kameru (dá sa použiť aj iná web kamera, ale s tym neviem poradiť)
  3. SD karta 4GB+
  4. USB WiFi klúč
  5. H-mostík [h-bridge] (potrebný k ovládaniu motorov, ja som použil lacný L298N)
  6. Externá baterka (nie je nutnosť, ale pre kompaktnosť odporúčaná)
  7. Káble na zapájanie
  8. Nejaký podvozok s 2 DC motormi

 

Ako prvé treba zapísať obraz Raspbian na SD kartu. Ja používam Windows PC a nástroj Win32DiskImager.

 

Raspbian SD cakrd image installation

 

Po úspešnom nahratí súborov na kartu ju odpojíme z PC a vložíme do SD slotu na Raspberry Pi. Zároveň pripojíme k Raspberry Pi kameru, WiFi USB, klávesnicu, monitor a nakoniec aj napájanie. Klávesnica a monitor sú potrebné pre prvú konfiguráciu. Táto konfigurácia sa dá spraviť aj po sieti, alebo cez UART, ale toto je najlahšie riešenie.

 

Keď sa Raspberry Pi prvý krát nabootoje, tak nám zobrazí obrazovku Raspi-Config, na ktorej nakonfigurujeme potrebné parametre pre naše účely:

  • Expand Filesystem (pre použitie celej veľkosti SD)
  • Boot to Console (kvôli uvoľneniu RAM)
  • Enable Camera
  • Split memory (nastavíme na 128 alebo viac, ale 128 stačí)
  • Enable SSH (pre ďalšie pripojenie a ovládanie cez PC)

Ostatné možnosti nie sú potrebné meniť, ale môžete zmeniť časové pásma, alebo podobné veci, ak máte záujem.

 

Raspberry config

 

Následne je potrebné nakonfigurovať WiFi pripojenie. Odporúčam nastaviť statickú IP pre jednoduchosť používania.

 

Po pripojení na internet je potrebné aktualizovať OS, to vykonáme známym sledom príkazov:

sudo apt-get update

sudo apt-get upgrade -y

sudo apt-get dist-upgrade -y

 

Odporúča sa po aktualizacii rebootovat zariadenie pomocou príkazu sudo reboot.

Po reštarte môžeme pokračovať v inštalácii. Pre jednoduchosť odporúčam použiť na počítači program Putty pre možnosť kopírovania príkazov na priamo do konzoly Raspberry Pi, ale je potrebné mať počítač a aj Raspberry Pi na tej istej sieti pripojené. Do Raspberry Pi sa pripojíte jednoducho pomocou IP adresy, ktorú ste mu určili vyššie.

 

Putty SSH client

 

Teraz začíname pracovať uz na samotnom robotovi. Do príkazového riadku (terminálu) budeme vkladať následújuce príkazy:

 

mkdir ~/Robot

mkdir ~/Robot/webiopi

mkdir ~/Robot/stream

mkdir ~/Robot/install

 

Týmyto príkazmi sme si vytvorili zložky, do ktorých budeme následne vkladať naše programy a potrebné súbory. Ďalej pokračujeme so samotnou inštaláciou potrebných programov.

 

cd ~/Robot/install

wget http://heanet.dl.sourceforge.net/project/webiopi/WebIOPi-0.7.0.tar.gz

tar xvf WebIOPi-0.7.0.tar.gz

cd WebIOPi-0.7.0

sudo ./setup.sh

 

Týmito príkazmi sme nainštalovali knižnicu WebIOPi, ktorá sa stará o prepojenie GPIO pinov na Raspberry Pi s naším Pythonovým programom a celé sa to dá ovládať cez webové rozhranie. Teraz ešte musíme nakonfigurovať samotné WebIOPi, aby nám vyhovovalo.

 

sudo nano /etc/webiopi/config

 

A v tomto súbore zmeníme následné parametre:

 

#myscript = na myscript = /home/pi/Robot/webiopi/script.py

port = na port = 80

#doc-root = na doc-root = /home/pi/Robot/webiopi

#welcome-file = na welcome-file = index.html

 

Raspbian Command Line

 

Teraz môžeme sputiť WebIOPi:

 

sudo service webiopi start

sudo update-rc.d webiopi defaults

 

Teraz potrebujeme niečo, čo nám bude slúžiť na prenášanie video signálu na našu web stránku. K tomu slúži program mjpg-streamer, ktorý práve ideme nainštalovať:

 

sudo apt-get install cmake libjpeg62-dev libv4l-dev imagemagick -y

wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip

unzip master.zip

cp -r ~/Robot/install/mjpg-streamer-master/mjpg-streamer-experimental/* ~/Robot/stream

cd ~/Robot/stream

make clean all

 

Pre automatikcé spustanie prenosu videa potrebujeme napísať kratši batch subor. Ten sa bude spúšťať pri pusteni Pi:

    

sudo nano ~/Robot/webiopi/stream.sh

 

Do tohoto súboru vložíme následujúci riadok, ktorý bude spúšťať stream:

 

cd /home/pi/Robot/stream

export LD_LIBRARY_PATH=.

./mjpg_streamer -o "output_http.so -w ./www" -i "input_raspicam.so -fps 10"

 

Ešte potrebujeme, aby sa to spúšťalo automaticky po nabootovaní OS:

 

sudo nano /etc/rc.local

 

A sem vložíme tento riadok:

 

sudo bash /home/pi/Robot/webiopi/stream.sh

 

Stream script in Command Line

 

Teraz už máme nainštalované všetky potrebné veci a môžeme sa pustiť do písania nášho skriptu pre robota. K tomu sa premiestníme do súboru webiopi následujúcim príkazom:

    

cd ~/Robot/webiopi

 

Kde vytvoríme súbor s názom script.py, môžeme do neho písať náš program.

 

sudo nano script.py

 

Tento program je nižšie napísaný aj s popismi k daným príkazom pre jednoduchšie porozumenie a následné úpravy podľa vlasných predstáv a potrieb. Ja som mal pripojený H-mostík ku GPIO pinom 7, 17, 27 a 22. Tu je program:

 

# Importovanie kniznic

import webiopi

import time

 

# Enable debug output

webiopi.setDebug()

 

# Vyvolanie kniznice

GPIO = webiopi.GPIO

 

# vystupy

IC1A = 4

IC1B = 17

IC2A = 27

IC2B = 22

 

# Spojenei so strankou

def setup():

   webiopi.debug("Script with macros - Setup")

   # Nadstavenie GPIO na vystupy

   GPIO.setFunction(IC1A, GPIO.OUT)

   GPIO.setFunction(IC1B, GPIO.OUT)

   GPIO.setFunction(IC2A, GPIO.OUT)

   GPIO.setFunction(IC2B, GPIO.OUT)

 

   #Nastavenie GPIO na vypnute

   GPIO.digitalWrite(IC1A, GPIO.LOW)

   GPIO.digitalWrite(IC1B, GPIO.LOW)

   GPIO.digitalWrite(IC2A, GPIO.LOW)

   GPIO.digitalWrite(IC2B, GPIO.LOW)

 

# Ciklus Robota

def loop():

   webiopi.sleep(5)

 

# Restart GPIO vstupov po ukoncenny

def destroy():

   webiopi.debug("Script with macros - Destroy")

   GPIO.setFunction(IC1A, GPIO.IN)

   GPIO.setFunction(IC1B, GPIO.IN)

   GPIO.setFunction(IC2A, GPIO.IN)

   GPIO.setFunction(IC2B, GPIO.IN)

 

# Ukony po vyvolani

@webiopi.macro

def MoveLeft():

   GPIO.digitalWrite(IC1A, GPIO.HIGH)

   GPIO.digitalWrite(IC1B, GPIO.LOW)

   GPIO.digitalWrite(IC2A, GPIO.LOW)

   GPIO.digitalWrite(IC2B, GPIO.HIGH)

 

@webiopi.macro

def MoveRight():

   GPIO.digitalWrite(IC1A, GPIO.LOW)

   GPIO.digitalWrite(IC1B, GPIO.HIGH)

   GPIO.digitalWrite(IC2A, GPIO.HIGH)

   GPIO.digitalWrite(IC2B, GPIO.LOW)

 

@webiopi.macro

def MoveForward():

   GPIO.digitalWrite(IC1A, GPIO.HIGH)

   GPIO.digitalWrite(IC1B, GPIO.LOW)

   GPIO.digitalWrite(IC2A, GPIO.HIGH)

   GPIO.digitalWrite(IC2B, GPIO.LOW)

 

@webiopi.macro

def MoveBackward():

   GPIO.digitalWrite(IC1A, GPIO.LOW)

   GPIO.digitalWrite(IC1B, GPIO.HIGH)

   GPIO.digitalWrite(IC2A, GPIO.LOW)

   GPIO.digitalWrite(IC2B, GPIO.HIGH)

 

@webiopi.macro

def Stop():

   GPIO.digitalWrite(IC1A, GPIO.LOW)

   GPIO.digitalWrite(IC1B, GPIO.LOW)

   GPIO.digitalWrite(IC2A, GPIO.LOW)

   GPIO.digitalWrite(IC2B, GPIO.LOW)

 

nano - GPIO init

 

Teraz je potrebné vytvoriť webovú stránku, na ktorej sa budú nachádzať tlačítka na ovládanie a obraz z kamery. Tento súbor sa bude nachádzať v zložke webiopi a bude mať názov index.html. Vytvoríme ho nasledujúcim príkazom:

 

sudo nano index.html

 

Do ktorého vložíte tieto riadky a na miesto TVOJA_IP vložíš svoju IP adresu, ktorú si si nastavil vyššie (toto je normálna webová stránka písaná pomocou HTML a CSS, čiže je možné ju jednoducho upravovať a pretvárať podala vlasného vkusu pridaním farby pozadia alebo menením fontu a veľa iných možností):

 

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <meta name="viewport" content = "height = device-height, width = 420, user-scalable = no" />

    <title>Robot</title>

    <script type="text/javascript" src="/webiopi.js"></script>

    <script type="text/javascript">

    webiopi().ready(function() {

        var button;

 

        // Tlacitka na ovladanie

        button = webiopi().createMacroButton("macro", "<", "MoveLeft");

        $("#middle").append(button); // stredne tlacitko

 

        button = webiopi().createMacroButton("macro", "X", "Stop");

        $("#middle").append(button); // stredne tlacitko

 

        button = webiopi().createMacroButton("macro", ">", "MoveRight");

        $("#middle").append(button); // stredne tlacitko

 

        button = webiopi().createMacroButton("macro", "/\\", "MoveForward");

        $("#up").append(button); // vrchne tlacitko

 

        button = webiopi().createMacroButton("macro", "\\/", "MoveBackward");

        $("#down").append(button); // spodne tlacitko

                

        webiopi().refreshGPIO(true);

    });

 

    </script>

    <style type="text/css">

        button {

            margin: 5px 5px 5px 5px;

            width: 45px;

            height: 45px;

            font-size: 24pt;

            font-weight: bold;

            color: black;

        }

 

        .LOW {

            background-color: White;

        }

 

        .HIGH {

            background-color: Red;

        }

 

    </style>

</head>

<body>

    

    <div id="content" align="center">

    <td>    

        <img src="http://TVOJA_IP:8080/?action=stream" width="480" align="center">

 

    </td>

        <div id="up"></div>

        <div id="middle"></div>

        <div id="down"></div>

      </div>

 

</body>

</html>

 

nano - web page edit

 

Teraz, keď máme celý kód napísaný a všetky programy nainštalované, tak jednoducho rebootujeme Raspberry Pi pomocou príkazu sudo reboot. Po nabehnutí do systému by sa mala rozsvietiť červená LED dióda na kamere, ktorá indikuje že sa kamera používa. Teraz sa už iba pripojíš na tvoju IP adresu pomocou svojho internetového prehliadača. Ten sa ťa spýta na prístupové údaje, ktoré sú od základu meno: webiopi a heslo: raspberry (Tieto údaje si možeš neskôr zmeniť v webiopi config súbore). Ak si všetko spravil podľa návodu, tak by si mal vidieť v strede obraz z kamery a pod ňou 5 tlačítok na ovládanie. Teraz už iba zostáva zapojiť raspberry k H-mostíku s napájaním a k podvozku s motorčekmi a možeš vyraziť.

 

WebIOPi login page        WebIOPi User interface

 

Toto je moj robot:

Image of Robot

 

Dúfam, že tento návod bol pre Vás zrozumiteľný a že ste sa pri ňom nieco naučili. Ak by ste ale stále mali nejaké problémy alebo otázky, tak Vám rád poradím alebo vysvetlím.

Martin