Ju-Ju
Robot, který se účastnil na robotické soutěži Robotour postavili členové píseckého Radioklubu
Něco o robotech
Robot je stroj pracující s určitou mírou samostatnosti, vykonávající určené úkoly, a to předepsaným způsobem a při různých mírách potřeby interakce s okolním světem a se zadavatelem. Robot je schopen své okolí vnímat pomocí senzorů, zasahovat do něj, případně si o něm vytvářet vlastní představu. Roboti se dají rozdělit do několika skupin. Podle jejich schopnosti přemisťovat se je dělíme na stacionární- nemohou se pohybovat z místa na místo a na mobilní, kteří se mohou pohybovat z místa na místo. Dále se roboti dělí podle možnosti pohybu, autonomie, účelu (boj, výroba, průzkum, přeprava), způsobu programování. Autonomie robota závisí na tom, jak moc je samotný robot dynamický a interaktivní s okolním prostředím. Čím více je robot dynamičtější, tím přesnější potřebuje informace o svém okolí.
Podle toho, kolik potřebuje lidského zásahu do svého chodu, rozdělujeme autonomní roboty do skupin. První skupina řízený stroj, přímé vedení člověka, bez rozhodovacích schopností, kromě člověka nepotřebuje interakci s okolím. Druhá skupina ovládaný stroj, vykonává svojí činnost podle zadaného úkolu, logická rozhodovací schopnost, konečný automat (např. výtah zastaví v požadovaném patře, inteligence s pamětí 1. bit). Třetí skupina regulovaný stroj, dosahuje cíle předem určeným způsobem, dosahuje cíle za různých podmínek různými cestami, analogové rozlišení míry intenzity jevu. Čtvrtou skupinou je autonomní stroj, dosahuje cíle způsobem, který si zvolí. Sice se stále může držet nejpřímější předpokládané cesty, ale nijak jí nepředpokládá, vždy si jí znovu ověřuje, a v případě překážek i sám hledá cestu k dosažení cíle, bez limitu vzdálenosti od původního přímého směru. Poslední skupinu je inteligentní stroj, který si sám volí cíle, člověka nepotřebuje. Toto je prozatím utopie a takový stroj se blíží již k umělé inteligenci.
Podvozky mobilních robotů můžeme rozlišit podle počtu poháněných kol, typu, tvaru. Základní skupiny: diferenciální podvozek- dvě hnaná kola, stabilita je udržována opěrnými body, nebo koly, synchronní podvozek- často 3 kola a každé se 2 stupni volnosti, podvozky se směrovými koly, pásové podvozky, kráčející podvozky.
Pro pohon mobilních robotů se využívají elektromotory. Nejčastěji se používají stejnosměrné, jelikož jsou jednoduché a je snadné napájení například komutátorové, bezkomutátorové, krokové, lze používat i střídavé elektromotory a to synchronní i asynchronní, nebo servomotory, které mají v sobě integrovanou převodovku a inkrementální enkodér.
Řešení
Jedná se o autonomního robota ze skupiny číslo 1 tj. řízený stroj. Blokové schéma je rozděleno, na šest částí viz obrázek níže, které byly použity pro realizaci robota.
Bezdrátový router Edimax BR- 6204WG
Síťový směrovač je určen především pro domácnosti a menší podniky. Směrovač je kombinován s přepínačem (switchem) a bezdrátovým přístupovým bodem pro sdílení připojení pomocí technologie Wi-Fi. Dle specifikace výrobce lze na připojení být až 253 uživatelů, směrovač dále poskytuje vyšší bezpečnost připojení díky vestavěnému firewall, podporuje šifrované spojení a další pokročilé funkce jako jsou NAT, DHCP, DDNS. Směrovač podporuje jednoduchou správu pomocí webového klienta, monitoring sítě, řízení přístupu například pomocí povolení MAC adres počítačů. Rozhraní směrovače: 1x RJ-45 WAN Ethernet 10/100 Mbps, 4x RJ-45 LAN Ethernet 10/100 Mbps, 1x SMA konektor pro připojení antény na Wi-FI komunikaci. Podporuje směrovací protokoly RIP v1, RIP v2 a statické směrování. Cena směrovače je 599 Kčíslo Tento směrovač je první část blokového schéma. Jeho úkol je zajišťovat komunikaci mezi uživatelem a síťovým směrovačem Edimax BR- 6104KP. Komunikace probíhá obousměrně pomocí paketů ve dvou fázích. První fáze je komunikace mezi uživatelem, který se připojí na směrovač Edimax BR- 6204WB pomocí bezdrátové technologie Wi-Fi, přes kterou odesílá svoje příkazy pro směrovač Edimax BR- 6104KP. Druhá fáze je odeslání příkazu, pomocí paketu do Edimaxu BR- 6104KP, to zajišťuje stálé spojení s druhým směrovačem pomocí UTP kabelu konektoru RJ-45 Ethernet 10/100 Mbps. Bezdrátový router Edimax BR- 6204WG umožňuje několik režimů pro bezdrátové připojení je to: přístupový bod, který je použit při nastavení, dále jsou to režimy stanice AD HOC hodí se pro připojení více uživatelů na jedno zařízení například pro sdílení souborů či hraní her v síti, most pro spojení dvou částí sítě, nebo v režimu WDS, který slouží pro komunikaci dvou bezdrátových směrovačů mezi sebou bezdrátově. Dále se nastavuje skupina Wi-Fi karet, které budou podporovány pro komunikaci, nastaven do režimu 802.11 b+g, tak aby se na něj mohli připojit počítače jak se standardem 802.11b tak i 802.11g v pásmu 2,4 GHz. Dále se nastavuje ESSID což je vlastní jméno sítě tak, tak jak ho budou vidět uživatelé, kteří se na něj budou chtít připojit. Číslo kanálu je nastaveno na 9, je to libovolné číslo v rozmezí 1- 13. Je vhodné volit takový kanál, který není již v okolí zabrán jiným bezdrátovým síťovým zařízení, pokud to umožňuje technologie tak si ji směrovač vybere sám, ale pokud to neumí, musí uživatel vybrat kanál sám a s tím mu může pomoc například program Network Stumbler.
Poté je vhodné nastavit zabezpečení, aby se do sítě nepřipojit někdo cizí, je použito zabezpečení WEP, s 64 bitovým šifrovaným klíčem, toto je nejjednodušší zabezpečení, které zvládají i starší Wi-Fi karty. Síťový směrovač Edimax BR- 6204WG vyžaduje minimální konfiguraci uživatelského PC s Wi-Fi kartou, internetový prohlížeč Internet Explorer 4.0 a vyšší, nebo Netscape Navigator 4.7 a vyšším, doporučuji operační systém Windows XP a vyšší s nainstalovanými aktualizacemi, jak operačního systému, tak ovladačů bezdrátové síťové karty. Lze se připojit i pomocí mobilního zařízení, které disponuje technologií Wi-Fi.
Připojení je snadné v několika krocích. Po zapnutí a načtení směrovače (při zapínání se rozsvítí všechny ledky, které následně zhasnou asi na 10 sekund a poté se znovu rozsvítí používané ledky a směrovač naběhne), uživatel vyhledá sítě v okolí, síť se jmenuje RC-DC-AP, po připojení bude vyžadovat heslo, které je: RC-DC. Pokud se bude uživatel chtít podívat do konfigurace síťového směrovače, musí do internetového prohlížeče zadat adresu 192.168.2.1, poté se zobrazí přihlašovací tabulka, kde uživatelské jméno je: admin a heslo: 1234.
Zdroje mobilních robotů lze rozdělit do dvou skupin. První skupinu tvoří bateriové články, které mají tu nevýhodu, že po vybití již je nelze znovu nabít a použít. Druhou skupinu tvoří akumulátory, které lze dobíjet a opětovně používat.
Autonomního robota může řídit jednoduchý mikrokontroler neboli jednočip. Jedničky a nuly, které zpracovává program, se převádí jako různé napěťové úrovně. Mikrokontrolery nejčastěji využívají TTL logiku. Kdy napětí 5V prezentuje logickou 1 a napětí 0V logickou nulu. Díky komunikačním pinům může mikrokontroler komunikovat se svým okolím. Komunikace probíhá předáním hodnoty napětí na vstupech tak, že vše pod 2,5 V je logická nula a vše nad tuto hodnotu je logická jednička.
Další důležitou proměnou je čas. Jelikož kdyby robot vykonával svoje úkony v reálném čase tak by se vůbec v prostředí neorientoval. Proto je důležité, aby jednotlivé úkony zpracovával několikrát za vteřinu. Například pokud je frekvence 10 MHz, tak jednočip sleduje okolní svět každých 1/10 000 vteřiny tj. 10 nano vteřiny
Jednočip stačí na ovládání jednodušších robotů. Pokud je robot složitější často jednočip zastává roli zprostředkovatele dat o reálném prostředí pro výkonnější počítače.
Komunikace robota s obsluhou může probíhat pomocí drátové technologie například pomocí sériové linky, USB. Dále může posílat hodnoty na display, který je umístěn na robotovi. Komunikaci lze také zajistit pomocí bezdrátových technologií jako je Bluetooth, kterou jsou vybaveny, jak počítače či mobilní telefony, nebo pomocí Wi-fi technologie.
Způsoby programování a učení robota rozdělujeme do několika skupin. První skupina je přímé programování, podle toho zda robota vedeme, tj. udáváme směr, nebo zadávání povelů z řídícího panelu. Druhá skupina je nepřímé programování, kdy zadáváme křivku dráhy známou z výkresu např. CNC stroje. Třetí skupina je přímé programování robot se programuje podobně, jako v předchozí skupině, ale je ovlivňován daty, která získává z měření pomocí čidel.
Pro orientaci v prostoru slouží robotovi senzory. Obecně senzor je speciální zdroj informací sloužící pro řídicí systém. Senzory lze definovat jako zařízení, které měří určitou fyzikální veličinu a převádí jí na signál, který dálkově odešle do řídicího systému, nebo do čipu robota. Hlavní parametry senzorů jsou citlivost, práh citlivosti, dynamický rozsah, reprodukovatelnost a chyby senzoru. Výstupní hodnota senzoru je většinou dána jako rozdíl napětí, nebo proudu od nuly, která se většinou zadává.
V robotice se nejčastěji využívají senzory dotykové, tj. pružinová tykadla s mikrospínači pro detekci jejich ohnutí, distanční pro měření vzdálenosti např. sonarovou echolokaci, laserové dálkoměry, vizuální jako jsou kamery, stereo vidění, dále senzory pro radionavigaci či pomočí GPS senzorů a dalších různých senzorů.
Jak ovládat robota JU - JU
K ovládání robota potřebujeme program PuTTy (http://www.putty.org/). PuTTY slouží, jako terminál pro připojování na různé servery. Pro připojení je nutné zadat do programu IP adresu, kam se připojujeme: 192.168.2.2, číslo portu: 22, což je komunikace pomocí SSH, poté co se údaje vyplní a stiskne se tlačítko Open (viz obrázek), se objeví na obrazovce terminál, který slouží pro komunikaci s operačním systémem Sweex.
Pro práci s operačním systémem je nutné zadat přihlašovací jméno: root, a heslo: midge. Psaní příkazů je velmi podobné, jako v jiných Linuxových distribucí, které pracují v terminálu. Terminál nám umožňuje práci se systémem, jako vytváření uživatelů, změny hesel, nahlížení do souborů, kompilování souborů, ovládání robota, display. Proto, abych byl nějak schopný ovládat například motory, nebo display, bylo nutné najít nějaké výstupy, které bych byl schopný ovládat.
Ovládání odesláním příkazu
Pro ovládání pomocí příkazové řádky programu PuTTY je přímo na flash disku uložen program „rizeni“, který slouží k ovládání. Aby program sloužil, jako ovládací musí se nejprve zkompilovat přímo ve směrovači, nebo pomocí tool-chain, který je na Linuxovém operačním systému, více informací lze získat přímo ze stránek (Sunspot, 2006). Poté co program zkompilujeme lze už ho využívat pro ovládání robota. Po připojení pomocí programu PuTTY se zadá příkaz „cd c_dev/ovladani“, který nás nasměru do složky, kde je uložen program pro ovládání robota. Poté se zadává příkaz kam má robot jet „./rizeni forward/backward/left/right“. Řídící program se skládá z několika částí. V první části je výpis knihoven, které se volají při běhu programu, dále se definují, které led diody se budou využívat, definují se názvy motorů a ihned se i deklarují.
(výpis kódu programu číslo 1)
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define DATA_LED "/dev/gpio8"
#define CLOCK_LED "/dev/gpio11"
#define RESET_LED "/dev/gpio1"
#define CRR_A 0
#define CRR_B 0
Poté následuje část programu ve kterém se určuje, databit, clockbit a resetbit. Tyto proměné jsou logického typu a nabývají hodnot logické jedničky nebo nuly, podle toho zda je příslušná led dioda aktivovaná nebo ne, zde se na to používá jednoduchá podmínka na otestování stavu led diody. Aby se mohla led dioda mohla rozsvítit musí mít proměná f parametr O_RDWR, který nám určuje, že proměnná bude přístupná ke čtení a zápisu, bez tohoto parametru by nešlo ovládat led diody.
(výpis kódu programu číslo 2)
int DataBit(bool bitt){
int f = open(DATA_LED, O_RDWR);
if(bitt)
write(f, "led switch 1", 12);
else write(f, "led switch 0", 12);
close(f);
}
int ClockBit(bool bitt){
int f = open(CLOCK_LED, O_RDWR);
if(bitt)
write(f, "led switch 1", 12);
else write(f, "led switch 0", 12);
close(f);
}
int ResetBit(bool bitt){
int f = open(RESET_LED, O_RDWR);
if(bitt)
write(f, "led switch 1", 12);
else write(f, "led switch 0", 12);
close(f);
}
Další část programu je sériový přenost, který slouží k přenosu informace do převodníku AVR. Tato část kódu se skládá z několika částí. V první části se definuje pole, které je logického typu a jeho velikost je osm bitů, protože potřebujeme právě osm bitů na převod dekadického čísla do binárního. Pro převod slouží jednoduchý switch, který postupně dělí číslo, které mu pošle hlavní část programu. Poté co číslo vydělí dochází k výpisu na obrazovku, slouží to pro kontrolu, zda se tam opravdu napsalo to číslo, které mělo. Poté se testuje zda byl poslán příkaz reset tak se už nepokračuje, pokud ne tak se pokračuje dál k odeslání příkazu.
(výpis kódu programu číslo 3)
int SerialCommand(int i_byte){
bool data[8];
//Convert int to binary data
int z = i_byte;
int d;
for(int i = 0; i < 8; i++){
switch(i){
case 0: d = 128; break;
case 1: d = 64; break;
case 2: d = 32; break;
case 3: d = 16; break;
case 4: d = 8; break;
case 5: d = 4; break;
case 6: d = 2; break;
case 7: d = 1; break;
}
//printf("[%d/%d]", z, d);
if(z / d > 0){
z = i_byte % d;
data[i] = true;
printf("1,", z);
} else {
data[i] = false;
printf("0,", z);
}
}
printf("\n");
//Reset
ResetBit(true);
ResetBit(false);
usleep(1000);
//Send
for(int i = 0; i < 8; i++){
if(data[i] == false)
DataBit(true);
else
DataBit(false);
ClockBit(true);
ClockBit(false);
usleep(1000);
}
}
Po té následuje poslední část programu. Je to samotný program, který se skládá ze 6 podmínek. Každá podmínka má dva argumenty, kdy druhý argument je slovo, které se napíše do řádky kam chceme, aby robot jel. Jelikož by byl problém s českými znaky bylo rozhodnuto pro zadávání anglických slov forward, backward, lef, right. Podmínky čekají, jaké slovo se oběví v argumentu a podle toho vyšlou příkaz do předcházející části kódu, který se stará o přenost do převodníku AVR. Jelikož můžeme díky můstku Sabertooth 2X10 ovládat i rychlost motorů nejsou v jednotlivých podmíkách nastaveny maximální hodnoty, ale vždy takové hodnoty, aby se oba motory otáčeli stejnou rychlostí. Poslední podmíka slouží jako nápovědě, pokud by se zadal špatný příkaz, aby vypsal do příkazové řádky příkazy, které jsou zpracovatelné.
(výpis kódu programu číslo 4)
int main(int argc,char *argv[]){
( //Send
if(strcmp(argv[1], "stop") == 0){
printf("Stopping...\n");
SerialCommand(0);
}
else if(strcmp(argv[1], "forward") == 0){
printf("Going forward...\n");
SerialCommand(9 + CRR_A);
SerialCommand(128 + CRR_B);
}
else if(strcmp(argv[1], "backward") == 0){
printf("Going backward...\n");
SerialCommand(127 + CRR_A);
SerialCommand(255 + CRR_B);
}
else if(strcmp(argv[1], "left") == 0){
printf("Turning left...\n");
SerialCommand(1 + CRR_A);
SerialCommand(192 + CRR_B);
}
else if(strcmp(argv[1], "right") == 0){
printf("Turning right...\n");
SerialCommand(64 + CRR_A);
SerialCommand(128 + CRR_B);
} else printf("Usage: ./rizeni [forward|stop|backward|left|right]\n"))
}
Ovládání grafickým rozhraním
Ovládání pomocí webového prohlížeče je rozděleno celkem na tři části. První část je webová stránka, která slouží pro zadávání směru a rychlosti robota. Webová aplikace je uložena přímo na flash disku, na kterém je uložen celý operační systém. Pro zobrazení stránky, musí být uživatel připojen k robotovi. Poté zadá do prohlížeče adresu: http://192.168.2.2/rc-dc/console/, kde uživatel klikne na odkaz Controller, který pomocí javascriptu načte formulář, který umožňuje ovládání robota. Pohyb robota lze ovládat pomocí počítačové myši, která je na ovládání přesnější, nebo pomocí kláves. Klávesa w slouží pro pohyb dopředu, klávesa s pro pohyb dozadu, klávesa a pro pohyb doleva, klávesa d pro pohyb doprava a klávesa x pro okamžité zastavení pohybu robota. Jelikož se stisknuté znaky porovnávají s ASCII tabulkou je nutné písmena zadávat malá, nikoliv velká.
Použitý HW
Wireless Broadband router BR-6104KP s ADM5120P odkazy: RouterLinux - sweex