Podpůrný software pro výuku mobilní robotiky

Transkript

Podpůrný software pro výuku mobilní robotiky
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE
Fakulta elektrotechnická
BAKALÁŘSKÁ PRÁCE
Hana Szücsová
Podpůrný software pro výuku mobilní robotiky
Katedra kybernetiky
Vedoucí bakalářské práce: Ing. Jan Faigl
Zadání
Prohlášení
Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze
podklady (literaturu, projekty, SW atd.) uvedené v přiloženém seznamu.
Poděkování
Chtěla bych především poděkovat svému vedoucímu bakalářské práce Janu Faiglovi
za jeho trpělivost, čas a stále dobrou náladu. Dále všem lidem z Gerstnerovi laboratoře,
kteří mi byli kdykoliv ochotni podat pomocnou ruku. Také chci poděkovat svému příteli
Vladimírovi a členům rodiny za psychickou podporu.
Abstrakt
Tato práce se zabývá vývojem podpůrného softwaru pro výuku předmětu
mobilní robotika, která probíhá nejen formou teoretického výkladu, ale
také jako praktická cvičení s reálnými roboty. Pro potřeby cvičení byla
vyvinuta robotická platforma Morbot. Součástí podpory výuky je konfigurace palubního počítače Morbotu skládající se z nastavení parametrů jeho periférií, ale především přípravy prostředí křížové kompilace
systému Player, jehož součástí je implementovaný modul pro přístup
k Morbotu. Hlavní výhodou použití prostředí Player je snadný přenos
odladěné aplikace v simulátoru na reálný robot. Součástí práce je popis
implementace modulu Morbotu spolu s ukázkami přenosu aplikace ze
simulátoru na reálný robot. V práci jsou dále diskutována zadání úloh
řešených na předmětu mobilní robotika. Ukázková řešení jsou studijními
materiály, které přibližují řešenou problematiku a principy Playeru studentům, kteří tak mohou řešit pokročilé úlohy.
Abstract
The goal of this thesis is a creation of supporting software for teaching of
mobile robotics. Labs of the course are completed by hands-on trainings
with real robots. A robotic platform called Morbot was specially developed for the mobile robotics course. A part of support is configuration
of the main computer of the robotic platform, which is not only settings
of peripheral devices but mainly setup of cross-compilation environment
for compiling the Player framework with implemented Morbot accessing
module. An advantage of using the Player environment is simple application migration from a robot simulator to the real robot platform
Morbot. The thesis includes a description of implementation of Morbot
module. The main part of the thesis is dedicated to discussion of the
tasks definition solved at trainings. Example solutions are presented as
well, which can be used by students as study materials.
OBSAH
Podpůrný software pro výuku mobilní robotiky
Obsah
1 Úvod
1
2 Morbot
3
2.1
Palubní počítač . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 Player/Stage
4
7
Používání Playeru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.1.1
Používání Stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
3.2
Modely zasílání zpráv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
3.3
Implementace ovladače . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.3.1
Začlenění nového ovladače do Playeru . . . . . . . . . . . . . . . . .
15
3.3.2
Implementace ovladače pro robot Morbot . . . . . . . . . . . . . . .
16
3.1
4 Úlohy na X33MOR
20
4.1
Verzovací systém SVN . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
4.2
Implementace klientské aplikace . . . . . . . . . . . . . . . . . . . . . . . .
23
4.3
Řízení pohybu robotu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.1
Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.2
Zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.3
Rozbor zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.4
Implementace regulátoru . . . . . . . . . . . . . . . . . . . . . . . .
26
4.3.5
Spuštění aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Detekce překážek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.1
Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.2
Zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.3
Vlastnosti dálkoměrných senzorů . . . . . . . . . . . . . . . . . . .
31
4.4.4
Vytvoření modelu senzorů v simulátoru Stage . . . . . . . . . . . .
33
4.4.5
Implementace úlohy v simulátoru . . . . . . . . . . . . . . . . . . .
36
4.4.6
Přizpůsobení aplikace pro Morbot . . . . . . . . . . . . . . . . . . .
39
Algoritmy třídy BUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.5.1
40
4.4
4.5
Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i
OBSAH
4.6
4.7
Podpůrný software pro výuku mobilní robotiky
4.5.2
Zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.5.3
Algoritmy třídy Bug . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.5.4
Implementace algoritmu třídy Bug v simulátoru . . . . . . . . . . .
45
Metody vizuální navigace . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6.1
Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6.2
Zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4.6.3
Rozhraní BlobfinderProxy v simulátoru Stage . . . . . . . . . . . .
49
4.6.4
Implementace algoritmu pro vizuální navigaci na základě dat z inteligentní kamery . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
Tvorba topologické mapy . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
4.7.1
Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
4.7.2
Zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
4.7.3
Základní druhy modelů prostředí . . . . . . . . . . . . . . . . . . .
54
4.7.4
Rozbor úlohy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.7.5
Popis implementace . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
5 Závěr
58
ii
SEZNAM OBRÁZKŮ
Podpůrný software pro výuku mobilní robotiky
Seznam obrázků
1
Robotická platforma Morbot využívaná při výuce mobilní robotiky. . . . .
2
2
Architektura Morbotu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
Základní deska Verdex (a) a netwifimicroSD modul (b), převzato z [2].
. .
4
4
Architektura Playeru. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
5
Ukázky prostředí robotických simulátorů, převzato z [5]. . . . . . . . . . .
8
6
Robot specifikovaný v konfiguračním souboru morbot.inc. . . . . . . . . . .
11
7
Hierarchie tříd v ovladači pro robot Morbot. . . . . . . . . . . . . . . . . .
17
8
Část adresářové struktury šablony. . . . . . . . . . . . . . . . . . . . . . .
21
9
Princip SVN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
10
Souřadný systém robotu. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
11
Průběh první úlohy v simulátoru. . . . . . . . . . . . . . . . . . . . . . . .
29
12
Princip IR dálkoměrného senzoru. . . . . . . . . . . . . . . . . . . . . . . .
31
13
Převodní charakteristika IR senzorů, převzato z [10]. . . . . . . . . . . . .
32
14
Původ falešných ech sonaru. . . . . . . . . . . . . . . . . . . . . . . . . . .
32
15
Vyzařovací charakteristika sonaru SRF10, převzato z [11]. . . . . . . . . .
33
16
Možný průběh druhé úlohy. . . . . . . . . . . . . . . . . . . . . . . . . . .
37
17
Naměřená převodní charakteristika IR senzorů.
. . . . . . . . . . . . . . .
40
18
Trajektorie nalezená algoritmem Bug1. . . . . . . . . . . . . . . . . . . . .
42
19
Bug1 - nedosažitelný cíl. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
20
Trajektorie generované algoritmem Bug2. . . . . . . . . . . . . . . . . . . .
44
21
Vývojový diagram algoritmu reaktivního řízení. . . . . . . . . . . . . . . .
46
22
Průběh třetí úlohy v simulátoru. . . . . . . . . . . . . . . . . . . . . . . . .
49
23
Simulace pohledu kamery v prostředí simulátoru Stage. . . . . . . . . . . .
50
24
Příklad prostředí a jeho reprezentace topologickou mapou. . . . . . . . . .
55
iii
SEZNAM TABULEK
Podpůrný software pro výuku mobilní robotiky
Seznam tabulek
1
Základní rozhraní Playeru. . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2
Základní funkce třídy PlayerClient. . . . . . . . . . . . . . . . . . . . . . .
24
3
Přehled základních rozhraní proxy. . . . . . . . . . . . . . . . . . . . . . .
24
4
Základní funkce třídy Position2DProxy. . . . . . . . . . . . . . . . . . . . .
24
5
Základní funkce rozhraní BlobfinderProxy . . . . . . . . . . . . . . . . . . .
25
6
Položky datové struktury typu playerc blobfinder blob t. . . . . . . . . . .
51
7
Obsah přiloženého CD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
iv
SEZNAM VÝPISŮ KÓDU
Podpůrný software pro výuku mobilní robotiky
Seznam výpisů kódu
1
Konfigurace wifi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2
Připojení microSD na příkazové řádce. . . . . . . . . . . . . . . . . . . . .
6
3
Připojení microSD úpravou souboru /etc/fstab. . . . . . . . . . . . . . . .
6
4
Konfigurační soubor - morbot.cfg. . . . . . . . . . . . . . . . . . . . . . . .
8
5
Definice modelu Morbotu - morbot.inc. . . . . . . . . . . . . . . . . . . . .
9
6
Definice vlastností senzorů (součást morbot.inc). . . . . . . . . . . . . . . .
10
7
Definice světa - task1.world. . . . . . . . . . . . . . . . . . . . . . . . . . .
11
8
Definice vlastností překážek ve světě. . . . . . . . . . . . . . . . . . . . . .
12
9
Konfigurační soubor Playeru pro spuštění simulátoru Stage - task1.cfg. . .
13
10
Funkce Morbot Register(DriverTable* table). . . . . . . . . . . . . . . . . .
15
11
Funkce Morbot Init(ConfigFile* cf, int section). . . . . . . . . . . . . . . .
15
12
Test konfiguračního souboru na přítomnost rozhraní position2d. . . . . . .
15
13
Načtení proměnné port z konfiguračního souboru. . . . . . . . . . . . . . .
16
14
Funkce Setup. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
15
Funkce Main. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
16
Funkce MatchMessage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
17
Funkce Shutdown. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
18
Konstruktor třídy CMorbot. . . . . . . . . . . . . . . . . . . . . . . . . . .
25
19
Použití instancí tříd Proxy pro načtení dat. . . . . . . . . . . . . . . . . . .
25
20
Funkce moveTo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
21
Funkce printStatus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
22
Konfigurační soubor morbot.cfg - vytvoření rozhraní position2d. . . . . . .
30
23
Ukázka funkce main. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
24
Definice modelu IR senzorů. . . . . . . . . . . . . . . . . . . . . . . . . . .
33
25
Definice modelu sonarů. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
26
Konfigurační soubor pro vytvoření dvou rozhraní sonarProxy. . . . . . . . .
34
27
Výpis Playeru - kontrola vytvoření dvou rozhraní pro dálkoměrné senzory.
35
28
Vytvoření instancí třídy CRangeFinder pro vyčítání dat ze dvou modelů
dálkoměrných senzorů. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
Funkce moveTo v druhé úloze. . . . . . . . . . . . . . . . . . . . . . . . . .
38
29
v
SEZNAM VÝPISŮ KÓDU
Podpůrný software pro výuku mobilní robotiky
30
Natočení robotu bokem k překážce. . . . . . . . . . . . . . . . . . . . . . .
46
31
Objezd překážky. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
32
Definice barevných kanálů algoritmu blobfinder. . . . . . . . . . . . . . . .
50
33
Ukázka funkcí třídy CCamera. . . . . . . . . . . . . . . . . . . . . . . . . .
52
34
Regulátor pro dojezd ke krabici známé barvy, funkce gotoColor. . . . . . .
53
vi
Podpůrný software pro výuku mobilní robotiky
1
Úvod
Mobilní robotika se zabývá řešením problémů týkající se pohybujících se robotů, mezi
které patří lokalizace robotu v prostředí, mapování nebo plánování trajektorie robotu. Pro
řešení těchto komplexních úloh je nutná řada dílčích algoritmů, řešící jednotlivé problémy
od vyčítání dat senzorů přes zpracování dat, vlastní plánování a rozhodování až po generování akčních zásahů, které realizují interakci robotu s prostředím. Student mobilní
robotiky musí mít relativně široké teoretické znalosti, které mu umožní porozumět základním architekturám řízení mobilních robotů, jejichž chování bychom označili za inteligentní.
Na druhé straně je vhodné teoretické znalosti podpořit prakticky získanými zkušenostmi,
neboť v reálném světě je nutné zpravidla řešit nepřesnosti, způsobené šumem.
Výuka mobilní robotiky může probíhat formou teoretických výkladů doplněných o praktická cvičení. Při výuce je vhodné využít robotických simulátorů, neboť ty umožňují soustředit se na řešení konkrétního problému (algoritmů) Ostatní nezbytné komponenty systému interakce robot↔prostředí jsou součástí simulačního prostředí. Přestože v prostředí
robotického simulátoru mohou být senzory modelovány včetně chyb měření, vždy se jedná
pouze o modely a jejich chování může být reálným senzorům více či méně vzdálené. Výhodou ideálního chování senzorů je názornost demonstrace algoritmů používaných v mobilní
robotice. Pokud je však studentům umožněno pracovat také s reálnými roboty, získávají
studenti cenné zkušenosti a cvičení se stanou mnohem názornějšími, ale také náročnějšími.
Právě náročnost praktické realizace některé robotické úlohy na reálném robotu je hlavní
motivací pro tuto bakalářskou práci. Vytvořením podpůrného software, který mohou studenti využít při řešení praktických úloh, jim může pomoci překonat především počáteční
náročnou fázi, než se robot začne opravdu alespoň trochu smysluplně pohybovat. Ačkoliv tato úloha může znít triviálně, při experimentování s reálným robotem je nutné čelit
řadě problémů, které v simulaci nenastávají, počínaje omezenou kapacitou akumulátorů,
rušením rádiového spojení s robotem až po nepřesnosti v řízení a chyby ve vyčítaných
senzorický datech.
Základní úvod do problematiky mobilní robotiky na ČVUT v Praze poskytuje kurz
Mobilní robotika vyučovaný katedrou kybernetiky. Výuka probíhá formou teoretických
výkladů, které se zabývají především rozborem typických úloh z oblasti mobilní robotiky,
jako je pohyb robotu, zpracování senzorických dat, lokalizace nebo mapování. Výklad je
doplněn cvičeními, na kterých je postupně programováno pět na sebe navazujících úloh, jejichž výsledkem by mělo být vytvoření topologické mapy prostředí a bezkolizní autonomní
pohyb robotu v tomto prostředí. Jednotlivé úlohy jsou vždy řešeny nejdříve v robotickém
simulátoru a poté jsou přeneseny na reálný robot. Pro potřeby cvičení byla vyvinuta robotická platforma Morbot, jejíž senzorické vybavení je uzpůsobeno tomu, aby bylo možné
všech pět úloh na platformě realizovat. Platforma je zobrazena na obrázku 1.
První část této práce se zabývá základním softwarovým vybavením palubního počítače
Morbotu a konfigurací periférií palubního počítače. Druhá část popisuje obecný postup
vývoje softwarového modulu pro integraci nepodporovaného hardware do systému Pla1/60
Podpůrný software pro výuku mobilní robotiky
Obrázek 1: Robotická platforma Morbot využívaná při výuce mobilní robotiky.
yer a také konkrétní implementaci modulu pro robot Morbot. Player poskytuje abstrakci
přístupu k hardware robotu založenou na unifikovaném rozhraní, které implementují jednotlivé moduly Playeru. Je poskytován jednotný přístup k modelu robotu v simulátoru i
reálnému robotu, proto značně zjednodušují přenos aplikace odladěné v robotickém simulátoru na reálný robot. V druhé části budou také popsány základní dovednosti, které jsou
pro práci s Playerem důležité. Hlavní část práce je popisem pěti úloh, řešených v rámci
semestrální práce na cvičení. Zabývá se motivací studentů pro řešení úloh a jejich zadáním,
ale také rozborem zadání, tématickým pozadím úloh, návrhy řešení a jejich ukázkami.
2/60
Podpůrný software pro výuku mobilní robotiky
2
Morbot
Morbot je označení pro robotickou platformu vyvinutou pro potřeby předmětu Mobilní
robotika, X33MOR. Jedná se o mobilní robot rozměrů 24x22x20cm, který je navržen tak,
aby mohl být využíván studenty předmětu mobilní robotika.
Hlavní rám robotu je postaven z pevných hliníkových profilů. Tvar robotu byl uzpůsoben
tomu, aby rám odolal i velmi prudkým nárazům. Ke standardnímu senzorickému vybavení
patří enkodéry a sedm taktilních nárazníků detekujících kolize. Robot může být vybaven i
dalšími senzory, které mohou studenti volit dle zadané úlohy:
• čtyři infračervené dálkoměrné senzory,
• dva ultrazvukové dálkoměrné senzory (sonary) a
• inteligentní kamera.
Umístění dálkoměrných senzorů je variabilní, jejich poloha může být měněna v závislosti
na řešeném problému.
Obrázek 2: Architektura Morbotu.
Základní architektura Morbotu je znázorněna na obrázku 2. Z hlediska přístupu studenta k Morbotu je nejdůležitější palubní počítač komunikující převážně s řídicí deskou
3/60
2.1 Palubní počítač
Podpůrný software pro výuku mobilní robotiky
prostřednictvím sériového rozhraní RS232. Řídicí deska sbírá data ze všech senzorů kromě
inteligentní kamery, obstarává komunikaci s řídicí jednotkou motorů a udržuje aktuální
informaci o poloze robotu počítanou z odometrických dat.
V následujícím oddíle této kapitoly se seznámíme s palubním počítačem, konkrétně
s jeho základním softwarovým vybavením a nastavením jeho periférií. Tato znalost je důležitá při řešení případných problémů s palubním počítačem, které se mohou vyskytnout
při řešení úloh na předmětu X33MOR. Podrobnější informace o elektronických částech a
konstrukci Morbotu lze najít v práci [1].
2.1
Palubní počítač
Palubní počítač Morbotu je platforma Verdex XL6P vyvíjená firmou Gumstix [2]. Jeho
hlavní součástí je procesor páté generace architektury ARM, PXA270 [3]. Architektura
ARM je založena na RISCové instrukční sadě, instrukce jsou prováděny přímo hardwarem,
nikoli mikrokódem. Výhodou jsou malé rozměry a nízká spotřeba energie. Procesor využívá
32MB programové paměti typu Flash a operační paměť RAM 128MB.
Základní deska s procesorem je rozšířena dvěma periferními deskami:
• upravenou verzí desky console vx a
• deskou netwifimicroSD EU.
Upravená verze desky console vx obsahuje rozhraní tří sériových portů vyvedených na
pinové konektory a konektor pro miniUSB, oproti standardní verzi je rozšířena o konektor
pro připojení I2 C sběrnice. NetwifimicroSD poskytuje Ethernet 100Mb/s, WiFi 802.11g
modul pro bezdrátové připojení a slot pro microSD kartu. Rozšířující modul a základní
deska jsou na obrázku 3.
(a)
(b)
Obrázek 3: Základní deska Verdex (a) a netwifimicroSD modul (b), převzato z [2].
4/60
2.1 Palubní počítač
Podpůrný software pro výuku mobilní robotiky
Základní softwarové vybavení
Z hlediska softwarového vybavení palubního počítače je důležitý obsah paměti Flash,
která je rozdělena do tří sektorů. První sektor obsahuje zavaděč U-boot, který slouží pro
načtení a spuštění operačního systému. Obsahuje funkce přístupu k periferním zařízením
pro aktualizaci operačního systému. V druhém sektoru jsou ukládány proměnné prostředí
zavaděče. Tyto dva sektory jsou softwarově chráněny proti přepsání z důvodu zamezení
náhodnému vymazání zavaděče z paměti.
Třetí sektor slouží k uložení souborového systému JFFS2 (Journaling Flash File System
version 2), který je kořenovým adresářem, obsahuje vlastní jádro operačního systému Linux
a základní uživatelské prostředí. JFFS2 je souborový systém určený pro paměti typu Flash.
Soubory z něj nejsou vymazávány, jsou pouze přidávány novější verze. Jakmile je paměť
zaplněna, jsou starší verze souborů vymazány a provádí se defragmentace [4].
Konfigurace periférií
Základní deska palubního počítače je rozšířena o periferní obvody, které nám poskytují
rozhraní WiFi, Ethernet, slot pro microSD kartu, sériová rozhraní a miniUSB konektor.
Použitý obraz souborového systému obsahuje základní konfiguraci těchto rozhraní, proto
je zapotřebí nastavit pouze parametry některých zařízení.
Pro nastavení WiFi sítě je zapotřebí provést sekvenci příkazů:
• nastavení klíče,
• výběr módu připojení a
• specifikace přístupového bodu.
Sekvence příkazů je uvedena ve výpisu 1.
iwconfig
iwconfig
iwconfig
iwconfig
wlan0
wlan0
wlan0
wlan0
key on
key *****
mode managed/ad-hoc
essid *****
Výpis 1: Konfigurace wifi.
Experimentálně bylo ověřeno, že příkazy je nutné provést v uvedeném pořadí. Sekvenci
je možné napsat ve formě skriptu a přidat jej do souboru /etc/rc.5. Soubory /etc/rc.*
jsou spouštěny při zavádění operačního systému a provádějí jeho inicializaci. Číslo v názvu
souboru označuje tzv. runlevel, uživatelem mohou být vetšinou konfigurovány úrovně čtyři
a pět.
5/60
2.1 Palubní počítač
Podpůrný software pro výuku mobilní robotiky
Při konfiguraci Ethernet rozhraní si můžeme vybrat buď nastavení pevné IP adresy nebo
přiřazovaní dynamické IP adresy serverem DHCP. Nastavení se provádí v konfiguračním
souboru /etc/interfaces/network.
Rozšiřující paměť, karta microSD, musí být v základní konfiguraci operačního systému
palubního počítače naformátována souborovým systémem FAT32. Její připojení provedeme
příkazem ve výpisu 2. Druhou možností je přidání jednoho řádku z výpisu 3 do souboru
/etc/fstab.
mount -t vfat /memory/card /dev/mmcblk1p0
Výpis 2: Připojení microSD na příkazové řádce.
/dev/mmcblk1p0
/opt
vfat
rw,fmask=0022,dmask=0022,uid=500
0
0
Výpis 3: Připojení microSD úpravou souboru /etc/fstab.
Sériové porty ani miniUSB nepotřebují žádná zvláštní nastavení.
6/60
Podpůrný software pro výuku mobilní robotiky
3
Player/Stage
Player [5] je framework, který realizuje abstrakci přístupu k hardware robotu. Abstrakce
je založena na unifikovaném rozhraní, které implementují rozšiřující moduly komunikující
s konkrétní hardwarovou částí robotu. Moduly existují jak pro samostatné senzory, jako
jsou laserové dálkoměry firmy SICK nebo inteligentní kamery CMUcam2, tak pro celé
roboty, např. Pioneer nebo Amigobot. Moduly mohou také realizovat různé algoritmy
používané v mobilní robotice, jako je lokalizační algoritmus Monte Carlo nebo Blobfinder
pro vyhledávání souvislých barevných oblastí v obraze.
Moduly můžeme rozdělit do dvou skupin. První skupinou jsou staticky linkované moduly, které jsou nedílnou součástí hlavní aplikace. Jejich povolení nebo zákaz je proveden
při konfiguraci instalace Playeru. Takové moduly budeme dále nazývat ovladače. Do druhé
skupiny řadíme dynamicky linkované moduly, které budeme nazývat pluginy.
Architektura zapouzdřující aplikace je založena na modelu server/klient, schematicky
je znázorněna na obrázku 4. Tento přístup nám umožňuje vybrat si pro implementaci
klientských aplikací ze široké škály programovacích jazyků, např.: C++, Javu nebo Python.
O aplikaci reprezentující serverovou část budeme dále mluvit jako o Playeru.
Obrázek 4: Architektura Playeru.
Jedním z rozšiřujících pluginů Playeru je Stage, robotický simulátor pro mobilní roboty. Poskytuje modely různých senzorů, jako jsou sonary, nárazníky nebo infračervené
dálkoměry. Z hlediska Playeru mají tyto modelované senzory stejné rozhraní jako ovladače
skutečného hardware. Klientská aplikace tak může být vyvíjena v simulátoru a přenesena
na reálný robot s žádnými nebo malými změnami. Virtuální roboty se pohybují a sbírají
senzorická data ve dvourozměrném světě, který je reprezentován bitmapovým obrázkem.
Roboty i světy jsou specifikovány v konfiguračních souborech, které umožňují definovat
kromě základních vlastností také nepřesnosti, např. chybu odometrie.
Obdobou Stage je plugin Gazebo. Jedná se také o simulátor, ale tentokrát venkovních
prostředí v třídimenzionálním světě. Dokáže věrněji vytvářet zpětnou vazbu senzorů a
fyzikálně věrohodnější interakci mezi objekty než simulátor Stage. Gazebo také využívá
7/60
3.1 Používání Playeru
Podpůrný software pro výuku mobilní robotiky
standardního rozhraní pro Player, proto mohou být moduly napsané pro Stage použity i
pro Gazebo. Grafická prostředí simulátorů Stage a Gazebo jsou ukázány na obrázku 5.
(a) Stage
(b) Gazebo
Obrázek 5: Ukázky prostředí robotických simulátorů, převzato z [5].
V následujících třech částech budou popsány některé základní dovednosti, které mohou
být uplatněny při používání Playeru a simulátoru Stage. V první části je ukázáno, jakým
způsobem je možné implementovat konfigurační soubory pro definici požadovaných rozhraní při spuštění Playeru a Stage a pro specifikaci modelu světa a modelu robotu. V další
části si vysvětlíme možné způsoby komunikace mezi serverem a klientskou aplikací a rozdíly
mezi nimi. V poslední části je popsána implementace nového ovladače hardware, nejdříve
obecně a poté konkrétní implementace ovladače pro robot Morbot.
3.1
Používání Playeru
Nedílnou součástí Playeru je velké množství modulů. Při každém spuštění serveru je
nutné specifikovat požadavek na konkrétní moduly konfiguračním souborem. Player se
spustí s parametrem souboru příkazem player configFile.cfg.
Na příkladu konfiguračního soubor morbot.cfg uvedeném ve výpisu 4 bude ukázána
základní syntax konfiguračních souborů Playeru. Tento soubor zajistí vytvoření rozhraní
pro odometrii a ultrazvukové dálkoměry
driver
(
name "morbot"
provides ["position2d:0"
"sonar:0"]
port "/dev/ttyS2"
)
Výpis 4: Konfigurační soubor - morbot.cfg.
8/60
3.1 Používání Playeru
Podpůrný software pro výuku mobilní robotiky
V každém konfiguračním souboru může být více sekcí ohraničených kulatými závorkami
a uvozených klíčovým slovem driver. V takovém případě je využíváno více modulů najednou. Mezi závorkami se může nacházet několik druhů proměnných. Mezi základní patří:
• name,
• provides a
• requires.
Proměnná name udává název načítaného modulu, ovladače nebo pluginu. Hodnotou
proměnné provides jsou poskytovaná rozhraní, seznam často používaných rozhraní je uveden v tabulce 1. Requires je proměnnou obsahující seznam nutných rozhraní pro správnou
funkčnost modulu.
Proměnná port je zavedena v ovladači pro robot Morbot. Hodnotou je označení sériového
portu využívaného na palubním počítači. Proměnná je načítána při inicializaci ovladače
pro Morbot, pokud není nalezena, je nahrazena definovanou konstantou.
Název rozhraní
blobfinder
bumper
ir
laser
limb
planner
position2d
simulation
sonar
Popis
visuální vyhledávání barevných oblastí v obraze
nárazníky
IR dálkoměry
laserové dálkoměry
ovládání robotického ramene s více klouby
planární plánovač cesty robotu
odometrie
robotický simulátor
ultrazvukový dálkoměr
Tabulka 1: Základní rozhraní Playeru.
3.1.1
Používání Stage
Jedním z pluginů Playeru je robotický simulátor Stage. Pokud se rozhodneme tento simulátor použít, je potřeba předem definovat model robotu (soubor *.inc) a model světa
(soubor *.world). Jako příklad uvedeme konfiguraci simulačního prostředí, které je využíváno studenty předmětu X33MOR. Ve výpisu 5 jsou specifikovány vlastnosti i vzhled
robotu.
define morbot position
(
# definice lokalizace odometrií
9/60
3.1 Používání Playeru
Podpůrný software pro výuku mobilní robotiky
localization "odom"
# specifikace chyby odometrie
odom_error [0.0 0.01 0.0 0.01 0.0 0.01]
# barva robotu
color "orange"
# velikost robotu
size [0.25 0.25]
#offset od středu otáčení
origin [-0.0 0.0 0]
# podoba přední části robotu
gui_nose 1
# odhad váhy v kg
mass 2.0
# definice maximální rychlosti
max_speed 0.1
# vytvoření přibližného tvaru robotu polygony
polygons 3
# uveden první polygon, další dva se tvoří obdobným způsobem
polygon[0].points 4
polygon[0].point[0] [ 0.050 0.124 ]
polygon[0].point[1] [ 0.050 0.085 ]
polygon[0].point[2] [ -0.050 0.085 ]
polygon[0].point[3] [ -0.050 0.124 ]
...
# diferenciální řízení
drive "diff"
# použití definice sharpů a kamery (uvedeno níže)
morbot_sharp()
morbot_camera()
).
Výpis 5: Definice modelu Morbotu - morbot.inc.
Definice senzorů, infračervených dálkoměrů a kamery, je uvedena ve výpisu 6, který je
součástí souboru morbot.inc.
# definice vlastností infračervených dálkoměrů
define morbot_sharp ranger (
# počet senzorů
scount 2
# poloha senzorů na robotu [xpos ypos heading]
spose[0] [ 0.12 0.00 00 ]
spose[1] [ 0.00 0.08 90 ]
# vlastnosti senzorů [range_min range_max view_angle]
10/60
3.1 Používání Playeru
Podpůrný software pro výuku mobilní robotiky
sview [0.15 0.8 1]
# velikost jednotivých senzorů [xsize ysize] in meters
ssize [0.01 0.03]
)
# vlastnosti kamery
define morbot_camera (
ptz (
# poloha kamery na robotu
pose [0.05 0 0]
# specifikace barev pro blobfinder
blobfinder(
channel_count 1
channels ["red"]
)
)
)
Výpis 6: Definice vlastností senzorů (součást morbot.inc).
Součástí simulačního prostředí je také vizualizace, ukázka grafického prostředí je na
obrázku 5. Na obrázku 6 je zobrazen robot, který byl specifikován v souboru morbot.inc,
ve výpisu 5.
Obrázek 6: Robot specifikovaný v konfiguračním souboru morbot.inc.
Svět, ve kterém se robot pohybuje a plní zadané úlohy je definován v souboru *.world.
Syntax si ukážeme na definici světa task1.world, který je uveden ve výpisu 7. Tento svět
se od ostatních používaných na X33MOR liší načítaným bitmapovým obrázkem, který
představuje podobu pracovního prostředí robotu.
include "morbot.inc"
include "map.inc"
# velikost světa v metrech
size [10 10]
# nastavení rozlišení v metrech
resolution 0.05
# interval pro update simulátoru
gui_interval 20
11/60
3.1 Používání Playeru
Podpůrný software pro výuku mobilní robotiky
# definice okna grafického prostředí
window (
# velikost
size [ 600.000 600.000 ]
# střed
center [-.0 -.0]
# mřížka
scale 0.010
)
#načtení mapy světa
map (
bitmap "bitmaps/task1.png"
size [5 5]
name "task1map"
)
# vytvoření robotu dle nadefinovaného modelu
morbot (
name "robot1"
#počáteční pozice robotu ve světě [xpos ypos angle]
pose [-1 -2 90]
)
Výpis 7: Definice světa - task1.world.
Ve světě se mohou nacházet překážky, které mohou být buď součástí připravených bitmapových obrázků nebo specifikovány v konfiguračním souboru světa. Ve druhém případě je
možné s překážkami pohybovat i v průběhu simulace. Definice překážky je uvedena ve
výpisu 8.
#definice modelu překážky
define puck model(
size [ 0.8 0.8 ]
gui_movemask 3
gui_nose 0
fiducial_return 10
)
#umístění překážky a její barva
puck( pose [0 -1 0] color "red" )
puck( pose [0 1 0] color "blue" )
Výpis 8: Definice vlastností překážek ve světě.
12/60
3.2 Modely zasílání zpráv
Podpůrný software pro výuku mobilní robotiky
Pro spuštění stage je nutné vytvořit konfigurační soubor specifikující načítaný model
světa a model robotu, který se předává Playeru při spuštění. Takový konfigurační soubor
je uveden ve výpisu 9. Oproti konfiguračnímu souboru z výpisu 4, obsahuje nové proměnné:
• plugin,
• worldfile a
• model.
driver
(
name "stage"
provides ["simulation:0" ]
plugin "libstageplugin"
worldfile "task1.world"
)
driver
(
name "stage"
provides ["position2d:0"]
model "robot1"
)
Výpis 9: Konfigurační soubor Playeru pro spuštění simulátoru Stage - task1.cfg.
Hodnota proměnné plugin je jménem použitého modulu, v tomto případě libstageplugin.
Jedná se o dynamicky linkovanou knihovnu, která se používá pro simulaci robotů nejen
jako modul Playeru, ale také jako knihovna v jazyce C. Knihovna může být umístěna:
• v adresáři, ve kterém je uložen konfigurační soubor Playeru nebo
• v adresáři /usr/local/lib, do kterého je knihovna ukládána při instalaci Stage.
Hodnota proměnné worldfile je název načítaného modelu světa a hodnota proměnné
model je název modelu robotu.
3.2
Modely zasílání zpráv
Architektura Playeru je založena na modelu server/klient. Mezi serverem a klientskou
aplikací existuje komunikace založená na výměně zpráv.
V rámci Playeru existují dva standardní módy, které jsou používány pro výměnu zpráv,
PULL a PUSH mód. Způsoby zasílání zpráv ovlivňují pouze frontu příchozích zpráv na
13/60
3.3 Implementace ovladače
Podpůrný software pro výuku mobilní robotiky
straně klienta, nikoliv zasílání zpráv ve směru k serveru. Standardně je v Playeru nastaven
PUSH mód.
Při použití PUSH módu jsou zprávy ze serveru zasílány ve chvíli, kdy jsou vygenerovány.
Je na klientovi, aby dokázal zprávy přijímat dostatečně rychle. Předpokládá se, že operační
systém na straně klienta dokáže udržovat vyrovnávací paměť, ze které předává zprávy
klientovi při každém volání funkce Read(). Pokud jsou zprávy vyčítány příliš pomalu,
dostává klientská aplikace neaktuální informace a navíc velikost vyrovnávací paměti nemusí
stačit.
Takový případ nenastane při použití PULL módu. Fronta zpráv je udržována na straně
serveru a zprávy jsou zasílány pouze na žádost klienta. Navíc mohou být nadefinována
pravidla pro přepisování zpráv uvnitř fronty funkcí AddReplaceRule().
V případě Morbotu může být ponecháno implicitní nastavení PUSH módu. Toto řešení
je jednodušší, protože nenastává problém s přetečením vyrovnávací paměti nebo s neaktuálností zpráv, neboť mezi serverem a klientem jich není posíláno příliš mnoho.
3.3
Implementace ovladače (verze Playeru 2.0.3)
Pro ovládání nepodporovaného hardware rozhraním Playeru je nutná implementace nového modulu. Rozhodli jsme se pro řešení implementace ovladačem, tedy staticky linkovaným modulem. Každý ovladač Playeru je odvozen od třídy Driver, která zajišťuje výměnu
zpráv mezi serverem a klientskou aplikací a povolování jednotlivých ovladačů. Dokumentace je dostupná na [6].
Každý ovladač musí implementovat dvě funkce pro jeho registraci:
• Register(Drivertable* table) a
• Init(ConfigFile* cf, int section).
Kromě nich je nezbytné implementovat tři základní funkce, které zajišťují základní funkcionalitu ovladače:
• Setup(),
• Main() a
• Shutdown().
Funkce Setup je první spouštěnou funkcí vlastního ovladače a slouží k jeho inicializaci,
Main je hlavním vláknem ovladače a Shutdown toto vlákno ukončuje.
V následujícím textu bude nejdříve popsáno začlenění ovladače do serverové aplikace
Playeru a poté implementace vlastního ovladače pro robot Morbot.
14/60
3.3 Implementace ovladače
3.3.1
Podpůrný software pro výuku mobilní robotiky
Začlenění nového ovladače do Playeru
Pro začlenění ovladače do Playeru je nezbytná implementace funkcí pro registraci a
inicializaci ovladače. V následujícím textu budou názvy těchto funkcí uváděny tak, jak
jsou implementovány v ovladači pro robot Morbot:
• Morbot Register a
• Morbot Init,
kde první část názvů funkcí je jméno ovladače.
Funkce Morbot Register uvedená ve výpisu 10 je registrační funkcí ovladače. Prototyp této funkce void Morbot Register(DriverTable* table); není v hlavičkovém souboru
ovladače, ale v souboru player/server/libplayerdrivers/driverregistry.cc, který
obsahuje registrace všech ovladačů.
/* registrační funkce ovladače morbot */
void Morbot_Register(DriverTable* table) {
table->AddDriver("morbot", Morbot_Init);
}
Výpis 10: Funkce Morbot Register(DriverTable* table).
Registrační funkce spouští inicializaci ovladače, výpis 11. Vzniká nová instance třídy a
je načítán konfigurační soubor specifikovaný při spuštění Playeru.
/* inicializace ovladače, načtení konfiguračního souboru */
Driver* Morbot_Init( ConfigFile* cf, int section) {
return((Driver*)(new Morbot(cf, section)));
}
Výpis 11: Funkce Morbot Init(ConfigFile* cf, int section).
Konfigurační soubor se dále zpracovává v konstruktoru třídy ovladače, ve kterém je
ověřována přítomnost definic rozhraní. Vytvořena jsou pouze rozhraní specifikovaná v konfiguračním souboru. Jako příklad je uvedena část konstruktoru ovladače ve výpisu 12.
V konstruktoru jsou také načítány hodnoty speciálních proměnných ovladače, v našem případě se jedná o hodnotu proměnné port. Pokud není hodnota proměnné v konfiguračním
souboru uvedena, je použita hodnota konstanty AVR DEFAULT PORT, příklad je uveden
ve výpisu 13.
/* Test na přítomnost požadavku v konfiguračním souboru */
/* na vytvoření rozhraní pro vyčítání odometrie. */
if (cf->ReadDeviceAddr(&(this->position_id),
section,
15/60
3.3 Implementace ovladače
Podpůrný software pro výuku mobilní robotiky
"provides",
PLAYER_POSITION2D_CODE,
-1,
NULL) == 0) {
if(this->AddInterface(this->position_id) != 0) {
this->SetError(-1);
return;
}
}
Výpis 12: Test konfiguračního souboru na přítomnost rozhraní position2d.
/* načtení hodnoty proměnné port z konfiguračnního souboru */
serial_port = cf->ReadString(section, "port", AVR_DEFAULT_PORT);
Výpis 13: Načtení proměnné port z konfiguračního souboru.
Pro sestavení serverové aplikace Player s nově implementovaným ovladačem je nutné
zahrnout všechny zdrojové soubory ovladače do adresářové struktury Playeru. V případě
ovladače pro robot Morbot se jedná o adresář player/server/drivers/mixed/morbot.
Dále je nutné upravit všechny soubory Makefile.am a Makefile.in, které obsahují data
potřebná pro sestavení Playeru.
3.3.2
Implementace ovladače pro robot Morbot
Ovladač pro Morbot implementuje standardní rozhraní Playeru pro přístup k hardware.
Hlavním úkolem ovladače je komunikace s řídicí deskou a úprava vyčtených dat tak, aby
je bylo možné předat klientské aplikaci. Samotný server je spuštěn na palubním počítači
Morbotu, klientská aplikace pak studenty na jejich pracovní stanici. Komunikace mezi
serverem a klientem probíhá po síti, použitý protokol je TCP/IP.
Ovladač Morbot se skládá ze tří tříd:
1. SerialPort poskytuje rozhraní pro komunikaci palubního počítače s řídicí deskou po
sériové lince. Obsahuje funkce pro nastavení portu, čtení a zápis.
2. AVR obsahuje jednoduchý protokol pro komunikaci na základě modelu žádost/odpověď.
3. Morbot je vlastní implementací ovladače. Kromě pěti povinných funkcí obsahuje také
funkci ProcessMessages zajišťující zpracování zpráv, které jsou přijímány od klientské
aplikace.
Hierarchie tříd je ukázána na obrázku 7.
16/60
3.3 Implementace ovladače
Podpůrný software pro výuku mobilní robotiky
Obrázek 7: Hierarchie tříd v ovladači pro robot Morbot.
Výpis 14 obsahuje zdrojový kód funkce Setup. Funkce je využita pro otevření sériového
portu a komunikaci s řídicí deskou. Vlákno ovladače, funkce Main, je spuštěno voláním
funkce StartThread.
int Morbot::Setup() {
/* avr - instance třídy avr.cc */
/* Otevření a nastavení sériového portu. */
avr.openSerial(serial_port);
/* Vypnutí motorů z důvodu bezpečnosti. */
avr.setMotorsOff();
motors_enabled = false;
/* Vytvoření vlákna a spuštění funlce Main. */
StartThread();
return 0;
}
Výpis 14: Funkce Setup.
Funkce Main, která je obsažena ve výpis 15, obsahuje nekonečnou smyčku, ve které jsou
aktivně vyčítána data z řídicí desky. Tato data jsou ukládána do nadefinovaných vnitřních
struktur Playeru a následně předávána klientské aplikaci. Pro přehlednost je uvedeno pouze
vyčítání odometrických dat a dat ze sonarů.
Z důvodu nedokonalé simulace infračervených dálkoměrných senzorů v Playeru používané verze 2.0.3 jsou tyto senzory poskytovány prostřednictvím rozhraní pro sonary, neboť
věrnější simulace infračervených dálkoměrů je možné dosáhnout konfigurací modelu sonarů. Při simulaci jsou proto infračervené dálkoměry vyčítané rozhraním sonarů a tedy i
reálný robot poskytuje toto rozhraní pro snadnější přenos aplikace z prostředí simulátoru.
Ve zdrojovém kódu ovladače je připravena implementace příslušného rozhraní pro vyčítání
infračervených dálkoměrných senzorů, ale není používáno.
void Morbot::Main() {
/* Inicializace. */
player_position2d_data_t pos_data;
player_sonar_data_t sonar_data;
17/60
3.3 Implementace ovladače
Podpůrný software pro výuku mobilní robotiky
sonar_data.ranges_count = 2;
/* Spuštění motorů. */
avr.setMotorsOn();
motors_enabled = true;
for(;;) {
/* Test na běh vlákna. */
pthread_testcancel();
/* Zpracování zpráv. */
ProcessMessages();
/* Vyčtení odometrických dat */
/* a jejich odeslání klientské aplikaci. */
avr.getPosition(&pos_data.pos.px, &pos_data.pos.py,
&pos_data.pos.pa);
this->Publish(position_id,
NULL,
PLAYER_MSGTYPE_DATA,
PLAYER_POSITION2D_DATA_STATE,
(void*)&(pos_data),
sizeof(player_position2d_data_t),
NULL);
/* Vyčtení dat ze sonarů */
/* a jejich odeslání klientské aplikaci. */
avr.getIRs(&sonar_data.ranges[0],
&sonar_data.ranges[1],
&sonar_data.ranges[2],
&sonar_data.ranges[3]);
avr.getSonars(&sonar_data.ranges[4],
&sonar_data.ranges[5]);
this->Publish(sonar_id,
NULL,
PLAYER_MSGTYPE_DATA,
PLAYER_SONAR_DATA_RANGES,
(void*)&sonar_data,
sizeof(sonar_data),
NULL);
}
}
Výpis 15: Funkce Main.
Funkce ProcessMessages zajišťuje zpracování zpráv, které jsou přijímány od klientské
aplikace. Obsluha zpráv je založena na jednoduchém principu porovnání hlavičky přijaté
18/60
3.3 Implementace ovladače
Podpůrný software pro výuku mobilní robotiky
zprávy s hlavičkami obsluhovaných zpráv funkcí MatchMessage. Ve výpisu 16 je uvedena
obsluha žádosti o zaslání skutečné velikosti robotu.
if (Message::MatchMessage(hdr,
PLAYER_MSGTYPE_REQ,
PLAYER_POSITION2D_REQ_GET_GEOM,
position_id)) {
memset(&pos_geom, 0, sizeof(pos_geom));
/* Offset robotu
pos_geom.pose.px
pos_geom.pose.py
pos_geom.pose.pa
od středu otáčení. */
= 0;
= 0;
= 0;
/* Velikost robotu. */
pos_geom.size.sw = 0.24;
pos_geom.size.sl = 0.23;
Publish(position_id,
resp_queue,
PLAYER_MSGTYPE_RESP_ACK,
PLAYER_POSITION2D_REQ_GET_GEOM,
(void*)&pos_geom,
sizeof(pos_geom),
NULL);
return 0;
}
Výpis 16: Funkce MatchMessage.
Voláním funkce Shutdown, výpis 17, je zajištěno korektní ukončení vlákna ovladače.
int Morbot::Shutdown() {
/* Ukončení vlákna ovladače.
StopThread();
return 0;
}
*/
Výpis 17: Funkce Shutdown.
19/60
Podpůrný software pro výuku mobilní robotiky
4
Úlohy řešené v rámci předmětu Mobilní robotika
Cílem předmětu Mobilní robotika, X33MOR, je seznámit studenty s typickými úlohami
řešenými v mobilní robotice, se základní strukturou mobilních robotů a jejich senzorickým
vybavením. Cvičení probíhají v laboratoři nejen v robotickém simulátoru, ale také na
reálných robotech. V rámci cvičení jsou studenti rozděleni do malých skupin z důvodu
časové náročnosti řešení jednotlivých úloh a získání praktických zkušeností s prací v malém
týmu. Spolupráce jednotlivých členů týmů je podpořena systémem pro verzování souborů
Subversion (dále SVN). Každá skupina řeší pět na sebe navazujících úloh:
• řízení pohybu a lokalizace robotu podle odometrických dat,
• využití dálkoměrných senzorů pro detekci překážek,
• implementace algoritmu třídy Bug pro vyhýbání se překážkám,
• řízení pohybu podle dat z inteligentní kamery a
• tvorba topologické mapy.
Pro řešení jednotlivých úloh potřebují studenti několik základních dovedností, kterými
jsou
• práce s prostředím Player/Stage,
• práce s SVN a
• tvorba klientské aplikace.
První z těchto dovedností již byla popsána v kapitole Player/Stage. Způsob práce s SVN
a tvorba klientské aplikace v Playeru bude ukázána v následujících částech této kapitoly.
Studenti mají k dispozici šablonu úloh. Šablona je připravena ke stažení z repozitáře na
začátku semestru a můžeme ji považovat za osnovu práce na předmětu. Její součástí jsou:
• sestavitelný zdrojový kód klientské aplikace s prázdnými funkcemi, jejichž komentáře
jsou specifikací funkcionality funkce v každé úloze,
• soubory pro sestavení aplikace,
• konfigurační soubory Playeru,
• definice modelu světů pro jednotlivé úlohy,
• definice modelu robotu a
20/60
Podpůrný software pro výuku mobilní robotiky
• bitmapové obrázky reprezentující podobu světů pro každou z úloh.
Adresářová struktura šablony je poměrně rozsáhlá, proto se v jejím kořenovém adresáři
nacházejí dva podadresáře:
• Adresář gB, kde B je název skupiny studentů. Tento adresář obsahuje zdrojové kódy
úloh, příslušné soubory Makefile pro sestavení aplikace a po provedení prvního sestavení také spustitelný soubor. Adresářová struktura je zobrazena na obrázku 8.
• Adresář worlds obsahující konfigurační soubory a podadresář maps, ve kterém jsou
uloženy bitmapové obrázky prostředí.
Obrázek 8: Část adresářové struktury šablony.
V následujícím oddíle je ukázán princip SVN a základy práce s ním. Poté je popsáno
vytvoření klientské aplikace a vyčítání dat z robotu, a to jak z modelu robotu v simulátoru,
tak z Morbotu. V následujících oddílech jsou popsány příklady řešení úloh, které jsou
organizovány následujícím způsobem:
21/60
4.1 Verzovací systém SVN
Podpůrný software pro výuku mobilní robotiky
1. motivace pro vypracování úlohy,
2. zadání předkládané studentům,
3. rozbor zadání a tematické pozadí úlohy,
4. popis implementace a
5. přenos aplikace ze simulátoru na Morbot, který je podrobněji popsán v prvních úlohách, v ostatních se již příliš neliší.
4.1
Verzovací systém SVN
SVN [7] je nástroj, který se využívá pro správu verzí projektu (jeho zdrojových kódů)
na kterém pracuje více uživatelů najednou. S výhodou jej také může využít jediný uživatel
pracující na více počítačích, například doma a ve škole. Verze souborů jsou udržovány
v centrálním repozitáři. Uživatelé přistupují k verzím souborů po síti. Každý uživatel si
na svém počítači udržuje pracovní kopii, kterou modifikuje a synchronizuje s repozitářem.
Tento princip je zobrazena na obrázku 9.
Obrázek 9: Princip SVN.
Pro práci s SVN existuje několik základních příkazů:
• svn checkout slouží pro stažení celého repozitáře. Je prvním krokem pro začátek
používání již vytvořeného repozitáře.
• Příkaz svn update je určen pro aktualizaci verzí pracovní kopie z repozitáře.
• Příkazem svn commit jsou nahrány změny provedené na pracovní kopii do repozitáře.
Každý commmit je vhodné komentovat a doplnit tak provedené změny jejich popisem.
• svn add fileName přidá nový soubor nebo adresář do repozitáře. Přidání proběhne
až po provedení příkazu svn commit.
22/60
4.2 Implementace klientské aplikace Podpůrný software pro výuku mobilní robotiky
• svn log slouží pro zobrazení změn v repozitáři. Zobrazovány jsou uživatelská jména
těch, kteří provedli změny v souborech, a také zprávy zadané při nahrání změn do
repozitáře příkazem commit.
Uvedené příkazy lze použít přímo z příkazového interpretu. Také je možné používat některou z grafických nadstaveb, ve kterých bývají jednotlivé úkony pojmenovány stejně.
Pokud více uživatelů změní stejnou část souborů, musí být vyřešen konflikt. Správce
verzí nenabízí řešení těchto konfliktů, ale poskytuje nástroje pro jejich řešení. Odstranění
konfliktu je třeba explicitně označit příkazem svn resolved.
Nespornou výhodou používání SVN je uživatelské pohodlí. Uživatel nemusí vytvářet
několik verzí jednoho souboru nebo projektu, ale může mít na svém počítači pouze jedinou
verzi pracovní kopie a ostatní verze v repozitáři.
4.2
Implementace klientské aplikace
Neodmyslitelnou součástí klientské aplikace je zajištění komunikace se serverem. Pro
tyto účely existují v Playeru dvě třídy, PlayerClient a ClientProxy.
Třída PlayerClient [8] obsahuje funkce nejen pro řízení komunikace mezi serverem a
klientem, její součástí jsou také funkce určené k získání a modifikaci parametrů připojení
k serveru a jeho přerušení. Při tvorbě instance třídy PlayerClient předáváme konstruktoru
dva parametry:
1. const char *host - řetězec s adresou pro připojení k serveru po síti, nebo řetězec
”localhost” pro připojení k serveru spuštěném na stejném počítači jako klientská
aplikace. Pokud tento parametr ponecháme prázdný, připojení neproběhne. V takovém případě je možné se připojit k serveru později voláním funkce Connect.
2. const int port - číslo portu, se kterým je spuštěn server, standardně je nastavena
hodnota 6665.
V tabulce 2 jsou popsány základní funkce třídy PlayerClient.
Pro následující implementaci úloh je nejdůležitější funkcí Read, která přijímá zprávy ze
serveru a přijatá data ukládá do nadefinovaných datových struktur Playeru. Data přijatá od
různých zařízení jsou ukládána do odlišných struktur, ke kterým klient přistupuje instancí
příslušné třídy odvozené od třídy ClientProxy. Jména odvozených tříd korespondují se
jmény rozhraní Playeru. Přehled základních tříd je uveden v tabulce 3. Dokumentace třídy
je dostupná na webových stránkách [9].
Přístup k odometrickým datům získáme vytvořením instance třídy Position2DProxy
s parametry:
1. PlayerClient *pc - ukazatel na instanci třídy PlayerClient,
23/60
4.2 Implementace klientské aplikace Podpůrný software pro výuku mobilní robotiky
2. unsigned short index - index určující zařízení, se kterým se má pracovat. Většinou se
jedná o nulu, ta označuje první zařízení příslušného typu.
Základní funkce třídy Position2DProxy jsou popsány v tabulce 4.
Název funkce
Read
Peek
SetFrequency
SetDataMode
Funkcionalita
Příjem zpráv ze serveru. Funkce blokuje další činnost
klientské aplikace, dokud není přečtena alespoň jedna
zpráva.
Zjištění přítomnosti zprávy na serveru. Návratovou hodnotou je 0, pokud nejsou k dispozici žádná data, 1 při
přítomnosti dat, nebo -1, pokud byla zjištěna chyba.
Nastavení frekvence pro příjem dat v módu PUSH.
Nastavení modelu komunikace mezi serverem a klientem.
Tabulka 2: Základní funkce třídy PlayerClient.
Název třídy
BumperProxy
IRProxy
LaserProxy
MotorProxy
Position2DProxy
Obsluhované zařízení
nárazníky
infračervené dálkoměrné senzory
laserový dálkoměr
stav motorů
odometrie
Tabulka 3: Přehled základních rozhraní proxy.
Název funkce
SetSpeed
Funkcionalita
Nastavení rychlosti robotu. Funkce může být použita pro řízení holonomních robotů s parametry double
xspeed, double yspeed a double yawspeed, stejně jako pro
řízení neholonomních robotů a parametry double speed,
double turnrate.
SetOdometry
Nastavení nové hodnoty odometrie uživatelem, parametry jsou hodnoty x, y a úhel natočení robotu.
ResetOdometry Reset odometrie, tzn. nastavení hodnot pozice x, y a
úhlu na nulu.
GetXPos
Načtení souřadnice x pozice robotu.
GetYPos
Načtení souřadnice y pozice robotu.
GetYaw
Načtení natočení robotu.
Tabulka 4: Základní funkce třídy Position2DProxy.
24/60
4.2 Implementace klientské aplikace Podpůrný software pro výuku mobilní robotiky
Název funkce
GetCount
GetBlob
Funkcionalita
Získání počtu detekovaných jednobarevných oblastí.
Uložení informací o jedné oblasti do proměnné typu playerc blobfinder blob t.
Tabulka 5: Základní funkce rozhraní BlobfinderProxy
SonarProxy je používána pro přístup k datovým strukturám sonarů. Vytvoření instance
třídy SonarProxy je shodné s vytvořením instance třídy Position2DProxy. Používanou
funkcí na cvičeních je funkce GetScan(index), která vyčítá poslední naměřená data sonary.
Dalším používaným rozhraním je rozhraní BlobfinderProxy, které je využíváno při vyhledávání spojitých jednobarevných oblastí v obraze pořízeném kamerou. Základní funkce,
které budou využívány v řešených úlohách, jsou vypsány v tabulce 5.
Pro zjednodušení přístupu k datovým strukturám Playeru je v šabloně pro cvičení provedeno zapouzdření používaných rozhraní. Zapouzdření je vytvořeno pro usnadnění práce
na prvních z hlediska množství nových informací poměrně náročných cvičeních. Studenti
se nemusejí hned na začátku práce probírat dokumentací k jednotlivým třídám odvozených
od ClientProxy, ale mohou si projít pouze hlavičkové soubory zapouzdřujících tříd a začít
s implementací úloh. Pro řešení náročnějších úloh již bude dokumentace zapotřebí, avšak
v té době budou mít studenti osvojeny základní principy Playeru a budou mít s prací
v tomto prostředí jisté zkušenosti. Z těchto důvodů bude orientace v dokumentaci a její
použití značně jednodušší.
Příkladem použití rozhraní pro vyčítání dat je výpis 18, ve kterém je uveden způsob
vytvoření instancí tříd zapouzdřujících výše uvedená rozhraní. Použití těchto instancí pro
získání dat z datových struktur Playeru je uveden ve výpisu 19.
CMorbot::CMorbot(int port) {
robot = new PlayerClient("localhost", port);
drive = new CDrive(robot);
ranger = new CRangeFinder(robot, 0);
}
Výpis 18: Konstruktor třídy CMorbot.
/* Načtení odometrických dat. */
double positionX = drive->getX();
double positionY = drive->getY();
double yaw = drive->getYaw();
/* Načtení naměřených dat prvního sonaru. */
double range = ranger->getData(0);
Výpis 19: Použití instancí tříd Proxy pro načtení dat.
25/60
4.3 Řízení pohybu robotu
4.3
4.3.1
Podpůrný software pro výuku mobilní robotiky
Úloha I - Řízení pohybu robotu
Motivace
Studenti se seznámí s principem řízení robotu a jeho lokalizací na základě odometrických
dat. Řešením úlohy je jednoduchý regulátor rychlostí robotu, po úspěšné implementaci bude
robot schopen prvních autonomních pohybů v prostředí bez překážek.
4.3.2
Zadání
Implementujte regulátor dopředné a úhlové rychlosti robotu pro jeho přemístění na
předem určenou polohu. Souřadnice požadované polohy robotu budou zadávány relativně
vzhledem k jeho počáteční poloze.
4.3.3
Rozbor zadání
Aktuální poloha robotu i požadovaná konečná poloha robotu je udávána v kartézském
souřadném systému (x,y). Regulátor dopředné a úhlové rychlosti je popsán rovnicemi (1).
Souřadný systém robotu, stejně jako význam použitých symbolů v rovnicích (1), je zřejmý
z obrázku 10. Uvedený regulátor je proporcionální a je založen na záporné zpětné vazbě.
Konstanta REG FORWARD RATE respektive REG TURN RATE je konstantou regulátoru pro dopřednou respektive úhlovou rychlost.
0
Px
0
Py
v
ω
4.3.4
=
=
=
=
(Px − Rx ) · cos(ϕ) + (Py − Ry ) · sin(ϕ)
−(Px − Rx ) · sin(ϕ) + (Py − Ry ) · cos(ϕ)
0
REG FORWARD RATE · Px
0
REG TURN RATE · Py
(1)
Implementace regulátoru
V kódu šablony je potřeba upravit tři funkce:
• moveTo(double positionX, double PositionY),
• printStatus() a
• funkci main(int argc, char* argv[]).
První dvě funkce jsou součástí třídy CMorbot, která je v adresářové struktuře šablony
umístěná v adresáři src/device. Funkce main je implementována v souboru src/main/
morbot.cpp.
26/60
4.3 Řízení pohybu robotu
Podpůrný software pro výuku mobilní robotiky
Obrázek 10: Souřadný systém robotu.
Funkce moveTo je v této úloze klíčovou. Jejími parametry jsou relativní cílové souřadnice vzhledem k počáteční poloze robotu. Jako počáteční poloha robotu je v simulátoru
považována poloha robotu při spuštění klientské aplikace. U reálného robotu je počáteční
polohou aktuální informace o poloze načtená z řídicí desky při spuštění aplikace. Poloha
může být resetována buď voláním funkce resetOdometry() nebo hardwarově, případně nastavena funkcí setOdometry(positionX, positionY).
Funkce moveTo obsahuje cyklus, který vyčítá data z robotu a počítá akční veličinu regulátoru. Podmínkou ukončení smyčky je rovnost požadované a aktuální polohy robotu.
Jakmile se tyto parametry rovnají, vrací funkce hodnotu true. Příklad je uveden ve výpisu 20.
/* Tolerance
const double
/* Konstanty
const double
const double
dosažení cíle v metrech. */
TARGET_REACH_TOLERATION = 0.03;
regulátoru. */
REG_FORWARD_RATE = 0.5;
REG_TURN_RATE = 1.5;
/*
* Proporcionální regulátor rychlosti pro
* pohyb robotu na zadané souřadnice positionX, positionY.
*/
bool CMorbot::moveTo(double positionX,double positionY) {
robot->Read();
positionX += drive->getX();
27/60
4.3 Řízení pohybu robotu
Podpůrný software pro výuku mobilní robotiky
positionY += drive->getY();
bool stop = false;
while (stop==false) {
robot->Read();
/* Vzdálenost aktuální polohy robotu a cíle. */
float dx = positionX - drive->getX();
float dy = positionY - drive->getY();
/* Natočení robotu.*/
float yaw = drive->getYaw();
/* Výpočet regulátoru. */
float px = dx*cos(yaw) + dy*sin(yaw);
float py = -dx*sin(yaw) + dy*cos(yaw);
/* Nastavení rychlostí robotu. */
drive->setSpeeds(REG_FORWARD_RATE*px,REG_TURN_RATE*py);
printStatus();
/* Pokud je Euklidovská vzdálenost do cíle menší než tolerance, */
/* robot dosáhl cíle. */
if ((dx*dx + dy*dy)
< TARGET_REACH_TOLERATION*TARGET_REACH_TOLERATION){
stop = true;
}
}
drive->setSpeeds(0.0, 0.0);
return stop;
}
Výpis 20: Funkce moveTo.
Požadovaná i aktuální poloha robotu je ukládána v plovoucí desetinné čárce, dle standardu IEEE 754. Při porovnávání operátorem == jsou uvažována všechna desetinná místa,
proto je potřeba rozmyslet toleranci dosažení požadované polohy. V uvedeném příkladu
funkce moveTo, výpis 20, se jedná o tři centimetry.
Další modifikovanou funkcí v první úloze je funkce printStatus, příklad je uveden ve
výpisu 21. Tato funkce je používána pro výpis aktuálního stavu robotu a ladění programu.
V první úloze se jedná o výpis aktuální polohy robotu, souřadnic x, y a úhlu natočení.
/*
* Výpis aktuální pozice (x,y) robotu.
*/
void CMorbot::printStatus() {
std::cout << "x: " << drive->getX() << ’\n’;
28/60
4.3 Řízení pohybu robotu
Podpůrný software pro výuku mobilní robotiky
std::cout << "y: " << drive->getY() << ’\n’;
std::cout << "uhel: " << drive->getYaw() << ’\n’;
}
Výpis 21: Funkce printStatus.
Ve funkci main je realizováno volání funkce moveTo, které jsou předány relativní cílové
souřadnice robotu.
Možný průběh první úlohy v simulátoru je ukázán na obrázku 11.
Obrázek 11: Průběh první úlohy v simulátoru.
4.3.5
Spuštění aplikace
Pro spuštění Playeru si vybereme konfigurační soubor task1.cfg z připravené šablony,
soubor je uveden ve výpisu 9. Konfigurační soubor vytváří grafické prostředí simulátoru a
rozhraní position2d pro práci s odometrickými daty. Klientskou aplikaci sestavíme příkazem
gmake v adresáři src. Z adresáře bin spustíme klientskou aplikaci příkazem ./morbot.
Pro spuštění Playeru na Morbotu použijeme odlišný konfigurační soubor, je potřeba
použít ovladač, který byl pro robot implementován. Takový konfigurační soubor je uveden
ve výpisu 22. Serverovou část Playeru spustíme na palubním počítači Morbotu a klientskou
aplikaci na studentské pracovní stanici.
29/60
4.3 Řízení pohybu robotu
Podpůrný software pro výuku mobilní robotiky
driver
(
name "morbot"
provides ["position2d:0"]
port "/dev/ttyS2"
)
Výpis 22: Konfigurační soubor morbot.cfg - vytvoření rozhraní position2d.
Také je nutné zaměnit hodnotu ”localhost”, která je parametrem pro vytvoření instance třídy playerClient, za adresu robotu ve formě textového řetězce. Z implementačního
hlediska je vhodné zadávat hodnoty port a host jako parametry při spouštění klientské
aplikace. Pokud se rozhodneme pro spuštění klientské aplikace příkazem ./morbot 6665
10.10.20.51, kde prvním argumentem je port a druhým host, je možné řešení ukázáno ve
výpisu 23.
using namespace PlayerCc;
int main(int argc,char* argv[]) {
/* Načtení parametrů programu. */
int port = (argc > 1)? atoi(argv[1]) : 6665;
const char *host;
host = (argc > 2)? argv[2] : "localhost";
/* Vytvoření instance třídy CMorbot a současně */
/* připojení klienta k serveru. */
CMorbot morbot(host, port);
morbot.moveTo(1.0,3.0);
return 0;
}
Výpis 23: Ukázka funkce main.
Reálný robot má jiné dynamické vlastnosti než model robotu v simulátoru. Experimentálně bylo ověřeno, že při přenosu aplikace na Morbot je vhodné zvýšit poměr mezi
konstantou pro nastavení úhlové rychlosti a konstantou pro nastavení dopředné rychlosti.
Konkrétní hodnotou konstanty pro nastavení úhlové rychlosti REG TURN RATE je 1,5,
konstanta pro nastavení dopředné rychlosti REG FORWARD RATE má hodnotu 0,5.
30/60
4.4 Detekce překážek
4.4
4.4.1
Podpůrný software pro výuku mobilní robotiky
Úloha II - Detekce překážek dálkoměrnými senzory
Motivace
Studenti se seznámí s použitím dálkoměrných senzorů, s jejich principy a vlastnostmi.
Pro řešení úlohy bude použit již implementovaný regulátor pohybu robotu dle odometrických dat a přidána nová funkcionalita, bezdotyková detekce překážek.
4.4.2
Zadání
Modifikujte regulátor z první úlohy tak, aby byl robot schopen detekovat překážku, která
mu byla umístěna do cesty. Umístění, počet a velikost překážek je libovolný, definován je
pouze minimální rozměr překážky - 5x5x5cm. K dispozici máte dva druhy dálkoměrných
senzorů:
• infračervené dálkoměrné senzory (dále IR senzory) a
• ultrazvukové dálkoměrné senzory (dále sonary).
4.4.3
Vlastnosti dálkoměrných senzorů
Infračervené dálkoměrné senzory jsou založeny na principu triangulace. Jejich součástí
je LED (Light Emitting Diode), která emituje úzký světelný paprsek v infračerveném spektru. Paprsek se odráží od reflexních povrchů a následně je senzorem detekován. Odražené
paprsky dopadají na řádkový senzor CCD (Charge-Coupled Device). Úměrně úhlu dopadajícího paprsku je generována hodnota napětí. Úhel je úměrný vzdálenosti mezi senzorem
a detekovanou překážkou. Tento princip je zobrazen na obrázku 12.
Obrázek 12: Princip IR dálkoměrného senzoru.
Použité IR senzory Sharp GP2D120XJ00F mají nelineární převodní charakteristiku uvedenou na obrázku 13. Pracovní oblastí senzorů je přibližně vzdálenost mezi třemi a čtyřiceti
31/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
Obrázek 13: Převodní charakteristika IR senzorů, převzato z [10].
centimetry od překážky. S tím souvisí umístění senzorů na robotu. Pokud je senzor umístěn po obvodu robotu, je nutné počítat s tím, že vzdálenosti menší než tři centimetry není
možné změřit správně. Technická specifikace senzorů je dostupná na [10].
Sonary fungují na principu měření času mezi momentem vyslání akustického impulsu a
momentem detekce zvuku odraženého od překážky. Známá rychlost zvuku ve vzduchu a
změřený čas letu zvuku umožní vypočítat vzdálenost k překážce. Vzdálenost je zjišťována
přímo senzorem a data jsou z něj vyčítána jako vzdálenost k překážce v jednotkách centimetrů nebo palců. Alternativně je možné vyčítání doby letu v jednotkách mikrosekund.
Tento způsob má tu výhodu, že vlastní vzdálenost je vypočtena uživatelem senzoru, který
může upravit hodnotu rychlosti zvuku ve vzduchu podle teploty okolního vzduchu a tím
získat přesnější měření.
Obrázek 14: Původ falešných ech sonaru.
Jednou z vlastností sonarů je šířka vyzařovacího laloku a vznik falešných ech (vysvětlení
pojmu na obrázku 14), které vedou k obtížné interpretaci dat. Sonary typu SRF10, které
patří k senzorickému vybavení Morbotu, mají vyzařovací charakteristiku širokou přibližně
72◦ . Vyzařovací lalok tak sice pokryje větší prostor, ale zároveň je potřeba počítat s větším
32/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
množstvím falešných ech. Vyzařovací charakteristika je ukázána na obrázku 15. Technická
specifikace používaných sonarů je ke zhlédnutí na webových stránkách [11].
Obrázek 15: Vyzařovací charakteristika sonaru SRF10, převzato z [11].
4.4.4
Vytvoření modelu senzorů v simulátoru Stage
Z důvodu nedostatečné podpory simulace IR senzorů ve verzi používaného Stage (2.0.3)
jsou oba dva druhy senzorů vyčítány a simulovány jako sonary. Rozdíl mezi senzory je
specifikován při tvorbě modelu robotu, v našem případě v souboru morbot.inc - příklad
uveden ve výpisu 5. Definice IR senzorů (výpis 24) se od definice sonarů (výpis 25) liší
hlavně pracovní oblastí a vyzařovacím úhlem senzorů.
define morbot_sharp ranger
(
# počet definovaných senzorů
scount 4
# pozice
spose[0]
spose[1]
spose[2]
spose[3]
jednotlivých senzorů na robotu [xpos ypos heading]
[ 0.00 0.08 45 ]
[ 0.12 0.1 00 ]
[ 0.12 -0.1 00 ]
[0.00 -0.08 -45 ]
# minimální a maxmální možná měřená vzdálenost,
# zorný úhel senzorů [range_min range_max view_angle]
sview [0.03 0.4 1]
# velikost senzorů [xsize ysize] v metrech
ssize [0.01 0.03]
)
Výpis 24: Definice modelu IR senzorů.
33/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
define morbot_sonar ranger
(
# počet sonarů
scount 2
# pozice sonarů na robotu [xpos ypos heading]
spose[0] [ 0.1 0.08 00 ]
spose[1] [0.1 -0.08 00 ]
# definice vlastností senzorů
sview [0.05 6 72]
ssize [0.01 0.03]
)
Výpis 25: Definice modelu sonarů.
Pro vytvoření dvou rozhraní modelů senzorů v Playeru je potřeba pozměnit konfigurační
soubor Playeru tak, jak je ukázáno ve výpisu 26.
driver
(
name "stage"
provides ["simulation:0" ]
plugin "libstageplugin"
worldfile "task2.world"
)
driver
(
name "stage"
# vytvoření rozhraní pro práci s odometrií a dvěma modely
# dálkoměrných senzorů
provides ["position2d:0" "sonar:0" "sonar:1"]
model "robot1"
)
Výpis 26: Konfigurační soubor pro vytvoření dvou rozhraní sonarProxy.
Jako kontrola správného vytvoření dvou rozhraní může sloužit výpis Playeru na standardní výstup po spuštění, který je uveden ve výpisu 27. Tři po sobě jdoucí červeně označené řetězce znamenají:
1. vytvoření modelu robotu s názvem robot1 v simulátoru Stage,
34/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
2. vytvoření rozhraní sonarProxy pod názvem ranger s indexy 0 a 1. Podle těchto indexů
jsou jednotlivé modely senzorů rozlišovány v klientské aplikaci.
zirafka@elemnia:~/Pracovni/morbot_ulohy/task2/worlds$ player task2.cfg
* Part of the Player/Stage/Gazebo Project [http://playerstage.sourceforge.
net].
* Copyright (C) 2000 - 2006 Brian Gerkey, Richard Vaughan, Andrew Howard,
* Nate Koenig, and contributors. Released under the GNU General Public
License.
* Player comes with ABSOLUTELY NO WARRANTY. This is free software, and
you
* are welcome to redistribute it under certain conditions; see COPYING
* for details.
trying to load /home/zirafka/Pracovni/morbot_ulohy/task2/worlds/./
libstageplugin...
trying to load /usr/local/lib/libstageplugin...
success
invoking player_driver_init()...
Stage driver plugin init
** Stage plugin v2.0.3 **
* Part of the Player/Stage Project [http://playerstage.sourceforge.net]
* Copyright 2000-2006 Richard Vaughan, Andrew Howard, Brian Gerkey
* and contributors. Released under the GNU General Public License v2.
success
Stage driver creating 1 device
6665.31.0 is a Stage world [Loading ./task2.world][Include morbot.inc][
Include map.inc]
Stage driver creating 3 devices
6665.4.0 is "robot1"
6665.5.0 is "robot1.ranger:0"
6665.5.1 is "robot1.ranger:1"
Listening on ports: 6665
Stage: Request close window.
Stage: Confirmed
Quitting.
Výpis 27: Výpis Playeru - kontrola vytvoření dvou rozhraní pro dálkoměrné senzory.
Pro vyčítání dat z obou definovaných modelů je nutné v konstruktoru třídy CMorbot implementovat vytvoření dvou různých instancí třídy CRangeFinder, která obsahuje rozhraní
35/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
SonarProxy. Část tohoto konstruktoru je uvedena ve výpisu 28.
ranger = new CRangeFinder(robot,0);
sonar = new CRangeFinder(robot,1);
Výpis 28: Vytvoření instancí třídy CRangeFinder pro vyčítání dat ze dvou modelů
dálkoměrných senzorů.
4.4.5
Implementace úlohy v simulátoru
V rámci druhé úlohy, detekce překážek z dálkoměrných senzorů, je potřeba upravit dvě
funkce:
• moveTo(double positionX, double positionY) a
• printStatus().
Obě funkce se nacházejí v souboru CMorbot.cpp v adresáři src/devices v adresářové
struktuře šablony.
Pro změnu funkcionality funkce moveTo může být použit jeden z následujících přístupů:
1. Při detekci překážky, která brání robotu v další cestě, je robot zastaven, návratovou
hodnotou funkce je false a program končí neúspěchem.
2. Po detekci překážky je rychlost robotu nastavena na nulu až do momentu odstranění
překážky. Jakmile se naměřené hodnoty senzory blíží k jejich maximálnímu rozsahu,
překážka byla odstraněna a robot může pokračovat k cíly. Po dojezdu do cíle je
návratovou hodnotou funkce true.
Implementace druhé možnosti řešení je názorná při demonstraci funkčnosti senzorů, proto
se jí zde budeme zabývat. Průběh algoritmu dle druhého přístupu je zobrazen v prostředí
simulátoru Stage na obrázku 16.
36/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
(a) Zastavení robotu před překážkou.
(b) Dojezd robotu do cíle po odstranění překážky.
Obrázek 16: Možný průběh druhé úlohy.
37/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
Modifikací funkce moveTo oproti předchozí úloze je přidání detekce překážky. Jsou kontrolovány vzdálenosti naměřené dálkoměrnými senzory. Jakmile je alespoň jedna naměřená
vzdálenost k překážce menší než předem určený práh, je detekována překážka a robot
musí co nejrychleji zastavit. Jakmile se naměřené hodnoty přiblíží k maximálnímu rozsahu
senzorů, překážka byla odstraněna a robot může pokračovat v jízdě. Modifikovaná funkce
moveTo je ukázána ve výpisu 29.
/* Tolerance dosažení cíle v metrech. */
const double TARGET_REACH_TOLERATION = 0.3;
/* Konstanty regulátoru. */
const double REG_FORWARD_RATE = 0.5;
const double REG_TURN_RATE = 1.5;
/* Práh měřených hodnot dálkoměrných senzorů, */
/* při jeho překročení detekce překážky. */
const double THRESHOLD = 0.2;
/* Indexy senzorů předávané SonarProxy pro načítání jejich hodnot. */
/* Číselné hodnoty indexů jsou závislé na pořadí specifikace */
/* senzorů v modelu, respektive jejich zapojení na Morbotu.*/
/* Boční levý IR senzor. */
const int IR_LEFT = 0;
/* Přední levý. */
const int IR_FRONT_LEFT = 1;
/* Přední pravý. */
const int IR_FRONT_RIGHT = 2;
/* Boční pravý. */
const int IR_RIGHT = 3;
/* Sonar vpravo. */
const int SONAR_RIGHT = 0;
/* Sonar vlevo. */
const int SONAR_LEFT = 1;
/*
* Regulátor rychlosti robotu.
*/
bool CMorbot::moveTo(double positionX,double positionY)
{
robot->Read();
positionX += drive->getX();
positionY += drive->getY();
bool stop = false;
while (!stop) {
38/60
4.4 Detekce překážek
Podpůrný software pro výuku mobilní robotiky
robot->Read();
float r1 = ranger->getData(IR_LEFT);
float r2 = ranger->getData(IR_FRONT_LEFT);
float r3 = ranger->getData(IR_FRONT_RIGHT);
float r4 = ranger->getData(IR_RIGHT);
float s1 = sonar->getData(SONAR_LEFT);
float s2 = sonar->getData(SONAR_RIGHT);
/* Je detekována překážka? */
if(r1 < THRESHOLD ||
r2 < THRESHOLD ||
r3 < THRESHOLD ||
r4 < THRESHOLD ||
s1 < THRESHOLD ||
s2 < THRESHOLD) {
drive->setSpeeds(0.0, 0.0);
std::cout << "Prekazka!!" << ’\n’;
/* Pokud není detekována překážka, pokračuj v cestě. */
} else {
float yaw = drive->getYaw();
float dx = positionX - drive->getX();
float dy = positionY - drive->getY();
float px = dx*cos(yaw) + dy*sin(yaw);
float py = -dx*sin(yaw) + dy*cos(yaw);
drive->setSpeeds(REG_FORWARD_RATE*px, REG_TURN_RATE*py);
printStatus();
/* Bylo dosaženo cíle?*/
if((dx*dx + dy*dy)
< TARGET_REACH_TOLERATION*TARGET_REACH_TOLERATION) {
stop = true;
}
}
}
return stop;
}
Výpis 29: Funkce moveTo v druhé úloze.
4.4.6
Přizpůsobení aplikace pro Morbot
Při přenosu klientské aplikace odladěné v simulátoru na Morbot je potřeba respektovat vlastnosti reálných senzorů. Zatímco modely IR senzorů v simulátoru měří vzdálenost
39/60
4.5 Algoritmy třídy BUG
Podpůrný software pro výuku mobilní robotiky
k překážce v metrech, hodnota měřená reálnými IR senzory je hodnotou napětí z AD převodníků a není dále upravována. Z důvodu této odlišnosti je nutné změřit a implementovat
převodní charakteristiku senzorů.
Řešením problému implementace může být vyhledávací tabulka nebo aproximační vztah
zjištěný z měření. Na obrázku 17 je zobrazena naměřená převodní charakteristika. Červený
průběh je spočítán podle aproximačního vztahu (2) sestaveného na základě měření, kde l
znamená vzdálenost k překážce v metrech a AD je vyčtená hodnota z AD převodníku.
l=
14
AD − 2.5
(2)
Obrázek 17: Naměřená převodní charakteristika IR senzorů (modrý průběh) a vypočtená
charakteristika aproximačním vztahem (červený průběh).
4.5
4.5.1
Úloha III - Algoritmy třídy Bug pro vyhýbání se překážkám
Motivace
Před vlastní implementací úlohy se studenti seznámí s algoritmy třídy Bug [12] pro
reaktivní řízení robotu, které mohou být použity jako inspirace při řešení třetí úlohy. Třetí
úloha kombinuje algoritmy implementované v předchozích dvou úlohách a přidává novou
funkcionalitu, objíždění překážek. Výsledkem implementace by měl být algoritmus, který
zajistí autonomní pohyb robotu v prostředí s překážkami.
40/60
4.5 Algoritmy třídy BUG
4.5.2
Podpůrný software pro výuku mobilní robotiky
Zadání
Implementujte algoritmus pro reaktivní řízení robotu třídy Bug, kterým docílíte dojezdu
robotu na předem určenou polohu v prostředí s libovolným množstvím překážek. Robot
by měl všechny překážky detekovat a pokusit se je objet, nedostačující je pouhé čekání na
odstranění překážky. Při řešení můžete opět využít oba druhy dálkoměrných senzorů.
4.5.3
Algoritmy třídy Bug
Algoritmy třídy BUG jsou určeny pro plánovaní cesty robotu. Cesta je posloupnost
bodů spojující počáteční a cílový bod v prostředí. Robot, který sleduje cestu, se bez kolizí
pohybuje prostředím k cíly. Podmínkou použití algoritmu je planární prostředí s libovolným
množstvím navzájem se nedotýkajících překážek, které mohou být libovolného tvaru a
velikosti. Jedná se o předem neznámé prostředí, jedinými informacemi o něm jsou:
• aktuální poloha robotu získaná lokalizací na základě odometrických dat,
• požadovaná cílová poloha a
• senzorická měření.
Tyto informaci se vztahují pouze k nejbližšímu okolí robotu, algoritmy třídy Bug tedy
spadají do skupiny algoritmů plánování pohybu s neúplnou informací o prostředí, neboli
algoritmů reaktivního plánování.
Algoritmy pro reaktivní plánovaní cesty můžeme rozdělit do dvou tříd:
Algoritmy třídy 1 jsou takové, ve kterých robot nejdříve objede celou detekovanou překážku a teprve poté se může vydat k cíly, respektive k další překážce.
Algoritmy třídy 2 nepožadují objetí celé detekované překážky, robot ji může opustit
dříve a pokračovat v cestě k cíly, respektive k další překážce.
Na první pohled se algoritmy třídy 1 mohou zdát nevýhodnými, protože generují delší
trajektorii. Tento přístup je však vhodný v případech složitějších prostředí, ve kterých by
algoritmy třídy dva mohli najít mnohem delší cestu nebo by ji nemuseli najít vůbec.
Mezi základní algoritmy patří Bug 1, respektive Bug 2, který patří mezi algoritmy
třídy 1, respektive třídy 2. V následujícím textu si ukážeme jak fungují, ale před tím je
důležité vysvětit si význam proměnných a registrů, které se v souvislosti s těmito algoritmy
používají:
• S - start, souřadnice počátečního bodu.
• T - target, souřadnice cílového bodu.
41/60
4.5 Algoritmy třídy BUG
Podpůrný software pro výuku mobilní robotiky
• H - hit point, neboli souřadnice bodu, ve kterém robot narazil na překážku.
• L - leave point, bod, ve kterém se robot při objezdu překážky od ní odpoutá.
• Q - bod, který náleží hranici překážky a zároveň je jeho vzdálenost k cíly nejmenší.
• R1 - registr, ve kterém jsou uloženy souřadnice nejbližšího bodu k cíly na hranici
překážky. Tento bod je zjišťován v průběhu objezdu překážky.
• R2 - délka hranice překážky počítaná od bodu H.
• R3 - délka hranice překážky počítaná od bodu Q.
Bug1
Algoritmus hledá cestu z počátečního do cílového bodu. Jedná se o algoritmus třídy 1,
tzn. že pokud robot na své cestě k cíly narazí na překážku, musí ji před pokračováním k cíly
celou objet. Trajektorie nalezená tímto algoritmem v jednoduchém prostředí je zobrazena
na obrázku 18.
Obrázek 18: Trajektorie nalezená algoritmem Bug1.
Průběh algoritmu definují tři pravidla:
1. Pohyb po spojnici bodů S a T,
- dokud není dosaženo bodu T, pak algoritmus končí.
- V případě detekce překážky:
- zapamatování souřadnic bodu H a
- aktivace druhého pravidla.
2. Sledování hranice překážky
- dokud není dosaženo bodu T, pak algoritmus končí.
- V případě dojezdu do bodu H:
- nalezení bodu L a
42/60
4.5 Algoritmy třídy BUG
Podpůrný software pro výuku mobilní robotiky
- aktivace pravidla tři.
3. Výběr směru objíždění překážky na základě informace uložené v registrech R2 a R3 ,
jízda kolem překážky vybraným směrem do bodu L. Algoritmus končí buď dosažením
cíle nebo detekcí nedosažitelného cíle.
Test na dosažení cílového bodu je založen na faktu, že algoritmus Bug1 najde na každé
detekované překážce pouze jeden bod H a jeden bod L. Bod L je bodem, který se nachází nejblíže k cíly (vzdálenost brána bez ohledu na překážky). Pokud je při opuštění
překážky z bodu L směrem k cíly detekována překážka v tomto bodě, znamená to, že cíl
je nedosažitelný. Příklad takového prostředí je na obrázku 19.
Obrázek 19: Bug1 - nedosažitelný cíl.
Bug2
Algoritmus Bug2 na rozdíl od Bug 1 neobjíždí celou detekovanou překážku, ale je mnohem více vázán na spojnici bodů S a T. Pokud robot detekuje překážku a začne ji objíždět,
snaží se v co nejdříve na tuto spojnici opět napojit. Platí, že robot může narazit pouze na
překážky, které protínají spojnici S-T a také všechny body L a H jí náleží. U algoritmu
Bug2 neplatí pravidlo, že robot narazí na překážku pouze jednou. Ke každé překážce může
existovat více bodů L a H.
Směr objíždění překážky není vybírán dle registrů R2 a R3 , ale je zvolen při implementaci algoritmu. Směr objíždění překážky může výrazně ovlivnit délku nalezené cesty. Dva
případy cest nalezené algoritmem Bug2 pro různé směry objíždění překážky jsou zobrazeny
na obrázku 20.
Následující pravidla definují průběh algoritmu:
1. Pohyb po úsečce spojující body S a T,
43/60
4.5 Algoritmy třídy BUG
Podpůrný software pro výuku mobilní robotiky
Obrázek 20: Trajektorie generované algoritmem Bug2.
- dokud není dosaženo bodu T, pak algoritmus končí.
- V případě detekce překážky:
- označení bodu H a
- aktivace druhého pravidla.
2. Objezd překážky zvoleným směrem,
- dokud není dosaženo bodu T, pak algoritmus končí.
- V případě dosažení spojnice S-T, pokud je vzdálenost k cíly z tohoto bodu kratší
než z bodu H a pokud v tomto bodě nestojí v cestě k cíly překážka,
- pak označení tohoto bodu jako L,
- jízda směrem k bodu T,
- a aktivace prvního pravidla.
Jinak pokračování v objezdu.
- V případě dosažení bodu H aktuální překážky a tím uzavření křivky okolo překážky je cíl nedosažitelný.
Bug12
Oba základní algoritmy, Bug1 a Bug2, mají své výhody i nevýhody. Zatímco robot
algoritmem Bug1 vždy objede celou překážku, algoritmus Bug2 je vázán na spojnici ST. Bug1 nikdy nezpůsobí lokální cykly algoritmu, ale na druhou stranu, nenalezne kratší
cestu než je obvod překážky. Algoritmus Bug2 může nalézt mnohem kratší cestu, hlavně
v jednoduchých prostředích, ale ve složitých případech také mnohem delší nebo žádnou.
44/60
4.5 Algoritmy třídy BUG
Podpůrný software pro výuku mobilní robotiky
Problémem druhého algoritmu jsou lokální cykly, ve kterých se robot více než dvakrát vrátí
do již navštívených bodů H a L.
Algoritmus Bug12 je kombinací základních algoritmů, snaží se využívat předností obou
najednou. Jeho průběh je nejprve shodný s Bug2. Pokud však nastane problémová situace,
tzn. že nalezený bod L je od cíle dále než příslušný bod H, nebo vznikne cyklus, pokračuje
algoritmus jako Bug1 a bod L bude definován jako bod náležící hranici překážky, který je
nejblíže k bodu T.
4.5.4
Implementace algoritmu třídy Bug v simulátoru
Implementace spočívá v kombinaci předchozích dvou úloh, tedy jízdy podle odometrických dat a detekce překážek, které doplníme o objíždění překážek. Před začátkem vlastní
implementace algoritmu je vhodné rozmyslet si rozmístění senzorů na robotu, které může
ovlivnit navrhovaný algoritmus. Senzory by měli překážku nejen detekovat, ale podle jejich
měření by robot měl být schopen udržovat konstantní vzdálenost od překážky na pravé
nebo levé straně robotu. Z tohoto důvodu je vhodné zvolit umístění takové, že kromě senzorů detekujících překážky před robotem budou dva senzory na jedné ze stran robotu.
V dalším textu budou uvažovány dva senzory vpředu a dva na levé straně robotu.
Algoritmus pro reaktivní řízení robotu může být založen na jednoduchých principech.
Vývojový diagram, který je zobrazen na obrázku 21, představuje následující pravidla:
1. Jízda robotu přímo k cíly po spojnici aktuální poloha-cíl.
- Pokud není detekována překážka, dopředná i úhlová rychlost je nastavena regulátorem, stejně jako v předchozích úlohách. Jakmile robot dosáhne cíle, program
je ukončen.
- Pokud je detekována překážka, pokračování pravidlem 2.
2. Natočení robotu levým bokem k překážce (senzory jsou na levé straně robotu) a
aktivace třetího pravidla.
3. Pokud již překážka není detekována, aktivace prvního pravidla. Jinak nastavení rychlosti podle porovnání měření z dálkoměrných senzorů pro sledování překážky.
V rámci této úlohy jsou obměněny opět funkce moveTo a printStatus. Změnou funkce
moveTo je volání funkce pro objezd překážky jakmile je překážka detekována dálkoměrnými
senzory. Do funkce printStatus přidáme výpis aktuální činnosti robotu, tzn. výpis odlišných
zpráv v případě jízdy k cíly a jízdy kolem překážky.
Kromě zmíněných funkcí je implementována nová funkce pro objezd překážky, funkce
moveAround. Jejími parametry budou souřadnice x a y bodu T. Funkci můžeme rozdělit
na dva samostatné cykly. V prvním cyklu, který je ukázán ve výpisu 30 proběhne natočení
robotu k překážce.
45/60
4.5 Algoritmy třídy BUG
Podpůrný software pro výuku mobilní robotiky
Obrázek 21: Vývojový diagram algoritmu reaktivního řízení.
const
const
const
const
const
const
double IR_MAX_RANGE = 0.39;
double THRESHOLD = 0.2;
int IR_SIDE_BACK = 0;
int IR_SIDE_FRONT = 1;
int IR_FRONT_LEFT = 2;
int IR_FRONT_RIGHT = 3;
/* Dopředná rychlost. */
double v = 0.0;
/* Naměřené hodnoty senzorů. */
float r1 = 0.0;
float r2 = 0.0;
float r3 = 0.0;
float r4 = 0.0;
do {
robot->Read();
r1 = ranger->getData(IR_SIDE_BACK);
r2 = ranger->getData(IR_SIDE_FRONT);
r3 = ranger->getData(IR_FRONT_LEFT);
r4 = ranger->getData(IR_FRONT_RIGHT);
printStatus();
/* Výběr nižší hodnoty předních IR senzorů. */
46/60
4.5 Algoritmy třídy BUG
Podpůrný software pro výuku mobilní robotiky
v = (r3 < r4) ? r3 : r4;
/* Pokud je detekovaná překážka příliš blízko, */
/* nastavena záporná rychlost - couvání. */
v = (v < THRESHOLD) ? (v - 0.5) : 0.0;
/* Nastavení dopředné rychlosti podle výsledku měření */
/* a konstantní úhlové rychlosti. */
drive->setSpeeds(v, -0.5);
/* Pokud není před robotem detekována překážka a hodnoty bočních */
/* senzorů se téměř rovnají, robot je natočen. */
} while ((r2 > IR_MAX_RANGE && r1 > IR_MAX_RANGE) &&
((r2-r1 > 0.1) || (r2-r1 < -0.1)));
Výpis 30: Natočení robotu bokem k překážce.
V druhém cyklu již probíhá samotná jízda kolem překážky. Funkcionalita je založena
na porovnávání naměřených hodnot předními i bočními senzory. Cyklus je ukázán ve výpisu 31.
const
const
const
const
const
const
double IR_MAX_RANGE = 0.39;
double TARGET_REACH_TOLERATION = 0.3;
int IR_SIDE_BACK = 0;
int IR_SIDE_FRONT = 1;
int IR_FRONT_LEFT = 2;
int IR_FRONT_RIGHT = 3;
while (avoid) {
robot->Read();
float dx = x - drive->getX();
float dy = y - drive->getY();
/* Test na dosažení cíle. */
if((dx*dx + dy*dy) <
TARGET_REACH_TOLERATION*TARGET_REACH_TOLERATION) {
avoid = false;
}
r1 = ranger->getData(IR_SIDE_BACK);
r2 = ranger->getData(IR_SIDE_FRONT);
r3 = ranger->getData(IR_FRONT_LEFT);
r4 = ranger->getData(IR_FRONT_RIGHT);
printStatus();
/* Žádná překážka nebyla detekována.*/
if (r1 > IR_MAX_RANGE &&
r2 > IR_MAX_RANGE &&
r3 > IR_MAX_RANGE &&
r4 > IR_MAX_RANGE) {
47/60
4.6 Metody vizuální navigace
Podpůrný software pro výuku mobilní robotiky
avoid = false;
}
/* Detekce překážky před robotem. */
if(r3 < IR_MAX_RANGE || r4 < IR_MAX_RANGE) {
if (r1 < r2) {
drive->setSpeeds(0.0, -0.3);
} else {
drive->setSpeeds(-0.1, -0.1);
}
} else {
if (r1 < r2) {
drive->setSpeeds(0.3, -0.3);
} else {
drive->setSpeeds(0.3, 0.0);
}
}
}
Výpis 31: Objezd překážky.
Průběh algoritmu v prostředí simulátoru Stage je zobrazen na obrázku 22.
V uvedeném algoritmu chybí mechanizmus pro testování dosažitelnosti cíle. Pokud se
bude cíl nacházet uvnitř překážky nebo pod ní, bude se robot snažit překážku objet dokola,
ale program se neukončí. Z tohoto důvodu je nutnou podmínkou pro správnou funkčnost
algoritmu dosažitelnost cíle.
4.6
4.6.1
Úloha IV - Metody vizuální navigace
Motivace
Studenti se poprvé na cvičení setkají s inteligentní kamerou CMUcam3, zvídaví se mohou podívat na webové stránky [13], kde naleznou technickou specifikaci kamery. Studenti
se blíže seznámí s metodou vizuální navigace, která využívá vyhledávání souvislých jednobarevných oblastí v obraze pořízeném touto inteligentní kamerou.
4.6.2
Zadání
Implementujte reaktivní algoritmus pro navigaci robotu k objektu zvolené barvy. K senzorickému vybavení robotu přidejte inteligentní kameru a použijte ji ke snímání okolí robotu. Pro vyhledávání souvislých oblastí určité barvy v obraze pořízeném kamerou využijte
modul Blobfinder, který je součástí Playeru. Prostředí robotu pro tuto úlohu je tvořeno
48/60
4.6 Metody vizuální navigace
Podpůrný software pro výuku mobilní robotiky
Obrázek 22: Průběh třetí úlohy v simulátoru.
krabicemi výrazné barvy (červená, modrá, zelená, fialová), které využijete pro účely vizuální navigace, a krabice nevýrazné barvy sloužící jako překážky. Všechny krabice budou
rozměrů větších než 40x40x40cm.
4.6.3
Rozhraní BlobfinderProxy v simulátoru Stage
Základem algoritmu vizuální navigace je vyhledávání souvislých jednobarevných oblastí
v obraze, který je pořízen kamerou, pro které může být použito rozhraní Blobfinder Modelování pohledu kamery v simulátoru Stage je zachyceno na obrázku 23.
Modul je využíván pro vyhledávání souvislých oblastí více barev, přičemž pro každou
hledanou barvu je potřeba definovat jeden kanál. V konfiguračním souboru robotu morbot.inc, který je součástí šablony, je definován pouze kanál pro červenou barvu. Rozšíření
barevného spektra je zajištěno drobnou úpravou tohoto souboru, totiž připsáním dalších
barev tak, jak je uvedeno ve výpisu 32. Druhým upravovaným konfiguračním souborem je
task4.cfg, ve kterém je nutné doplnit ”blobfinder:0” mezi poskytovaná rozhraní Playeru.
49/60
4.6 Metody vizuální navigace
Podpůrný software pro výuku mobilní robotiky
Obrázek 23: Simulace pohledu kamery v prostředí simulátoru Stage.
# Definice vlastností kamery.
define morbot_camera
ptz
(
pose [0.05 0 0]
blobfinder
(
# Počet barevných kanálů.
channel_count 4
# Detekované barvy.
channels ["red" "blue" "green" "violet"]
)
)
Výpis 32: Definice barevných kanálů algoritmu blobfinder.
Rozhraní BlobFinderProxy je využíváno pro kontrolovaný přístup k datovým strukturám
Playeru, do kterých jsou ukládány informace o detekovaných souvislých jednobarevných
oblastech. Položky datové struktury playerc blobifndet blob t jsou uvedeny v tabulce 6.
4.6.4
Implementace algoritmu pro vizuální navigaci na základě dat z inteligentní kamery
Implementace algoritmu spočívá v navržení jednoduchého regulátoru, který je založen
na vyčtených datech z kamery. Dopředná rychlost je úměrná vzdálenosti robotu od krabice
a úhlová rychlost je úměrná vychýlení krabice ze středu pořízeného obrázku.
50/60
4.6 Metody vizuální navigace
Podpůrný software pro výuku mobilní robotiky
Proměnná a její datový typ
Význam
unsigned int color
barva oblasti v barevném modelu RGB
unsigned int area
obsah oblasti v jednotkách pixelů
unsigned short x, y
souřadnice středu oblasti, udáváno v pixelech
unsigned short left, right, top, bottom souřadnice hranice oblasti uvedené v pixelech
double range
vzdálenost ke středu oblasti v jednotkách metrů
Tabulka 6: Položky datové struktury typu playerc blobfinder blob t.
Algoritmus vizuální navigace je možné shrnout do několika kroků:
1. Nalezení první barevné krabice a zapamatování si její barvy, nebo zadání hledané
barvy a nalezení příslušné krabice v prostředí.
2. Načtení dat o detekované krabici, konkrétně barvy, vzdálenosti k ní range a souřadnice x středu oblasti v obraze.
3. Pokud je vzdálenost ke krabici menší než předem určený práh, robot se zastaví a
algoritmus končí. V opačném případě je nastavena dopředná a úhlová rychlost dle
přepočtených dat, návrat do druhého kroku.
Vztahy pro výpočet akční veličiny dopředné rychlosti (3) a úhlové rychlosti robotu (4)
z parametrů detekované oblasti byly získány experimentálně.
v =
range
,
1000
(3)
ω=
40 − x
,
4
(4)
kde
v je dopředná rychlost robotu,
range je vzdálenost ke středu detekované oblasti v pixelech,
ω je úhlová rychlost robotu,
x je souřadnice detekovaného objektu (rozsah nula až osmdesát).
Vzdálenost ke krabici range získaná z obrázku je pouze odhadem skutečné. Pro kontrolu
vzdálenosti od překážky je vhodné použít také dálkoměrných senzorů.
51/60
4.6 Metody vizuální navigace
Podpůrný software pro výuku mobilní robotiky
Ukázka implementace
V rámci této úlohy budeme upravovat dvě třídy:
• CCamera a
• CMorbot.
Třída CCamera je zapouzdřující třídou rozhraní BlobfinderProxy. Je využívána pro
načítání dat o detekovaných objektech a úpravě těchto dat. Ve výpisu 33 jsou ukázány
dvě funkce této třídy, jedná se o getBlobPosition, která je využívána pro získání dat, a
ConvertBlobData obsahující převodní vztahy pro přepočet získaných dat.
/*
* Získání dat o detekovaném objektu známé barvy.
*/
TBlobData CCamera::getBlobPosition(unsigned int color) {
/* Datový typ, který reprezentuje datovou strukturu */
/* obsahující vzdálenost k objektu, směr k němu, barvu */
/* booleovskou hodnotu detekce.*/
TBlobData res;
res.detected = false;
/* Postupné načtení dat o všech detekovaných objektech. */
for(unsigned int i = 0; i < blobfinderProxy->GetCount(); i++) {
playerc_blobfinder_blob_t blobData = blobfinderProxy->GetBlob(i);
if (color == blobData.color){
return convertBlobData(blobData);
} else {
return res;
}
}
}
/*
* Funkce pro přepočet získaných dat a jejich uložení
* do struktury TBlobData.
*/
TBlobData CCamera::convertBlobData(playerc_blobfinder_blob_t blobData) {
TBlobData res;
res.detected = true;
/* Úprava dat, výpočet akční veličiny pro řízení */
/* dopředné rychlosti. */
res.distance = blobData.range/1000;
52/60
4.6 Metody vizuální navigace
Podpůrný software pro výuku mobilní robotiky
/* Vychýlení obzázku ze středu, na levo záporné hodnoty, */
/* napravo kladné. Akční veličina pro regulaci úhlové rychlosti. */
res.angle = (40 - blobData.x)/10;
res.color = blobData.color;
return res;
}
Výpis 33: Ukázka funkcí třídy CCamera.
Ve třídě CMorbot je nutné vytvořit instanci třídy CCamera a implementovat regulátor
pro řízení pohybu robotu. Pro samotnou jízdu k překážce budou využívána data z kamery,
ukázka implementace je uvedena ve výpisu 34. Pro detekci překážek v podobě šedých
krabic a jejich objíždění mohou být použita senzorická měření dálkoměrnými senzory a
samozřejmě algoritmy z minulých úloh. Podmínkou správného běhu algoritmu je neustálá
detekovatelnost sledované krabice.
const double THRESHOLD = 0.2;
/* Přední
const int
/* Přední
const int
senzor nalevo. */
IR_FRONT_LEFT = 2;
senzor napravo. */
IR_FRONT_RIGHT = 3;
/*
* Navigace robotu k barevnému objektu.
*/
bool CMorbot::gotoColor(int color) {
robot->Read();
TBlobData blobData = camera->getBlobPosition(color);
while(blobData.distance > THRESHOLD &&
(ranger->getData(IR_FRONT_LEFT) > THRESHOLD ||
ranger->getData(IR_FRONT_RIGHT) > THRESHOLD)) {
robot->Read();
blobData = camera->getBlobPosition(color);
drive->setSpeeds(blobData.distance, blobData.angle);
}
drive->setSpeeds(0.0,0.0);
robot->Read();
return true;
}
Výpis 34: Regulátor pro dojezd ke krabici známé barvy, funkce gotoColor.
53/60
4.7 Tvorba topologické mapy
4.7
4.7.1
Podpůrný software pro výuku mobilní robotiky
Úloha V - Tvorba topologické mapy prostředí
Motivace
Studenti se seznámí se základními druhy vnitřních modelů prostředí robotu a jejich
reprezentací. Vyzkouší si implementaci komplexnější úlohy a uplatní všechny dosud získané
dovednosti.
4.7.2
Zadání
Implementujte algoritmus pro průzkum neznámého prostředí, tvorbu topologické mapy
a plánování cesty ve zmapovaném prostředí. V operačním prostoru robotu se nacházejí dva
druhy krabic:
• šedé krabice reprezentují překážky a
• krabice výrazných barev sloužící jako orientační body.
Použijte inteligentní kameru pro pořizování obrazů okolí a rozhraní Playeru blobfinder pro
detekci souvislých barevných oblastí v pořízeném obraze. Po průzkumu prostředí by měl
být robot schopen autonomní jízdy k zadané krabici s minimálním počtem přesunů mezi
nimi.
4.7.3
Základní druhy modelů prostředí
Mezi základní úlohy, které jsou řešeny v oblasti mobilní robotiky, patří plánování. Pro
naplánování cesty robotu je nutné znát model prostředí, nebo-li mapu. Mapy prostředí
mohou být robotu k dispozici předem, ale většinou neexistují ve vhodném formátu pro
další zpracování. Z tohoto důvodu může být mapa vytvořena v průběhu průzkumu prostředí
robotem. Mapy lze rozdělit do tří základních skupin:
Senzorické mapy jsou reprezentací prostředí s nejnižším stupněm abstrakce. Jedná se
o vhodně uchovávaná data získaná senzorickým měřením. Tvorba takové mapy je
velmi jednoduchá, ale na druhou stranu je mapa paměťově náročná a nemusí být
příliš vhodná pro další zpracování. Příkladem senzorické mapy je mřížka obsazenosti.
Mřížkou rozděluje prozkoumávané prostředí na menší celky. Každá buňka mřížky
obsahuje míru pravděpodobnosti přítomnosti překážky.
Geometrická mapa reprezentuje prostředí vhodně zvolenými geometrickými entitami,
jako jsou úsečky nebo kružnice. Tyto mapy jsou výpočetně náročnější než předchozí,
ale díky větší míře abstrakce jsou méně paměťově náročné.
54/60
4.7 Tvorba topologické mapy
Podpůrný software pro výuku mobilní robotiky
Topologické mapy mohou být definovány například jako grafy, jejichž uzly jsou významnými místy v okolním prostředí a hrany definují přechody mezi těmito místy. Mapy
nemusí obsahovat žádné geometrické údaje. Topologické mapy jsou výhodné pro plánování nad velkým množstvím dat. Příklad mapovaného prostředí a jeho reprezentace
topologickou mapou jsou uvedeny na obrázku 24.
(a) Prostředí.
(b)
Topologická
mapa.
Obrázek 24: Příklad prostředí a jeho reprezentace topologickou mapou.
Kromě těchto tří základních modelů existuje také symbolická mapa, jejíž tvorba je založena na znalosti topologické mapy. Symbolická mapa se skládá ze jmen objektů nacházejících se v prostředí, jako je stůl nebo židle, vztahů mezi nimi, například židle je vedle stolu
v kuchyni, a některých vlastností objektů. Symbolická mapa by měla umožňovat zadávat
dotazy na vytvořený symbolický svět, například dotaz na cestu z chodby do kuchyně.
4.7.4
Rozbor úlohy
Zadání páté úlohy poskytuje studentům prostor pro její dodefinování. Umožňuje přidání
definice podmínek fungování algoritmu, kterými si studenti mohou sami upravit složitost
úlohy. Pro algoritmus popsaný v následujícím oddíle platí pro rozestavení krabic v prostoru
tyto omezující podmínky:
• V prostředí robotu neexistuje krabice nedetekovatelná při objíždění jiné krabice.
• V prostředí může existovat více krabic stejné barvy, za předpokladu že
- dvě krabice stejné barvy nejsou detekovatelné při objezdu jedné krabice a
- od krabice jedné barvy není detekovatelná krabice stejné barvy.
• Všechny krabice musí být možné zcela objet.
• Z počáteční pozice robotu je možné detekovat alespoň jednu krabici.
55/60
4.7 Tvorba topologické mapy
4.7.5
Podpůrný software pro výuku mobilní robotiky
Popis implementace
Implementaci páté úlohy rozdělíme na dva samostatné problémy:
1. průzkum prostředí a stavba mapy,
2. plánování cesty na již sestavené mapě tak, aby algoritmus plánování našel vždy tu
nejkratší cestu. Nejkratší cestou je myšlena cesta s nejnižším počtem přesunů mezi
krabicemi.
Průzkum a stavba mapy spočívá v prohledání okolí robotu a sestavení grafu. Uzly grafu
představují důležitá místa v operačním prostoru robotu, v tomto případě barevné krabice.
Každý uzel má unikátní číselné označení a svou barvu, kromě toho obsahuje seznam všech
sousedních uzlů. Hrany grafu reprezentují spojnice mezi uzly a v tomto případě nejsou
ohodnoceny. Ohodnocení jednotlivých hran, neboli vzdálenosti mezi krabicemi, je možné
na základě odhadu vzdálenosti mezi krabicemi. Ohodnocení může být použito při plánování
nejkratší cesty, kde délka cesty je počítána v metrech. Takový přístup však komplikuje
řešení úlohy. Pro jednoduchost a názornost jej zde nebudeme uvažovat.
Průzkum prostředí může probíhat náhodně i deterministicky, vždy je ale potřeba zajistit
úplné prohledání prostoru. Pravidla pro průzkum prostředí mohou vypadat takto:
1. Otočení robotu kolem své osy o 360◦ , výběr nejbližší krabice podle odhadu vzdálenosti
získaného z rozhraní Blobfinder a jízda k ní. Vytvoření prvního uzlu grafu a aktivace
druhého pravidla. Pokud nebyla detekována žádná krabice, program končí.
2. Objezd zvolené krabice dokola a přidání detekovaných krabic do seznamu sousedů,
pokud:
- barva detekované krabice není rovna barvě objížděné krabice a
- detekovaná krabice ještě není v seznamu sousedů.
Pokud se detekovaná krabice dosud nenachází v mapě, je vytvořen nový uzel grafu.
Objetá krabice je označena za prozkoumanou a je aktivováno třetí pravidlo.
3. Výběr krabice pro další průzkum.
- Pokud existuje alespoň jeden neprozkoumaný soused právě objeté krabice, je
vybrán libovolný soused.
- Pokud neexistuje žádný takový soused, ale je nalezen alespoň jeden dosud neprozkoumaný uzel grafu, je vybrán uzel, ke kterému vede cesta s nejnižším počtem
přejezdů mezi krabicemi.
Pokud nebyl nalezen žádný dosud neprozkoumaný uzel, algoritmus končí. V opačném
případě pokračuje robot jízdou k vybranému uzlu a je aktivováno druhé pravidlo.
56/60
4.7 Tvorba topologické mapy
Podpůrný software pro výuku mobilní robotiky
Druhou částí implementace je plánování cesty na sestavené mapě. Pro tyto účely mohou
být použity algoritmy pro prohledávání stavového prostoru, kde každý uzel vytvořeného
grafu je považován za jeden stav.
Pro průzkum prostředí byl nutný jeden senzor, inteligentní kamera. Pohyb robotu podle
naplánované cesty mezi krabicemi vyžaduje použití dálkoměrných senzorů. Kromě vizuální
navigace pro jízdu od krabice ke krabici využijeme také dálkoměrné senzory pro detekci
šedých krabic a vyhýbání se jim.
57/60
Podpůrný software pro výuku mobilní robotiky
5
Závěr
Cílem této práce bylo vytvořit softwarovou podporu pro výuky mobilní robotiky. Nejprve
byl nakonfigurován palubní počítač robotické platformy Morbot, která byla vytvořena pro
účely výuky. Samotná konfigurace nespočívá jen v nastavení parametrů periférií, ale také
v nezbytné přípravě prostředí křížové kompilace pro sestavení serverové části Playeru pro
procesor architektury ARM.
Mezi nejdůležitější výstupy bakalářské práce patří softwarový modul zajišťující integraci
robotické platformy Morbot do systému Player. Tento modul implementuje unifikované
rozhraní Playeru poskytující abstrakci přístupu k hardware. To umožňuje jednoduchý přenos aplikace implementované v robotickém simulátoru na reálný robot, především přístup
k senzorům. Přístup k nim je stejný jak pro robot modelovaný v simulátoru tak pro reálný
robot.
Hlavní část vlastní bakalářské práce je věnována popisu úloh řešených v rámci předmětu Mobilní robotika spolu s ukázkovými řešeními. Řešení úloh slouží nejen k odladění
implementovaného modulu Playeru, ale umožňuje studentům mobilní robotiky rychlejší
proniknutí do problematiky a pochopení principů Playeru.
V průběhu příštích let bude jistě zajímavé sledovat postup studentů při řešení úloh
předmětu, pokud budou mít k dispozici vytvořený materiál. Studenti mohou využít ucelený zdroj informací a řešení úloh pro ně může být zpočátku jednodušší, proto by mohli
zvládnout řešení náročnějších úloh.
58/60
REFERENCE
Podpůrný software pro výuku mobilní robotiky
Reference
[1] Grimmer Vladimír. Platforma pro výuku mobilní robotiky. Technical report, ČVUT
v Praze, Fakulta Elektrotechnická, 2008. Bakalářská práce.
[2] Gumstix - dream, design, deliver. http://www.gumstix.com.
[3] PXA270 Electrical, Mechanical and Thermal Specification. http://www.phytec.com/
pdf/datasheets/PXA270_DS.pdf.
[4] The Journaling Flash File System, version 2. http://sourceware.org/jffs2.
[5] The Player Project. http://playerstage.sourceforge.net.
[6] Driver Class Reference. http://playerstage.sourceforge.net/doc/Player-2.0.
0/player/classDriver.html.
[7] Version Control with Subversion. http://svnbook.red-bean.com.
[8] PlayerClient Class Reference.
http://playerstage.sourceforge.net/doc/
Player-1.6.5/player-html/classPlayerClient.php.
[9] Client Proxy Class Reference.
http://playerstage.sourceforge.net/doc/
Player-1.6.5/player-html/classClientProxy.php.
[10] GP2D120, Opto Electronic Device.
americas/en/part/G2D120XJ00F/.
http://www.sharpsma.com/Page.aspx/
[11] Srf10 Ultrasonic range finder, Technical Specification.
robot-electronics.co.uk/htm/srf10tech.htm.
http://www.
[12] Vladimir J. Lumelsky. Sensing, Intelligence, Motion: How Robots and Humans Move
in an Unstructured World. John Wiley and Sons, Inc., 2004.
[13] CMUcam3: Open Source Programmable Embedded Color Vision Platform. http:
//www.cmucam.org.
59/60
Příloha
Obsah přiloženého CD
V tabulce 7 jsou uvedena jména všech kořenových adresářů přiloženého CD s popisem
obsahu.
Jméno adresáře Popis obsahu
bp
bakalářská práce ve formátu pdf.
úlohy
zdrojové kódy k úlohám řešeným na X33MOR.
driver
zdrojové kódy modulu pro integraci robotu Morbot do
Playeru.
Tabulka 7: Obsah přiloženého CD.

Podobné dokumenty

Untitled - Brno Alligators

Untitled - Brno Alligators chyly, ale na prvni misto to letosop6tnestadilo.A tak jsme byly, tak jako uZ piedesld2 rcky, opEtdruhd. Myslim ale,Zenrimto zasaZtak moc nevadi.Behemtohotorokujsmedosrihly ohromndhopokroku,kteri vs...

Více

Tecnicall 4/2009

Tecnicall 4/2009 chování řidiče s tím, že se měří jeho fyziologická data, nebo se nepřímo sleduje chování automobilu na silnici, které způsobuje řidič. My jsme si vybrali druhou cestu a na Fakultě dopravní jsem se ...

Více

práci - Intelligent and Mobile Robotics Group

práci - Intelligent and Mobile Robotics Group ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA ELEKTROTECHNICKÁ

Více

BAKAL´AˇRSK´A PR´ACE

BAKAL´AˇRSK´A PR´ACE práce v zamořených prostorech. Robotické aplikace pomáhajı́ kosmonautům při pracı́ch v otevřeném vesmı́ru, vojákům při odstraňovánı́ výbušnin. V poslednı́ době se roboty dostávajı...

Více

Petrov MRBT - Ústav automatizace a měřicí techniky

Petrov MRBT - Ústav automatizace a měřicí techniky kanálu. Pracuje s tzv. rozprostřeným spektrem, kdy je signál vysílán na několika stovek až tisíc nosných kmitočtů což zvyšuje odolnost vůči interferenci.

Více

Videokamery Systému Video Camcorder

Videokamery Systému Video Camcorder DSE (zvlá‰tní digitální efekty) v reÏimu CAMERA ..........38 Nastavení a záznam funkce DATUM/âAS ......................40 V˘bûr a zaznamenání titulku ...........................................42 F...

Více