• Nebyly nalezeny žádné výsledky

Diplomov´a pr´ace

N/A
N/A
Protected

Academic year: 2022

Podíl "Diplomov´a pr´ace"

Copied!
51
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

Fakulta elektrotechnick´a

Diplomov´ a pr´ ace

Martin Blaha

Generov´ an´ı hladk´ ych trajektori´ı ve 3D

Katedra kybernetiky

Vedouc´ı diplomov´e pr´ace: RNDr. Miroslav Kulich, Ph.D.

Praha 2014

(2)

Katedra kybernetiky

ZADÁNÍ DIPLOMOVÉ PRÁCE

Student: Bc. Martin B l a h a

Studijní program: Kybernetika a robotika (magisterský) Obor: Robotika

Název tématu: Generování hladkých trajektorií ve 3D

Pokyny pro vypracování:

1. Seznamte se s volně dostupnými knihovnami pro generování Voroného diagramů množiny bodů ve 3D, zejména s knihovnou Voro++ (http://math.lbl.gov/voro++/).

2. Seznamte se s metodami reprezentace hladkých křivek ve 3D.

3. Implementujte (a) Voroného diagramy pro množinu mnohostěnů a (b) operace průniku Voroného buněk s hladkými křivkami (např. B-splines).

4. Navrhněte a implementujte algoritmus pro optimalizaci počáteční trajektorie založený na efektivním výpočtu funkce vzdálenosti od překážek.

5. Funkčnost implementovaných algoritmů ověřte experimenty. Experimentální výsledky popište se zaměřením na rychlost a robustnost algoritmů a kvalitu generovaných výsledků.

Seznam odborné literatury:

[1] M. Kulich: Vyhlazování cesty pro autonomní vozítko. Diplomová práce, MFF UK Praha, 1996.

[2] C. H. Rycroft: Voro++: a three-dimensional Voronoi cell library in C+, http://math.lbl.gov/voro++/doc/voro++_overview.pdf [online]

[3] W.J. Schroeder, K. Martin, W. Lorensen:The Visualization Toolkit: An Object-Oriented Approach to 3D Graphics, Third Edition. Kitware, Inc. 2006.

[4] E.G. Gilbert, D. W. Johnson: Distance functions and their application to robot path planning in the presence of obstacles, IEEE Journal of Robotics and Automation, vol.1, no.1, pp.21-30, Mar 1985.

Vedoucí diplomové práce: RNDr. Miroslav Kulich, Ph.D.

Platnost zadání: do konce letního semestru 2014/2015

L.S.

doc. Dr. Ing. Jan Kybic vedoucí katedry

prof. Ing. Pavel Ripka, CSc.

děkan

(3)

Prohlaˇsuji, ˇze jsem pˇredloˇzenou pr´aci vypracoval samostatnˇe a ˇze jsem uvedl veˇsker´e pouˇzit´e informaˇcn´ı zdroje v souladu s Metodick´ym pokynem o dodrˇzov´an´ı etick´ych princip˚u pˇri pˇr´ıpravˇe vysokoˇskolsk´ych z´avˇereˇcn´ych prac´ı.

V Praze dne... ...

(4)

Dˇekuji vedouc´ımu pr´ace RNDr. Miroslavu Kulichovi, Ph.D. za cenn´e rady, oceˇnuji jeho vstˇr´ıcn´y a konstruktivn´ı pˇr´ıstup. Dˇekuji sv´e rodinˇe za podporu v pr˚ubˇehu cel´eho studia.

(5)

Tato pr´ace se zab´yv´a optimalizac´ı poˇc´ateˇcn´ı trajektorie zaloˇzen´e na efektivn´ım v´ypoˇctu funkce vzd´alenosti od pˇrek´aˇzek pro 3D prostˇred´ı.

Nejprve je pˇredstaven algoritmus pro tvorbu aproximac´ı 3D Voron´eho diagramu, kter´y je nutn´y k v´ypoˇctu funkce vzd´alenosti trajektorie od pˇrek´aˇzky. Trajektorie je reprezentov´ana B-spline kˇrivkou. N´aslednˇe je pops´an algoritmus v´ypoˇctu funkce trajektorie od pˇrek´aˇzky zaloˇzen´y na prohled´av´an´ı do ˇs´ıˇrky. Pˇri optimalizaci trajektorie jsou pouˇzita jako hodnot´ıc´ı krit´eria vzd´alenost trajektorie od pˇrek´aˇzek a d´elka trajektorie.

Funkˇcnost navrˇzen´eho algoritmu byla otestov´ana na mapˇe tvoˇren´e sedmi kv´adry, pro r˚uzn´e v´ahy funkce vzd´alenosti od pˇrek´aˇzek a d´elky trajekto- rie. N´avrhy na zlepˇsen´ı jsou diskutov´any.

Abstract

This thesis deals with the optimization of the initial trajectory. The op- timization is based on calculation of the effective function of the distance between obstacles and path in 3D environments. First, an algorithm for the calculation of approximations of 3D Voronoi diagram is described.

The Voronoi diagram is necessary to calculate the distance function be- tween obstacles and a trajectory. The trajectory is represented by a B- spline curve. The algorithm for calculation of the distance function of path based on breadth-first search is described. The criteria of the dis- tance function and the length of the trajectory are used to optimize trajectory.

Functionality of the proposed algorithm was tested on a map. The map consists of seven obstacles and the test was performed for various weights of both criteria. Suggestions for improvement are discussed.

(6)

Obsah

1 Uvod´ 1

2 Popis algoritmu 3

2.1 Mapa prostˇred´ı . . . 3

2.2 Voron´eho diagramy . . . 4

2.2.1 Voron´eho diagram pro svˇet robota . . . 5

2.3 Pl´anov´an´ı cesty . . . 11

2.3.1 Pˇrevod Voron´eho bunˇek pro pl´anovac´ı algoritmus . . . 11

2.4 Popis trajektorie . . . 15

2.4.1 Pˇrevod napl´anovan´e cesty na B-spline kˇrivku . . . 17

2.5 Optimalizace trajektorie . . . 19

2.5.1 Bezpeˇcnostn´ı funkce . . . 19

2.5.2 Funkce χ. . . 20

2.5.3 Funkce τ . . . 20

2.5.4 Funkce vzd´alenosti od vrcholu pˇrek´aˇzky . . . 21

2.5.5 Funkce vzd´alenosti od hrany pˇrek´aˇzky . . . 21

2.5.6 Funkce vzd´alenosti od stˇeny pˇrek´aˇzky . . . 22

2.5.7 Algoritmus v´ypoˇctu bezpeˇcnostn´ı funkce . . . 22

2.5.8 Kombinace d´elky a bezpeˇcnosti . . . 24

2.6 Zhodnocen´ı navrˇzen´eho algoritmu . . . 25

3 Implementace 26 3.1 Knihovna VTK . . . 26

3.2 Knihovna Voro++ . . . 26

3.3 Knihovna OPT++ . . . 27

4 Experimenty 28 4.1 Objet´ı pˇrek´aˇzky . . . 37

(7)

5 Z´avˇer 38

6 Pˇr´ıloha 41

6.1 Obsah pˇriloˇzen´eho CD . . . 41

(8)

Seznam obr´ azk˚ u

1 Voron´eho diagram pro mnoˇzinu bod˚u v rovinˇe, pˇrevzato z [4] . . . 4

2 V´ysledn´a aproximace pˇrek´aˇzek a hrany body . . . 6

3 Z´avislosti hrany e ve struktuˇre DCEL, pˇrevzato z [4] . . . 7

4 Vypoˇcten´e Voron´eho buˇnky pro jednotliv´e body z´ıskan´e z pˇrek´aˇzek . . . . 8

5 Voron´eho buˇnka pˇred a po redukci stˇen . . . 10

6 Voron´eho buˇnky po redukci stˇen . . . 11

7 Nezpracovan´e stˇeny Voron´eho buˇnky . . . 12

8 Nejkratˇs´ı cesta vygenerovan´a pl´anovaˇcem . . . 16

9 B-spline kˇrivka sloˇzen´a ze tˇr´ı Coonsov´ych kubik . . . 17

10 B-spline kˇrivka z napl´anovan´e cesty . . . 18

11 Pr˚ubˇeh funkce χ . . . 20

12 Pr˚useˇc´ıky Voron´eho buˇnky a B-spline kˇrivky . . . 21

13 Mapa pˇrek´aˇzek s napl´anovanou cestou . . . 28

14 Poˇc´ateˇcn´ı trajektorie v zadan´e mapˇe . . . 29

15 V´ysledn´e trajektorie po optimalizaci . . . 31

16 Pr˚ubˇeh bezpeˇcnostn´ı funkce, d´elky trajektorie a hodnot´ıc´ı funkce 1 . . . . 32

17 Pr˚ubˇeh bezpeˇcnostn´ı funkce, d´elky trajektorie a hodnot´ıc´ı funkce 2 . . . . 33

18 Pr˚ubˇeh bezpeˇcnostn´ı funkce, d´elky trajektorie a hodnot´ıc´ı funkce 3 . . . . 34

19 Pr˚ubˇeh experimentu ˇc´ıslo 2 . . . 35

20 Pr˚ubˇeh experimentu ˇc´ıslo 5 . . . 36

21 Objet´ı pˇrek´aˇzky . . . 37

(9)

Seznam tabulek

1 Tabulka v´ysledk˚u proveden´ych experiment˚u . . . 30 2 Obsah CD . . . 41

(10)

Seznam algoritm˚ u

1 Algoritmus aproximace hrany pˇrek´aˇzky, pˇrevzato a upraveno z [6] . . . 5

2 Algoritmus hled´an´ı prvn´ıho vrcholu nov´e stˇeny . . . 9

3 Algoritmus hled´an´ı dalˇs´ıch krajn´ıch vrchol˚u nov´e stˇeny . . . 9

4 Algoritmus redukce vrchol˚u nov´e stˇeny . . . 10

5 Algoritmus vytvoˇren´ı seznamu vrchol˚u pro pl´anovaˇc . . . 13

6 Dijkstr˚uv algoritmus . . . 14

7 Expanze vrcholu pro Dijkstr˚uv algoritmus . . . 15

8 Pˇrevod napl´anovan´e cesty na B-spline kˇrivku . . . 18

9 Algoritmus v´ypoˇctu bezpeˇcnostn´ı funkce . . . 23

10 Algoritmus v´ypoˇctu pr˚useˇc´ık˚u Voron´eho bunˇek a B-spline kˇrivky . . . 24

(11)

1 Uvod ´

Mezi z´akladn´ı funkcionality mobiln´ıho robota patˇr´ı pl´anov´an´ı, kter´e pˇrev´ad´ı poˇzadavky nadˇr´ızen´ych specifikac´ı do popisu, kudy se m´a robot pohybovat. V´ystupem pl´anovac´ıho al- goritmu m˚uˇze b´yt posloupnost akc´ı, kter´e mus´ı robot vykonat, aby bylo dosaˇzeno zadan´eho c´ıle, nebo jenom posloupnost bod˚u, kter´e mus´ı robot projet. Mezi poˇzadavky patˇr´ı pˇr´ı- pustnost pl´anu, kdy se nebere ohled na jeho efektivitu, ale na proveditelnost, kter´a muˇze b´yt podm´ınˇena napˇr´ıklad rozmˇery robota. Dalˇs´ım poˇzadavkem je kvalita pl´anu, tj. je sna- hou nal´ezt provediteln´y pl´an, kter´y je z nˇejak´eho hlediska optim´aln´ı. Na optim´aln´ı tra- jektorii jsou kladeny pˇredevˇs´ım poˇzadavky na energetickou n´aroˇcnost, d´elku trajektorie, kterou mus´ı robot urazit k c´ıli a maxim´aln´ı vzd´alenost trajektorie od okoln´ıch pˇrek´aˇzek.

Pl´anovac´ı algoritmy lze rozdˇelit podle stavov´eho prostoru na diskr´etn´ı a spojit´e. Toto rozdˇelen´ı se odr´aˇz´ı i v pouˇzit´e reprezentaci prostˇred´ı, ve kter´em se robot pohybuje. Diskr´etn´ı pl´anovac´ı algoritmy, napˇr´ıklad Dijkstr˚uv algoritmus, prohled´avaj´ı koneˇcn´y prostor stav˚u, kter´y m˚uˇze b´yt napˇr´ıklad zad´an tzv. rastrovou mapou, ve kter´e jednotliv´e buˇnky obsahuj´ı informaci o pravdˇepodobnosti v´yskytu pˇrek´aˇzky.

Pˇri pl´anov´an´ı trajektorie robota v prostˇred´ı reprezentovan´em geometrickou mapou m˚uˇze b´yt stavov´y prostor spojit´y a nespoˇcitateln´y. Sloˇzitost geometrick´eho modelu z´aleˇz´ı na ˇreˇsen´em probl´emu, ve 2D vˇetˇsinou postaˇc´ı reprezentace pˇrek´aˇzek a robota pomoc´ı poly- gon˚u. Nespoˇcitateln´y stavov´y prostor lze tak´e popsat tzv. konfiguraˇcn´ım prostorem. Tento popis je vhodn´y pro pl´anov´an´ı, pokud je transformace ze spojit´eho do diskr´etn´ıho popisu a dalˇs´ı pouˇzit´ı diskr´etn´ıho pl´anovaˇce pˇr´ıliˇs sloˇzit´e. Dimenze konfiguraˇcn´ıho prostoru je z´avisl´a na ˇreˇsen´em probl´emu, napˇr´ıklad pro pohyb ve 3D prostˇred´ı kvadrokopt´ery je dimenze 6.

K dosaˇzen´ı provediteln´eho pl´anu je z konfiguraˇcn´ıho prostoru odebr´an prostor pˇrek´aˇzek a prostor konfigurac´ı, kter´e nesplˇnuj´ı rozmˇerov´e a fyzik´aln´ı omezen´ı. V´ysledn´y pl´an je pak z´ısk´an napˇr´ıklad algoritmem

”Rapidly-exploring Random Tree“ [1]. Mnoho pl´anovac´ıch algoritm˚u je pouˇziteln´ych i v jin´ych vˇedn´ıch oborech.

Problematikou optimalizace trajektorie zaloˇzen´e na v´ypoˇctu funkce vzd´alenosti od pˇre- k´aˇzek se zab´yv´a ˇcl´anek [2]. V tomto ˇcl´anku je uveden postup, kter´y popisuje pl´anov´an´ı tra- jektorie v z´avislosti na pˇrek´aˇzk´ach omezen´ım stavov´eho prostoru. Omezen´ı dan´a pˇrek´aˇzkami jsou zohlednˇena vzd´alenost´ı mezi trajektorii a pˇrek´aˇzkou, s kterou hroz´ı sr´aˇzka. V tomto ˇ

cl´anku jsou uvedeny vlastnosti funkce vzd´alenosti, pˇredevˇs´ım jej´ı diferencovatelnost. Tato funkce obecnˇe nemus´ı m´ıt derivaci, ale pro striktnˇe konvexn´ı pˇrek´aˇzky ji m´a, coˇz umoˇzˇnuje k optimalizaci pouˇz´ıt metody, kter´e rychle konverguj´ı. Autoˇri ˇcl´anku zmiˇnuj´ı jako nev´yhodu v´ypoˇcetn´ı n´aroˇcnost.

(12)

Tato nev´yhoda je odstranˇena v [3]. Nam´ısto poˇc´ıt´an´ı funkce vzd´alenosti od vˇsech pˇre- k´aˇzek je poˇc´ıt´ana funkce vzd´alenosti jen od nejbliˇzˇs´ı pˇrek´aˇzky. K urˇcen´ı oblast´ı, kter´e jsou nejbl´ıˇze, je pouˇzito Voron´eho diagramu. Algoritmus popsan´y v [3] je urˇcen pro 2D prostˇred´ı pˇrek´aˇzek reprezentovan´e seznamem vrchol˚u a hran polygon˚u. Pl´anovac´ı algoritmus dok´aˇze pracovat s jednobodov´ym i polygon´aln´ım robotem.

C´ılem t´eto pr´ace je navrhnout na z´akladˇe [3] algoritmus pro optimalizaci trajektorie ve 3D prostˇred´ı. Hlavn´ı tˇeˇziˇstˇe pr´ace je vˇenov´ano zmˇen´am v´ypoˇctu funkce vzd´alenosti pro pˇrek´aˇzky, d´ale n´avrhu nov´ych algoritm˚u pro efektivn´ı v´ypoˇcet hodnot´ıc´ı funkce.

Popis navrˇzen´eho algoritmu je v kapitole 2. Informace o pouˇzit´ych knihovn´ach a imple- mentace je uvedena v kapitole 3. V kapitole 4 jsou zjiˇstˇeny vlastnosti algoritmu proveden´ım nˇekolika experiment˚u. V posledn´ı kapitole 5 je uvedeno zhodnocen´ı cel´e pr´ace.

(13)

2 Popis algoritmu

V t´eto kapitole je pops´an navrˇzen´y algoritmus generov´an´ı hladk´e trajektorie. Algoritmus lze rozdˇelit na tˇri hlavn´ı ˇc´asti:

• v´ypoˇcet Voron´eho bunˇek pˇrek´aˇzek mapy

• v´ypoˇcet poˇc´ateˇcn´ı trajektorie

• optimalizace poˇc´ateˇcn´ı trajektorie.

Vstupn´ı promˇenn´e jsou mapa pˇrek´aˇzek, startovn´ı a c´ılov´a pozice, v´ystup algoritmu je optimalizovan´a trajektorie popsan´a B-spline kˇrivkou.

Pˇri optimalizaci trajektorie je vyuˇzito v´ypoˇctu funkce vzd´alenosti od pˇrek´aˇzek na z´akladˇe vzd´alenosti ˇc´asti trajektorie k nejbliˇzˇs´ı pˇrek´aˇzce. Tato funkce je tak´e oznaˇcovan´a jako funkce bezpeˇcnosti [3]. Prostor kolem pˇrek´aˇzek je rozdˇelen pomoc´ı Voron´eho diagramu, kter´y kaˇzd´e pˇrek´aˇzce pˇriˇrad´ı ˇc´ast prostoru. Dle naˇsich znalost´ı neexistuje pouˇziteln´a kni- hovna pro v´ypoˇcet Voron´eho diagramu pro 3D tˇelesa, proto byl navrˇzen postup v´ypoˇctu, kter´y je popsan´y v kapitole 2.2.1.

Optimalizace poˇzaduje na zaˇc´atku pˇr´ıpustnou trajektorii od startovn´ıho do c´ılov´eho bodu. Nejdˇr´ıve se vypoˇc´ıt´a pˇr´ıpustn´a cesta pomoc´ı jiˇz spoˇc´ıtan´ych Voron´eho bunˇek a Di- jsktrova algoritmu. N´aslednˇe se cesta pˇrevede na B-spline kˇrivku.

V posledn´ı ˇc´asti se B-spline kˇrivka optimalizuje na z´akladˇe poˇzadavk˚u na bezpeˇcnost a d´elku trajektorie, viz kapitola 2.5. V n´asleduj´ıc´ıch kapitol´ach jsou jednotliv´e kroky po- drobnˇe vysvˇetleny.

2.1 Mapa prostˇ red´ı

Pro vlastn´ı algoritmus pl´anov´an´ı cesty je nutn´e vhodnˇe reprezentovat pˇrek´aˇzky v 3D prostˇred´ı robota. Pˇri vytv´aˇren´ı mapy jsou uvaˇzov´any pˇrek´aˇzky ve tvaru kv´adru nebo krychle. Zadan´a mapa pˇrek´aˇzek mus´ı splˇnovat pˇredpoklad, ˇze se pˇrek´aˇzky vz´ajemnˇe ne- dot´ykaj´ı ani do sebe nezasahuj´ı. Tento pˇredpoklad je d˚uleˇzit´y pro vytv´aˇren´ı Voron´eho diagramu, kter´y je pops´an v kapitole 2.2. Jednotliv´e pˇrek´aˇzky jsou pops´any seznamy vr- chol˚u, hran a stˇen, kter´e je tvoˇr´ı. Pˇrek´aˇzky se do mapy nemus´ı zad´avat dan´ymi seznamy, ale staˇc´ı zadat tˇeˇziˇstˇe pˇrek´aˇzky a jednotliv´e d´elky v os´ach x, y, z. Takto vytvoˇrenou pˇrek´aˇzku lze posunout, pˇr´ıpadnˇe otoˇcit o zadan´y ´uhel kolem definovan´e osy.

(14)

2.2 Voron´ eho diagramy

Co jsou Voron´eho diagramy lze uk´azat na n´asleduj´ıc´ım pˇr´ıkladu. Pˇredpokl´adejme mno- ˇ

zinu obchodn´ıch dom˚u, tzv. m´ıst, kter´e poskytuj´ı urˇcit´e sluˇzby. Naˇs´ım ´ukolem je pro vˇsechna m´ısta zjistit, kde ˇzij´ı z´akazn´ıci, kteˇr´ı poˇzaduj´ı sluˇzby. D´ale pˇredpokl´adejme, ˇze cena sluˇzby je ve vˇsech obchodn´ıch domech stejn´a, cena z´ıskan´e sluˇzby je rovn´a jej´ı cenˇe a cenˇe pˇrepravy k obchodn´ımu domu, cena transportu je ´umˇern´a Eukleidovsk´e vzd´alenosti a z´akazn´ıci se snaˇz´ı minimalizovat cenu z´ıskan´e sluˇzby. Z tˇechto pˇredpoklad˚u vypl´yv´a, ˇze cel´a plocha je rozdˇelena na regiony jednotliv´ych obchodn´ıch dom˚u a to tak, ˇze lid´e ze stejn´eho regionu jezd´ı do stejn´eho m´ısta. Region je sloˇzen ze vˇsech bod˚u (obydl´ı z´akazn´ık˚u), kter´e jsou bl´ıˇze dan´emu m´ıstu neˇz k ostatn´ım m´ıst˚um [4].

Form´alnˇe je Voron´eho diagram definovan´y n´asleduj´ıc´ım zp˚usobem. Mˇejme mnoˇzinu n bod˚u S ={p1, , ..., pn} v rovinˇe, pro kaˇzd´y prvekp z S je otevˇren´y Voron´eho region d´an

D(p, S) = \

q∈S,q6=p

D(p, q), (1)

kde p, q ∈S, p6=q a D(p, q) je polorovina, kter´a patˇr´ı bodu pvypoˇcten´a podle D(p, q) =

z ∈R2;|p−z|<|q−z| . (2) Hranice vˇsech region˚u, kter´a se naz´yv´a Voron´eho diagram mnoˇziny S, je definov´ana jako

V (S) = [

q∈S

∂D(p, S). (3)

Na obr´azku 1 je uk´azka Voron´eho diagramu pro mnoˇzinu bod˚u v rovinˇe.

Obr´azek 1: Voron´eho diagram pro mnoˇzinu bod˚u v rovinˇe, pˇrevzato z [4]

Algoritmus v´ypoˇctu je popsan´y napˇr´ıklad v [4]. Pro mnoˇzinu, kter´e nen´ı zad´ana jenom body, je nutn´e pouˇz´ıt algoritmy, kter´e dˇel´ıc´ı ´useˇcky nahrazuj´ı obecnou dˇel´ıc´ı kˇrivkou, pˇresn´y

(15)

popis je v [5]. Dle naˇsich znalost´ı neexistuje pouˇziteln´a knihovna, kter´a dok´aˇze vypoˇc´ıtat Voron´eho buˇnky pro 3D tˇelesa. V d˚usledku toho byl navrˇzen algoritmus, kter´y je pops´an v n´asleduj´ıc´ı ˇc´asti.

2.2.1 Voron´eho diagram pro svˇet robota

Pˇri v´ypoˇctu bezpeˇcnostn´ı funkce je tˇreba poˇc´ıtat vzd´alenost trajektorie od pˇrek´aˇzky. Je vhodn´e pˇrek´aˇzky rozdˇelit to tˇrech kategori´ı, protoˇze se vzd´alenost trajektorie od vrcholu, hrany a stˇeny pˇrek´aˇzky poˇc´ıt´a odliˇsn´ym zp˚usobem. Pˇrek´aˇzky v mapˇe se nejprve aprox- imuj´ı mnoˇzinou bod˚u, pro kter´e se vypoˇc´ıtaj´ı Voron´eho buˇnky. Poˇcet Voron´eho bunˇek je v t´eto f´azi vˇetˇs´ı, neˇz je poˇcet ˇc´ast´ı pˇrek´aˇzek, proto jsou jednotliv´e Voron´eho buˇnky slouˇceny. Slouˇceny jsou i rozdˇelen´e stˇeny, kter´e vznikly v d˚usledku aproximace pˇrek´aˇzek body. V n´asleduj´ıc´ı sekci jsou pops´any jednotliv´e krovky vytv´aˇren´ı aproximace Voron´eho bunˇek pro pˇrek´aˇzky.

Pˇrevod mapy Vrcholy, hrany a stˇeny pˇrek´aˇzek ze zadan´e mapy se aproximuj´ı body.

Pˇresnˇejˇs´ı aproximaci pˇrek´aˇzek lze dos´ahnout zvˇetˇsen´ım poˇctu aproximuj´ıc´ıch bod˚u. Pˇr´ıliˇs velk´y poˇcet aproximuj´ıc´ıch bod˚u m´a ale za n´asledek v´yrazn´e zpomalen´ı bˇehu algoritmu.

Dalˇs´ım d˚uleˇzit´ym aspektem je vzd´alenost mezi jednotliv´ymi body. Tato vzd´alenost je urˇcena pomoc´ı d´elky nejkratˇs´ı hrany z cel´e zadan´e mapy a poˇctu bod˚u, kter´e ji maj´ı aproximovat. Experiment´alnˇe bylo zjiˇstˇeno, ˇze dostateˇcn´y poˇcet bod˚u na nejkratˇs´ı hranˇe pˇrek´aˇzek jsou dva. Na obr´azku 2a je uk´azka aproximace dvou pˇrek´aˇzek body. Barevn´e rozdˇelen´ı oznaˇcuje pˇr´ısluˇsnost bod˚u Voron´eho bunˇek k jednotliv´ym ˇc´astem pˇrek´aˇzek. Postup vzorkov´an´ı popisuje algoritmus 1.

Vstup: vrcholy hranyx0 a x1, minim´aln´ı vzd´alenost minL, minim´aln´ı poˇcet vzork˚u minS

V´ystup: seznam bod˚u aproximuj´ıc´ıch hranu pˇrek´aˇzky sb

1: Vypoˇcti d´elku kroku d=minLminS. Vypoˇcti d´elku hrany l =|x0 x1|.

2: Poˇcet aproximuj´ıc´ıch bod˚unp=round(dl + 2).

3: for all id∈ h1, np−1) do

4: Pˇrid´av´an´ı bod˚usb=sb∪ {x0+t(x1−x0)}, kdet = np−1id .

5: end for

Algoritmus 1: Algoritmus aproximace hrany pˇrek´aˇzky, pˇrevzato a upraveno z [6]

(16)

Poˇcet aproximuj´ıc´ıch bod˚u se urˇc´ı na ˇr´adku 2 a n´aslednˇe se vypoˇc´ıtaj´ı jednotliv´e apro- ximuj´ıc´ı body hrany. Na obr´azku 2b je zobrazena uk´azka vzorkov´an´ı hrany. Skuteˇcn´a vzd´alenost mezi body aproximuj´ıc´ımi ˇc´ast pˇrek´aˇzky je obecnˇe menˇs´ı neˇz zadan´a, coˇz zp˚usobuje zaokrouhlov´an´ı poˇctu aproximuj´ıc´ıch bod˚u na cel´e ˇc´ıslo, viz ˇr´adek 2.

Modifikac´ı algoritmu 1 lze vzorkovat stˇeny pˇrek´aˇzek. Stˇena je zad´ana ˇctyˇrmi body x0 aˇz x3, kter´e jsou vyuˇzity pro urˇcen´ı d´elky hranl1 =|x0x1|, l2 =|x0x3| a urˇcen´ı poˇctu aprox- imuj´ıc´ıch bod˚unp1 anp2. Jednotliv´e body jsou vypoˇcteny podle

x=x0+s(x1 −x0) +t(x3−x0) t∈ h1;np1−1)s∈ h1;np2−1). (4)

(a) V´ysledn´a aproximace pˇrek´zek body (b) Vzorkovan´ı hrany

Obr´azek 2: V´ysledn´a aproximace pˇrek´aˇzek a hrany body

Pro body v seznamu sb se vypoˇc´ıtaj´ı 3D Voron´eho buˇnky. Pˇresn´e urˇcen´ı pˇr´ısluˇsnosti Voron´eho buˇnky k bodu, respektive k ˇc´asti pˇrek´aˇzky, je zajiˇstˇeno t´ım, ˇze aproximuj´ıc´ı body se vyskytuj´ı v seznamu pouze jednou. Jedineˇcnost poloˇzek seznamu bod˚u je splnˇena splnˇen´ım podm´ınky na mapu pˇrek´aˇzek. Pˇri v´ypoˇctu Voron´eho bunˇek je nutn´e definovat ˇ

c´ast prostoru, ve kter´em se v´ypoˇcet provede. Definovan´y prostor v´ypoˇctu je volen podle pˇrek´aˇzek mapy. M´a tvar kv´adru, kter´y obklopuje vˇsechny pˇrek´aˇzky. Pˇri v´ypoˇctu Voron´eho bunˇek jsou stˇeny, kter´e soused´ı s definovan´ym ohraniˇcen´ım indexov´any z´apornˇe.

Pˇredpokl´adan´y poˇcet Voron´eho bunˇek pro jednu pˇrek´aˇzku ve tvaru kv´adru je osm pro vrcholy, dvan´act pro hrany a ˇsest bunˇek pro stˇeny pˇrek´aˇzky. Poˇcet Voron´eho bunˇek je v t´eto f´azi daleko vˇetˇs´ı neˇz oˇcek´avan´y. N´asleduj´ıc´ı postup je pˇredevˇs´ım zamˇeˇren na redukci

(17)

poˇctu Voron´eho bunˇek jejich sluˇcov´an´ım. Na obr´azku 4 jsou zobrazeny Voron´eho buˇnky jednotliv´ych ˇc´ast´ı pˇrek´aˇzek pˇred dalˇs´ım zpracov´an´ım.

Sluˇcov´an´ı Voron´eho bunˇek Sn´ıˇzen´ı poˇctu Voron´eho bunˇek lze dos´ahnou spojov´an´ım sousedn´ıch bunˇek do jedn´e, respektive vyˇrazen´ım sousedn´ıch stˇen z obou bunˇek. Spojovat lze pouze Voron´eho buˇnky, kter´e soused´ı s bodem ze stejn´e pˇrek´aˇzky a ze stejn´ych ˇc´ast´ı hrany nebo stˇeny pˇrek´aˇzky. Aproximaci vrcholu pˇredstavuje bod samotn´y, proto Voron´eho buˇnky vrchol˚u nen´ı nutn´e sluˇcovat.

V dalˇs´ı f´azi jsou vˇsechny buˇnky pˇrevedeny do struktury podobn´e DCEL(

”Doubly Con- nected Edge List“), kter´a se skl´ad´a ze tˇr´ı seznam˚u: vrchol˚u, hran a stˇen. Pˇrevod do upraven´e struktury DCEL umoˇzn´ı efektivnˇe proch´azet stˇeny po hran´ach. Struktura pro jednotliv´e vrcholy obsahuje souˇradnice jeho vrcholu, d´ale je rozˇs´ıˇren´a o id vrcholu a seznam vˇsech hran buˇnky, kter´e ve vrcholu zaˇc´ınaj´ı. Tato ´uprava umoˇzˇnuje pˇrech´azen´ı z polygonu (stˇeny) do pˇrilehl´eho polygonu pˇres vrchol dan´e stˇeny.

Struktura pro stˇenu obsahuje ukazatel na prvn´ı hranu, kter´a stˇenu ohraniˇcuje, id stˇeny, id sousedn´ı buˇnky, kter´a pˇres danou stˇenu soused´ı a typ sousedn´ı buˇnky, tj. ke kter´e ˇc´ast´ı pˇrek´aˇzky patˇr´ı.

Struktura pro hranu obsahuje

”twin edge“, to je dvojice sousedn´ı hrany e

”half edge“.

Na obr´azku 3 jsou graficky zn´azornˇen´e z´avislosti

”half edge“.

”Half edge“ m´a ukazatel na vrchol, kde m´a poˇc´atek, d´ale ukazatel na dalˇs´ı, pˇredchoz´ı a protilehlou hranu a ukazatel na stˇenu, kter´a je vlevo ve smˇeru hrany. D´ale obsahuje id hrany a logick´y pˇr´ıznak pro urˇcen´ı, jestli hrana m´ıˇr´ı do pˇrek´aˇzky v mapˇe. [4]

e

Prev(e) Next(e)

IncidentFace(e)

Origin(e) Twin(e)

Obr´azek 3: Z´avislosti hrany e ve struktuˇre DCEL, pˇrevzato z [4]

(18)

Na obr´azku 4 je vidˇet, ˇze vzorkov´an´ı zp˚usobilo rozdˇelen´ı stˇen Voron´eho buˇnky i tam, kde m´a b´yt stˇena souvisl´a. V n´asleduj´ıc´ı ˇc´asti je ˇreˇseno spojov´an´ı rozdˇelen´ych stˇen.

Obr´azek 4: Vypoˇcten´e Voron´eho buˇnky pro jednotliv´e body z´ıskan´e z pˇrek´aˇzek

Redukce nadbyteˇcn´ych stˇen Redukce nadbyteˇcn´ych stˇen spoˇc´ıv´a v nahrazen´ı nˇekolika sousedn´ıch stˇen jednou novou stˇenou. Nejdˇr´ıve se urˇc´ı stˇeny, kter´e je moˇzn´e nahrazovat.

Mezi nadbyteˇcn´e stˇeny se povaˇzuj´ı:

• Stˇeny, kter´e tvoˇr´ı stˇenu se stejn´ym okrajem, jsou z´ısk´any ze stejn´e pˇrek´aˇzky a soused´ı spolu alespoˇn jednou hranou.

• Stˇeny, kter´e jsou mezi Voron´eho buˇnkami vytvoˇren´ymi z jin´e ˇc´asti stejn´e pˇrek´aˇzky, napˇr´ıklad stˇena mezi buˇnkou hrany a pˇrilehlou buˇnkou stˇeny.

• Stˇeny mezi dvˇema hranami z jin´e pˇrek´aˇzky, kter´e leˇz´ı v rovinˇe.

• Stˇeny mezi dvˇema Voron´eho buˇnkami, kter´e vznikly ze stˇeny pˇrek´aˇzky mezi dvˇema r˚uzn´ymi pˇrek´aˇzkami.

Algoritmus hled´an´ı okraje nov´e stˇeny Pˇri hled´an´ı okraje nov´e stˇeny se na zaˇc´atku urˇc´ı jeden vrchol leˇz´ıc´ı ohraniˇcen´ı nov´e stˇeny. Postup hled´an´ı poˇc´ateˇcn´ıho vrcholu nov´e stˇeny popisuje algoritmus 2. Cyklus na ˇr´adku 1 vytv´aˇr´ı seznam vˇsech vrchol˚u, kter´e definuj´ı stˇenu, kter´a vytv´aˇr´ı hranici mezi dvˇema buˇnkami nebo buˇnkou a okrajem. Poˇc´ateˇcn´ı vrchol nov´e stˇeny mus´ı b´yt na jej´ım okraji. Poˇc´ateˇcn´ı vrchol je vrchol, kter´y je nejd´ale od prvn´ıho

(19)

vrcholu v seznamu vrchol˚u.

Vstup: Voron´eho buˇnka c, sousedn´ı buˇnky okraj V´ystup: vrchol v

1: for all stˇenu f buˇnky cdo

2: if stˇena f soused´ı s buˇnkouokraj then

3: Pˇridej vˇsechny vrcholy stˇeny f do pomocn´eho seznamu vrcholu psv.

4: end if

5: end for

6: Odstraˇn duplicity ze seznamu psv.

7: for all prvek v1 seznamu psv\ {psv[1]} do

8: d=|v1 psv[1]|

9: if d > maxd then

10: maxd=d av =v1

11: end if

12: end for

Algoritmus 2: Algoritmus hled´an´ı prvn´ıho vrcholu nov´e stˇeny

V dalˇs´ım kroku se vytvoˇr´ı seznam vˇsech bod˚u, kter´e leˇz´ı na okraji nov´e stˇeny. Opako- v´an´ım algoritmu 3 pokaˇzd´e pro naposledy nalezen´y vrchol v, dokud dalˇs´ı nalezen´y vrchol nen´ı prvn´ım vrcholem nov´e stˇeny, se z´ısk´a seznam vrchol˚u, kter´e tvoˇr´ı okraj nov´e stˇeny.

Na ˇr´adku 2 algoritmu 3 se testuje, jestli hrana e ze seznamu hran vrcholu v0 je hraniˇcn´ı.

Nalezen´y seznam vrchol˚u nov´e stˇeny vˇetˇsinou obsahuje hodnˇe vrchol˚u, kter´e leˇz´ı na pˇr´ımce.

Tyto vrcholy lze odstranit, ale pouze pokud bude odstranˇen vrchol i v pˇrilehl´e stˇenˇe, jak ukazuje obr´azek 5. Jinak by ve struktuˇre pro Voron´eho buˇnky nesouhlasil poˇcet

”half edge“

a poˇcet

”twin edge“. Vrcholy nov´e stˇeny, kter´a nelze odstranit, jsou pˇrid´any do seznamu neodstraniteln´ych vrchol˚u.

Vstup: Voron´eho buˇnka c, sousedn´ı buˇnky okraj a poˇc´ateˇcn´ı vrchol v0 V´ystup: vrchol v

1: for all Hrany e vrcholu v0 do

2: if e.face.neighbor == okraj AND e.twin.face.neighbor !=okraj then

3: v = e.twin.vertex;

4: end if

5: end for

Algoritmus 3: Algoritmus hled´an´ı dalˇs´ıch krajn´ıch vrchol˚u nov´e stˇeny

(20)

Algoritmus 4 popisuje postup pˇri sn´ıˇzen´ı poˇctu vrchol˚u tvoˇr´ıc´ıch novou stˇenu, kter´y je zaloˇzen na v´ypoˇctu jednotliv´ych smˇernic vrchol˚u jdouc´ıch za sebou. Pokud je testovan´y vrchol vrcholem, kter´y nem˚uˇze b´yt odstranˇen, je pˇrid´an do filtrovan´eho seznamu hned.

V opaˇcn´em pˇr´ıpadˇe se vypoˇcte smˇernice hrany pˇred a za testovan´ym vrcholem. Testovan´y vrchol je pˇrid´an, pokud je vzd´alenost mezi souˇradnicemi smˇernic vˇetˇs´ı neˇz urˇcen´a mez.

Star´e stˇeny se nahrad´ı novou stˇenou, odstran´ı se jiˇz nepouˇz´ıvan´e hrany a vrcholy, kter´e leˇz´ı uvnitˇr nov´e stˇeny.

Obr´azek 5: Voron´eho buˇnka pˇred a po redukci stˇen

Vstup: seznam vrchol˚u v, seznam neodstraniteln´ych vrchol˚unv, pr´ah p V´ystup: redukovan´y seznam vrchol˚urv

1: Velikost seznamu vs =|v|. Na zaˇc´atek v pˇridej v[vs]. Na konec v pˇridej v[1].

2: for all i∈ h1, vs−1i do

3: if vrchol v[i] je v nv then

4: Pˇridej nakonec rv vrchol v[i]

5: else

6: Vypoˇc´ıtej smˇernici s1 (v[i−1] a v[i] ).

7: Vypoˇc´ıtej smˇernici s2 (v[i] av[i+ 1] ).

8: Normov´an´ı smˇernic s1 a s2.

9: if |s1s2|> p then

10: Pˇridej nakonec rv vrchol v[i]

11: end if

12: end if

13: end for

Algoritmus 4: Algoritmus redukce vrchol˚u nov´e stˇeny

Na obr´azku 6 jsou zobrazeny Voron´eho buˇnky pro redukci poˇctu stˇen. Urˇcitou nev´yhodou

(21)

je, ˇze okraje Voron´eho bunˇek zab´ıhaj´ı do pˇrek´aˇzek, coˇz je zp˚usobeno pouˇzit´ym postupem aproximace pˇrek´aˇzek mnoˇzinou bodu.

Obr´azek 6: Voron´eho buˇnky po redukci stˇen

Algoritmus, kter´y je pouˇzit na v´ypoˇcet pr˚useˇc´ık˚u B-spline kˇrivky a Voron´eho buˇnky, proch´az´ı kaˇzdou stˇenu buˇnky, proto je vhodn´e, aby stˇen buˇnky bylo co nejm´enˇe. Na obr´azku 7 jsou v popˇred´ı vpravo zobrazeny stˇeny mezi Voron´eho buˇnkami, kter´e vznikly z hrany a stˇeny r˚uzn´ych pˇrek´aˇzek. Tato ˇc´ast buˇnky se skl´ad´a z mal´ych a velk´ych stˇen. Slouˇcen´ı mal´ych stˇen se sousedn´ımi stˇenami s velk´ym obsahem by vedlo ke sn´ıˇzen´ı poˇctu stˇen buˇnky.

2.3 Pl´ anov´ an´ı cesty

Na seznam struktury Voron´eho bunˇek lze nahl´ıˇzet jako na orientovan´y graf s kladn´ym ohodnocen´ım hran (d´elka hrany). Pro nalezen´ı nejkratˇs´ı cesty ze startovn´ıho do c´ılov´eho vrcholu byl pouˇzit Dijkstr˚uv algoritmus [7]. V´ysledn´a napl´anovan´a cesta je pak pˇrevedena na B-spline kˇrivku, kter´a je vyuˇzita jako poˇc´ateˇcn´ı trajektorie pro optimalizaci.

2.3.1 Pˇrevod Voron´eho bunˇek pro pl´anovac´ı algoritmus

Vstupem pl´anovac´ıho algoritmu je seznam vˇsech vrchol˚u, kter´e definuj´ı stˇeny Voron´eho bunˇek ˇc´ast´ı pˇrek´aˇzek. Prvky seznamu vˇsech vrchol˚u jsou pops´any strukturou, kter´a ob-

(22)

Obr´azek 7: Nezpracovan´e stˇeny Voron´eho buˇnky

sahuje id vrcholu v seznamu, souˇradnice vrcholu a seznam v´yskytu dan´eho vrcholu v jed- notliv´ych buˇnk´ach a id tohoto vrcholu v konkr´etn´ı Voron´eho buˇnce. Identifik´ator vrcholu v konkr´etn´ı buˇnce je k´odov´an pomoc´ı vztahu

id=ic·1000000 +iv, (5)

kde ic je id Voron´eho buˇnky a iv je id vrcholu v r´amci Voron´eho buˇnky. Vztah (5) klade omezen´ı na poˇcet vrchol˚u v jedn´e buˇnce, kter´y nem˚uˇze b´yt vetˇs´ı jak jeden milion, protoˇze by pak negeneroval jednoznaˇcn´e id.

Postup vytv´aˇren´ı seznamu vrchol˚u pro pl´anovaˇc popisuje algoritmus 5. Na ˇr´adc´ıch 1 aˇz 6 se vytv´aˇr´ı seznam vˇsech vrchol˚u, kter´e tvoˇr´ı Voron´eho buˇnky. Na ˇr´adc´ıch 7 aˇz 13 se urˇc´ı v´yskyty jednotliv´ych vrchol˚u ve vˇsech buˇnk´ach. Na ˇr´adku 16 se vytv´aˇr´ı poloˇzkan seznamu vˇsech vrchol˚u sv, do kter´e se pˇridaj´ı ´udaje o souˇradnic´ıch vrcholu a seznam v´yskyt˚u z k.

Na ˇr´adku 18 se ze seznamuspodstan´ı prvky, kter´e jsou v seznamu v´yskyt˚u prvkun. T´ımto postupem je zajiˇstˇeno, ˇze v seznam sv budou vˇsechny vrcholy pouze jednou.

Napl´anovan´a cesta nesm´ı proch´azet pˇrek´aˇzkami, k tomuto ´uˇcelu byly oznaˇceny vˇsechny hrany, kter´e m´ıˇr´ı z pˇrek´aˇzky nebo do pˇrek´aˇzky. Pˇri hled´an´ı tˇechto hran se vyuˇzilo faktu, ˇ

ze tyto hrany zaˇc´ınaj´ı, respektive konˇc´ı, bl´ızko vrchol˚u pˇrek´aˇzek. V seznamu vˇsech vrchol˚u se najdou vrcholy, kter´e jsou dan´emu vrcholu pˇrek´aˇzky nejbl´ıˇze. Pro tyto vrcholy se urˇc´ı hrany, kter´ym se nastav´ı logick´y pˇr´ıznak.

Logick´y pˇr´ıznak kolize je tak´e nastaven hran´am, kter´e leˇz´ı v ohraniˇcen´ı cel´e mapy pˇrek´aˇzek nebo do nˇeho smˇeˇruj´ı. Nejprve se urˇc´ı stˇeny Voron´eho bunˇek, kter´e vytv´aˇr´ı hranici s ohraniˇcen´ım. Hran´am, kter´e zaˇc´ınaj´ı,respektive konˇc´ı, ve vrcholech tˇechto stˇen se opˇet

(23)

Vstup: seznam Voron´eho bunˇek sc

V´ystup: seznam vˇsech vrchol˚u sv ze seznamu Voron´eho bunˇek sc

1: for all Voron´eho buˇnkub zsc do

2: for all Vrchol v ze seznamu vrchol˚u buˇnky b do

3: Vytvoˇr poloˇzku seznamu sp jednotliv´ych vrchol˚u v.

4: Pˇridej poloˇzku do seznamu sp.

5: end for

6: end for

7: for all Poloˇzku s1 seznamu sp do

8: for all Poloˇzkus2 seznamusp do

9: if |s1s2|< mez then

10: Pˇridej poloˇzce s1 do seznamu v´yskytu identifik´ator s2.

11: end if

12: end for

13: end for

14: while sp nen´ı pr´azdn´y do

15: Vezmi posledn´ı prvek k z sp.

16: Vytvoˇr nov´y prvekn.

17: Do n pˇridej seznam v´yskyt˚u z k.

18: Odstraˇn z sp prvky, ve kter´ych se vyskytujen.

19: Pˇridejn do seznamu sv.

20: end while

Algoritmus 5: Algoritmus vytvoˇren´ı seznamu vrchol˚u pro pl´anovaˇc

nastav´ı pˇr´ıznak kolize. Tato ´uprava zajist´ı, ˇze napl´anovan´a cesta nevede po ohraniˇcen´ı cel´e mapy.

Algoritmus 6 popisuje Dijkstr˚uv algoritmus, kter´y slouˇz´ı k nalezen´ı nejkratˇs´ı cesty.

Na zaˇc´atku algoritmu 6 se vytvoˇr´ı prioritn´ı halda, kter´a m´a na zaˇc´atku vrchol s nejmenˇs´ı vzd´alenost´ı od startu. Pˇri inicializaci se vˇsem vrchol˚um nastav´ı vzd´alenost na nekoneˇcno.

Seznam pˇredku prev slouˇz´ı ke zpˇetn´emu urˇcen´ı nalezen´e cesty. Startovn´ı vrchol m´a pˇred- ka −1, coˇz je vyuˇzito pro ukonˇcen´ı zpˇetn´eho hled´an´ı cesty. V kaˇzd´em kroku se odebere jeden vrchol v prioritn´ı haldˇe, coˇz zajiˇst’uje koneˇcnost Dijkstrova algoritmu. Na ˇr´adku 10 je poˇc´ıt´ana nov´a vzd´alenost expandovan´eho vrcholu, kter´a vznikne seˇcten´ım dosavadn´ı vzd´alenosti expandovan´eho vrcholu a vzd´alenost´ı mezi expandovan´ym vrcholem a jeho po- tomkem. Pokud je nov´a vzd´alenost menˇs´ı jak vzd´alenost, kterou m´a potomek, tak se po-

(24)

Vstup: startovn´ı vrchols, c´ılov´y vrcholc, seznam vrchol˚u sv, seznam Voron´eho bunˇek sc

V´ystup: seznam vrchol˚u cestysvc

1: Vytvoˇr prioritn´ı haldu h seznamu sv.

2: Inicializuj prioritn´ı fronty, seznam˚u vzd´alenost´ıdist a pˇredkuprev.

3: dist[start] = 0; h.update(start, 0)

4: repeat

5: vrcholv s nejmenˇs´ı vzd´alenost´ı z h

6: Odstraˇnv z h.

7: if v! =cthen

8: Expanduj vrchol v do seznamu ex.

9: for all Poloˇzku ex0 seznamu ex do

10: vzd´alenostalt=dist[v] +|v ex0|

11: if alt < dist[ex0] then

12: dist[ex0] =alt

13: prev[ex0] =v

14: h.update(ex0, alt)

15: end if

16: end for

17: else

18: Ukonˇci vyhled´av´an´ı.

19: end if

20: until h nen´ı pr´azdn´eor c==v

21: Do seznamu svc pˇridej na zaˇc´atek c´ılov´y vrcholc.

22: u=prev[c]

23: while u! =−1do

24: Pˇrideju na zaˇc´atek seznamusvc

25: u=prev[u]

26: end while

Algoritmus 6: Dijkstr˚uv algoritmus

tomkovi nastav´ı nov´a vzd´alenost, expandovan´y vrchol jako rodiˇc a aktualizuje se hodnota vzd´alenosti potomka v prioritn´ı haldˇe.

Algoritmus 7 popisuje postup expanze vrcholu, kter´y vrac´ı seznam vrchol˚u potomk˚u.

Seznam Voron´eho bunˇek slouˇz´ı k filtraci pˇrechodu, kter´e by vedly po kolizn´ı hranˇe z ex-

(25)

pandovan´eho vrcholu do vrcholu potomka.

Vstup: expandovan´y vrchol ev, seznam vrchol˚u sv, seznam Voron´eho bunˇeksc V´ystup: seznam potomk˚u sp

1: Vezmi seznam v´yskytu vrchol˚usvv vrcholuev z sv.

2: for all poloˇzku ex0 seznamu svv do

3: Vezmi seznam hran h vrcholuex0.

4: for all Poloˇzkuh0 seznamu h do

5: if h0.twin nesmˇeˇruje do pˇrek´aˇzky then

6: Pˇridejh0.twin.vrchol do pomocn´eho seznamu psv

7: end if

8: end for

9: end for

10: for all poloˇzku psv0 seznamu psv do

11: Pˇridej do seznamusp vrchol z sv, kter´y odpov´ıd´a vrcholu psv0.

12: end for

13: Odstraˇn duplicitn´ı vrcholy v sp

Algoritmus 7: Expanze vrcholu pro Dijkstr˚uv algoritmus

Na obr´azku 8 je zobrazen v´ysledek pl´anov´an´ı pro mapu se dvˇema pˇrek´aˇzkami na vrcho- lech Voron´eho bunˇek. Zelen´a kuliˇcka oznaˇcuje startovn´ı vrchol a ˇcerven´a kuliˇcka oznaˇcuje c´ılov´y vrchol.

V dalˇs´ı f´azi se pˇrevede napl´anovan´a cesta do B-spline kˇrivky, kter´a se n´aslednˇe podle diskutovan´ych poˇzadavk˚u optimalizuje.

2.4 Popis trajektorie

V´ysledn´a trajektorie je reprezentov´ana pomoc´ı B-spline kˇrivky, jej´ıˇz ˇc´asti tvoˇr´ı Coonsovy kubiky. Coonsova kubika je kˇrivka definovan´a pˇredpisem

C(t) = C0(t)P0+C1(t)P1+C2(t)P2+C3(t)P3, t∈ h0,1i, (6)

(26)

Obr´azek 8: Nejkratˇs´ı cesta vygenerovan´a pl´anovaˇcem

kde P0, P1, P2 a P3 jsou ˇr´ıd´ıc´ı body a C0, C1,C2 a C3 jsou Coonsovy polynomy C0(t) = 1

6(1−t)3 C1(t) = 1

6(3t3−6t2+ 4) C2(t) = 1

6(−3t3+ 3t2+ 3t+ 1) (7)

C3(t) = 1 6t3.

Poloha poˇc´ateˇcn´ıho bodu kˇrivky leˇz´ı v antitˇeˇziˇsti troj´uheln´ıkuP0P1P2 a poloha koncov´eho bodu v antitˇeˇziˇsti troj´uheln´ıku P1P2P3.

Coons˚uv kubick´y B-spline je zad´an ˇr´ıd´ıc´ımi bodyP0,P1, ...,Pn, kter´e tvoˇr´ın−2 Coonsov´ych kubik. Pˇr´ıklad B-spline kˇrivky, kter´a je sloˇzen´a z nˇekolika kubik, je na obr´azku 9. D˚uleˇzitou vlastnost´ı B-spline kˇrivky je, ˇze zmˇena souˇradnic jednoho ˇr´ıd´ıc´ıho bodu zmˇen´ı pouze ku- biky, kde se ˇr´ıd´ıc´ı bod vyskytuje. Napojen´ı kubik a samotn´e kubiky maj´ı spojitou derivaci druh´eho ˇr´adu. [8]

(27)

−15

−10

−5 0

5 10

15 20

25 −15

−10

−5 0

5

10 15 0

5 10

P5

P2

y [m]

P1

P3

P4

x [m]

P0

z [m]

Obr´azek 9: B-spline kˇrivka sloˇzen´a ze tˇr´ı Coonsov´ych kubik

2.4.1 Pˇrevod napl´anovan´e cesty na B-spline kˇrivku

Poˇcet vrchol˚u cesty na obr´azku 8 je 27, pokud by se pouˇzily vˇsechny vrcholy cesty, B-spline kˇrivka by zbyteˇcnˇe pˇresnˇe sledovala napl´anovanou cestu. Algoritmus 8 popisuje postup pˇrevodu cesty na B-spline kˇrivku. Na ˇr´adku 1 se generuj´ı souˇradnice ˇr´ıd´ıc´ıho bodu, kter´y se mus´ı nal´ezat v bl´ızk´em okol´ı dan´eho vrcholu napl´anovan´e cesty. Toto okol´ı je definovan´e konstantou. Mal´e n´ahodn´e posunut´ı je d˚uleˇzit´e pro hled´an´ı poˇc´ateˇcn´ı Voron´eho buˇnky v algoritmu pro v´ypoˇcet bezpeˇcnostn´ı funkce. Dalˇs´ı d˚uvod pro posunut´ı je, ˇze ge- nerovan´a cesta by leˇzela v bl´ızkosti rozhran´ı mezi dvˇema Voron´eho buˇnkami, coˇz by vedlo na k velk´emu poˇctu pr˚useˇc´ık˚u B-spline kˇrivky s Voron´eho buˇnkami. Na ˇr´adku 2 se pˇrid´av´a vygenerovan´y ˇr´ıd´ıc´ı bod do seznamu ˇr´ıd´ıc´ıch bod˚u, kter´e definuj´ı B-spline kˇrivku. Startovn´ı a c´ılov´y ˇr´ıd´ıc´ı bod se pˇrid´av´a tˇrikr´at z d˚uvod˚u zachov´an´ı startovn´ı a c´ılov´e pozice. Sn´ıˇzen´ı poˇctu ˇr´ıd´ıc´ıch bod˚u oproti poˇctu vrchol˚u napl´anovan´e cesty se dˇeje tak, ˇze se pˇrid´av´a kaˇzd´y N-t´y n´ahodnˇe vygenerovan´y bod v bl´ızkosti N-t´eho vrcholu cesty, viz ˇr´adek 3 a 4.

Na obr´azku 10 je fialovˇe zobrazena B-spline kˇrivka, kter´a je zad´ana deseti ˇr´ıd´ıc´ımi body.

(28)

Vstup: napl´anovan´a cesta nc

V´ystup: ˇr´ıd´ıc´ı body B-spline kˇrivky bs

1: Vygeneruj n´ahodnˇe bodsb v epsilonov´em okol´ı startovn´ıho vrcholu.

2: Pˇridej do seznamu ˇr´ıd´ıc´ıch bod˚u bstˇrikr´at bodsb.

3: for all i∈ h1; |nc−1|ido

4: if mod (i, N) == 0 then

5: Vygeneruj n´ahodnˇe bod b v epsilonov´em okol´ınc[i] vrcholu.

6: Pˇridej do seznamu ˇr´ıd´ıc´ıch bod˚u bsbod b.

7: end if

8: end for

9: Vygeneruj n´ahodnˇe bodcb v epsilonov´em okol´ı c´ılov´eho vrcholu.

10: Pˇridej do seznamu ˇr´ıd´ıc´ıch bod˚u bstˇrikr´at bodcb.

Algoritmus 8: Pˇrevod napl´anovan´e cesty na B-spline kˇrivku

Obr´azek 10: B-spline kˇrivka z napl´anovan´e cesty

(29)

2.5 Optimalizace trajektorie

Dalˇs´ım krokem je optimalizace vygenerovan´e poˇc´ateˇcn´ı trajektorie. Na v´yslednou tra- jektorii jsou poˇzadavky, aby vzd´alenost mezi pˇrek´aˇzkou a napl´anovanou trajektori´ı byla maxim´aln´ı a energetick´a n´aroˇcnost byla minim´aln´ı. Proces optimalizace je definov´an ve formˇe

x∈minRn

f(x), (8)

kde x ∈ Rn a f : Rn → R. f(x) je neline´arn´ı multidimenzion´aln´ı hodnot´ıc´ı funkce. Pro hled´an´ı minima neomezen´e multidimenzion´aln´ı hodnot´ıc´ı funkce je pouˇzita tzv. metoda pˇr´ım´eho vyhled´av´an´ı

”direct search method“ [9]. Metoda pˇr´ım´eho vyhled´av´an´ı pouze vyˇza- duje spojitou hodnot´ıc´ı funkci. Metoda nepotˇrebuje derivaci ani odhad derivace hodnot´ıc´ı funkce a snadno se implementuje.

V n´asleduj´ıc´ıch podkapitol´ach je pops´an postup v´ypoˇctu hodnot´ıc´ı funkce na z´akladˇe rovnic z [3], kter´e jsou rozˇs´ıˇreny pro 3D prostˇred´ı pˇrek´aˇzek.

2.5.1 Bezpeˇcnostn´ı funkce

Bezpeˇcnostn´ı funkce zohledˇnuje poˇzadavek na maxim´aln´ı vzd´alenost trajektorie a okol- n´ıch pˇrek´aˇzek, viz rovnice (9), pˇrevzato z [3].

FB =

N

X

i=1

X

b∈Cesta∩Bi

χ(d(b, Bi)) (9)

V rovnici (9) jeN poˇcet Voron´eho bunˇek,d(b, Bi) je vzd´alenost bodu trajektorie od pˇre- k´aˇzky ve Voron´eho buˇnce. Funkceχhodnot´ı bl´ızkost trajektorie k pˇrek´aˇzce. Funkce, podle kter´e se poˇc´ıt´a bezpeˇcnost ˇc´asti trajektorie j, kter´a je v buˇnce i, je definov´ana

FBij(P~) =

K

X

k=1

FBijk(P~), (10)

kdeP~ je vektor ˇr´ıd´ıc´ıch bod˚u B-spline kˇrivky, K je poˇcet souvisl´ych ˇc´ast´ı B-spline kˇrivky, kter´e jsou uvnitˇr Voron´eho buˇnky a FBijk(P~) je definov´ano rovnic´ı (11).

FBijk(P~) = Z

Cj

χ(d(Cj(P , t), B~ i))dt, t∈ hτ1(P , i, j, k), τ~ 2(P , i, j, k)i~ (11) V rovnici (11) je τ1(P , i, j, k)~ k-t´y poˇc´atek ˇc´asti souvisl´eho pr˚uniku j-t´e ˇc´asti cesty si-tou buˇnkou,τ2(P , i, j, k)~ k-t´y konec ˇc´asti souvisl´eho pr˚uniku j-t´e ˇc´asti cesty s i-tou buˇnkou a

(30)

Cj(P , t) vyjadˇruje body B-spline kˇrivky v z´~ avislosti na ˇr´ıd´ıc´ıch bodech a promˇenn´e t. Pro dalˇs´ı v´ypoˇcty je vhodn´e rovnici (11) upravit do tvaru

FBijk(P~) =

Z τ2(P ,i,j,k)~

τ1(P ,i,j,k)~

χ(d(Cj(P , t), B~ i)) r

(∂Cjx

∂t (P , t))~ 2+ (∂Cjy

∂t (P , t))~ 2+ (∂Cjz

∂t (P , t))~ 2dt.

(12)

V n´asleduj´ıc´ıch podkapitol´ach jsou pops´any jednotliv´e funkce z rovnice (12).

2.5.2 Funkce χ

Funkce χ m´a za ´ukol penalizovat bl´ızkost trajektorie od pˇrek´aˇzek, na obr´azku 11 je zobrazena tato funkce, kter´a m´a funkˇcn´ı pˇredpis

χ(v) = 1000e−20v, (13)

kde v je vzd´alenost.

0 0.5 1 1.5

0 200 400 600 800 1000

v [m]

χ

Obr´azek 11: Pr˚ubˇeh funkceχ

2.5.3 Funkce τ

Krajn´ı body jednotliv´ych ˇc´ast´ı funkce τ jsou definov´any pr˚useˇc´ıky B-spline kˇrivky se stˇenami Voron´eho bunˇek. Pr˚useˇc´ıky jsou z´ısk´any ˇreˇsen´ım soustavy

Cjx(P , t) =~ X+uxs+vxr t, s, r∈ h0,1i (14) Cjy(P , t) =~ Y +uys+vyr (15) Cjz(P , t) =~ Z +uzs+vzr, (16)

(31)

kde ~u = (ux, uy, uz) a ~v = (vx, vy, vz) jsou line´arnˇe nez´avisl´e smˇerov´e vektory stˇeny a (X, Y, Z) je bod stˇeny.

Dalˇs´ımi ´upravami z´ısk´ame kubickou rovnici, kter´a se ˇreˇs´ı pomoc´ı Cardanov´ych vzorc˚u [10]. Pˇr´ıpustn´a ˇreˇsen´ı jsou takov´a, ˇze t ∈ h0,1i a z´aroveˇn pr˚useˇc´ık mus´ı leˇzet uvnitˇr stˇeny Voron´eho buˇnky. K urˇcen´ı, zda pr˚useˇc´ık leˇz´ı uvnitˇr stˇeny, je pouˇzita metoda

”Ray casting“, kter´a poˇc´ıt´a, kolikr´at protne polopˇr´ımka z testovan´eho bodu hranice polygonu. Pokud je poˇcet pr˚useˇc´ık˚u polopˇr´ımky a hranice polygonu lich´y, pr˚useˇc´ık leˇz´ı uvnitˇr.

Na obr´azku 12 je uk´azka nalezen´ych pr˚useˇc´ık˚u. Z tohoto obr´azku je tak´e vidˇet, ˇze v t´eto Voron´eho buˇnce B-spline kˇrivka proch´az´ı tˇremi stˇenami a funkceτ m´a dvˇe souvisl´e ˇc´asti.

t1

t2 t3

t4

Obr´azek 12: Pr˚useˇc´ıky Voron´eho buˇnky a B-spline kˇrivky

2.5.4 Funkce vzd´alenosti od vrcholu pˇrek´aˇzky

Kdyˇz B-spline kˇrivka proch´az´ı Voron´eho buˇnkou, kter´a vznikla z vrcholu pˇrek´aˇzky, poˇc´ıt´a se vzd´alenost dvou bod˚u, pˇriˇcemˇz prvn´ı bod je d´an B-spline kˇrivkou a druh´y bod je zad´an souˇradnicemi vrcholu (X, Y, Z) v pˇrek´aˇzce, viz rovnice (17).

d(Cj(P , t), B~ i) = q

(Cjx(P , t) +~ X)2+ (Cjy(P , t)~ −Y)2+ (Cjz(P , t)~ −Z)2 (17) 2.5.5 Funkce vzd´alenosti od hrany pˇrek´aˇzky

Pokud B-spline kˇrivka proch´az´ı Voron´eho buˇnkou, kter´a vznikla z hrany pˇrek´aˇzky, poˇc´ıt´a se vzd´alenost bodu a pˇr´ımky, kter´a je zad´ana poˇc´ateˇcn´ım bodem A = (Ax, Ay, Az) a

(32)

smˇernic´ı~u = (ux, uy, uz), pˇriˇcemˇz bod je d´an B-spline kˇrivkou. Pˇri v´ypoˇctu vzd´alenosti se vyuˇzije faktu, ˇze norm´ala roviny, na kter´e leˇz´ı spojnice bod˚u hrany a B-spline kˇrivky, je stejn´a jako smˇerov´y vektor zadan´e hrany. Vzd´alenost je vypoˇc´ıt´ana podle vztahu

d(Cj(P , t), B~ i) = p

rx+ry +rz, (18)

kderx,ry arz jsou kvadr´aty rozd´ıl˚u jednotliv´ych sloˇzek bodu na hranˇe a na B-spline kˇrivce, konkr´etnˇe

rx =

Ax− ux(uxAX +uyAy +uzAz−uxCjx(t)−uyCjy(t)−uzCjz(t))

u2x+u2y+u2z −Cjx(t) 2

ry =

Ay− uy(uxAX +uyAy+uzAz−uxCjx(t)−uyCjy(t)−uzCjz(t))

u2x+u2y+u2z −Cjy(t) 2

(19) rz =

Az− uz(uxAX +uyAy +uzAz−uxCjx(t)−uyCjy(t)−uzCjz(t))

u2x+u2y +u2z −Cjz(t) 2

.

2.5.6 Funkce vzd´alenosti od stˇeny pˇrek´aˇzky

Pokud B-spline kˇrivka proch´az´ı Voron´eho buˇnkou, kter´a vznikla ze stˇeny pˇrek´aˇzky, poˇc´ıt´a se vzd´alenost bodu, kter´y je d´an B-spline kˇrivkou, a stˇeny zadan´e norm´alov´ym vektorem~n. Vzd´alenost bodu B-spline kˇrivky a roviny lze poˇc´ıtat jako absolutn´ı hodnotu kolm´eho pr˚umˇetu vektoru bodu B-spline kˇrivky a libovoln´eho bodu z roviny do norm´aly roviny

d(Cj(P , t), B~ i) =

Cj(P , t)~ −A

·~n

k~nk , (20)

kde~n je norm´alov´y vektor roviny a A je libovoln´y bod roviny [11].

2.5.7 Algoritmus v´ypoˇctu bezpeˇcnostn´ı funkce

Integr´al v rovnici (12) je vypoˇc´ıt´an numerickou metodou, konkr´etnˇe Rombergovou me- todou pro numerick´y v´ypoˇcet integr´alu I =Rb

a f(x)dx [12].

Navrˇzen´y algoritmus 9 v´ypoˇctu bezpeˇcnostn´ı funkce je zaloˇzen na principu prohled´av´an´ı

(33)

do ˇs´ıˇrky.

Vstup: B-spline kˇrivka C, seznam Voron´eho bunˇek sc V´ystup: Hodnota bezpeˇcnostn´ı funkce FB

1: Vymaˇz seznam open a close.

2: Urˇci prvn´ı buˇnkuf c, kde se nach´az´ı poˇc´atek B-spline C.

3: Pˇridej prvn´ı buˇnku f c na konec seznamu open.

4: FB= 0

5: while open nen´ı pr´azdn´y do

6: Vezmi prvn´ı buˇnku k z open.

7: Odstraˇn prvn´ı buˇnku z open.

8: Odstraˇn vˇsechny prvky seznamu pr˚useˇc´ık˚up.

9: Odstraˇn vˇsechny prvky seznamu sousedn´ıch bunˇek soused.

10: for all stˇenuf z buˇnky k do

11: if stˇena f m´a pr˚useˇc´ık s B-spline C then

12: Pˇridej pr˚useˇc´ıky do seznamu pr˚useˇc´ık˚up.

13: Pˇridej sousedn´ı buˇnky pr˚useˇc´ık˚u do pomocn´eho seznamu sousedn´ıch bunˇek soused.

14: end if

15: end for

16: for all buˇnku cs ze seznamu soused do

17: if buˇnka cs nen´ı v close and buˇnka cs nen´ı v open then

18: Pˇridej buˇnkucs na konec seznamu open.

19: end if

20: end for

21: Vypoˇcti hodnotu bezpeˇcnostn´ı funkce Fk buˇnky k pro pr˚useˇc´ıky p.

22: FB =FB+Fk

23: end while

Algoritmus 9: Algoritmus v´ypoˇctu bezpeˇcnostn´ı funkce

Navrˇzen´y algoritmus poˇzaduje na ˇr´adce 2, aby prvn´ı pˇridan´a buˇnka do seznamu open mˇela alespoˇn jeden pr˚useˇc´ık s B-spline kˇrivkou. Pro vˇsechny buˇnky se na zaˇc´atku spoˇc´ıt´a vzd´alenost jejich ˇc´ast´ı pˇrek´aˇzek od poˇc´ateˇcn´ıho bodu B-spline kˇrivky. Buˇnka s nejmenˇs´ı vzd´alenost´ı se pˇrid´a do seznamu open jako prvn´ı. Tento postup lze vylepˇsit omezen´ım poˇctu testovan´ych bunˇek, protoˇze ze seznamu vˇsech vrchol˚u Voron´eho bunˇek je moˇzn´e zjistit, ve kter´ych buˇnk´ach se startovn´ı vrchol trajektorie nach´azel pˇred mal´ym n´ahodn´ym posunut´ım.

(34)

Postup v´ypoˇctu pr˚useˇc´ıku stˇeny buˇnky a B-spline kˇrivky, viz ˇr´adek 11, popisuje algoritmus 10.

Vstup: B-spline kˇrivka C, Voron´eho buˇnka vc, stˇena f z vc, V´ystup: seznam pr˚useˇc´ık˚usp, seznam sousedn´ıch bunˇek soused

1: for all ˇc´astj zC do

2: Vypoˇcti koeficienty kubick´e rovnice r.

3: Vyˇreˇs kubickou rovnicir a ˇreˇsen´ı dej do seznamus.

4: for allˇreˇsen´ıs0 z s do

5: if s0 ∈ h0,1i and souˇradnice vrcholu leˇz´ı uvnitˇr stˇeny f then

6: Vytvoˇr pr˚useˇc´ık a pˇridej ho do seznamu pr˚useˇc´ık˚usp.

7: Vezmi sousedn´ı buˇnku, stˇeny f a pˇridej ji do seznamu soused.

8: end if

9: end for

10: end for

Algoritmus 10: Algoritmus v´ypoˇctu pr˚useˇc´ık˚u Voron´eho bunˇek a B-spline kˇrivky Na ˇr´adku 21 algoritmu 9 se prov´ad´ı v´ypoˇcet rovnice 12, seznam vˇsech pr˚useˇc´ıku je nejdˇr´ıve doplnˇen na sud´y poˇcet pr˚useˇc´ık˚u. Pokud seznam pr˚useˇc´ıku obsahuje lich´y poˇcet, pak se pˇrid´a pr˚useˇc´ık reprezentuj´ıc´ı zaˇc´atek, respektive konec, B-spline kˇrivky, jestliˇze zaˇc´atek, respektive konec, B-spline kˇrivky leˇz´ı v pr´avˇe poˇc´ıtan´e Voron´eho buˇnce.

Takto doplnˇen´y seznam se sud´ym poˇctem pr˚useˇc´ık˚u je vzestupnˇe seˇrazen podle j a t, d´ıky tomu se integraˇcn´ı meze berou po dvojic´ıch. Dvojicet1 t2 na obr´azku 12 urˇcuje jednu souvislou komponentu v buˇnce a dvojicet3 t4 dalˇs´ı. Z obr´azku 12 je tak´e zˇrejm´e, ˇze souvisl´e komponenty nemus´ı konˇcit ve stejn´e ˇc´asti B-spline kˇrivky v jak´e zaˇcaly. V tomto pˇr´ıpadˇe je pak pro numerickou integraci souvisl´a komponenta rozdˇelena na menˇs´ı intervaly, kter´e odpov´ıdaj´ı ˇc´astem kˇrivky. Uvnitˇr pˇrek´aˇzek je nastavena vzd´alenost na nulovou hodnotu, coˇz zajiˇst’uje pˇr´ıpustnost optimalizovan´e cesty.

2.5.8 Kombinace d´elky a bezpeˇcnosti

Pˇri optimalizaci trajektorie jsou kladeny poˇzadavky na bezpeˇcnost a na d´elku hladk´e trajektorie. Rovnice (21) v´aˇz´ı oba protich˚udn´e poˇzadavky,

F(P~) =αFB(P~) + (1−α)FD(P~), (21)

(35)

kde α∈ h0,1i je v´aha a FD(P~) je d´elka B-spline kˇrivky, kter´a se spoˇc´ıt´a podle

FD(P~) =

M

X

j=1

Z 1

0

s

∂Cjx

∂t (P , t)~ 2

+

∂Cjy

∂t (P , t)~ 2

+

∂Cjz

∂t (P , t)~ 2

dt, (22) kde M je poˇcet Coonsov´ych kubik tvoˇr´ıc´ıch B-spline kˇrivku.

2.6 Zhodnocen´ı navrˇ zen´ eho algoritmu

Metoda pˇr´ım´eho vyhled´av´an´ı obvykle konverguje pomaleji neˇz metody numerick´e opti- malizace, kter´e vyuˇz´ıvaj´ı znalost derivace hodnot´ıc´ı funkce. Pokud by se odvodil gradient bezpeˇcnostn´ı funkce podobnˇe, jak tomu je v [3], doba bˇehu optimalizace trajektorie by se zkr´atila.

Definovan´e ohraniˇcen´ı mapy pˇrek´aˇzek pouze poskytuje ohraniˇcen´ı prostoru pro v´ypoˇcet Voron´eho bunˇek, aby se na nˇej dalo nahl´ıˇzet napˇr´ıklad jako na stˇenu m´ıstnosti, kde jsou pˇrek´aˇzky um´ıstˇen´e uvnitˇr, musely by se jednotliv´e stˇeny ohraniˇcen´ı zaˇradit do seznamu pˇrek´aˇzek. Navrˇzen´y algoritmus pˇredpokl´ad´a pouze jednobodov´eho robota. V [3] je uve- den postup, jak pˇrev´est polygon´aln´ıho robota na jednobodov´e voz´ıtko. Metoda vyuˇz´ıv´a k pˇrevodu nˇekolik bod˚u na okraji robota.

Popsan´y pˇrevod napl´anovan´e cesty na B-spline kˇrivku m˚uˇze vytvoˇrit nepˇr´ıpustnou cestu pˇri pouˇzit´ı n´ızk´eho poˇctu ˇr´ıd´ıc´ıch bod˚u. Tento probl´em lze vyˇreˇsit pouˇzit´ım postupu, kter´y nam´ısto pˇrid´an´ı kaˇzd´ehoN-t´eho bodu bude sledovat smˇer cesty a ten respektovat, tj. rychl´e zmˇeny napl´anovan´e cesty budou pops´any v´ıce body neˇz rovn´e ´useky.

Uveden´a aproximace pˇrek´aˇzek body funguje korektnˇe, pokud vzd´alenost mezi nˇejak´ymi dvˇema pˇrek´aˇzkami nen´ı menˇs´ı neˇz nejmenˇs´ı hrana pˇrek´aˇzky v mapˇe. D˚usledkem toho Voron´eho buˇnky zasahuj´ı do ˇc´ast´ı pˇrek´aˇzek, kde m´a figurovat jin´a buˇnka. Tento nedostatek by ˇslo odstranit pouˇzit´ım postupu, kter´y by zohlednil velikost jednotliv´ych pˇrek´aˇzek a jejich vz´ajemnou polohu.

(36)

3 Implementace

Navrˇzen´y program lze prim´arnˇe rozdˇelit na v´ypoˇcetn´ı a vizualizaˇcn´ı ˇc´ast. Implementace obou ˇc´ast´ı je provedena v programovac´ım jazyku C++.

Program je ˇclenˇen do jednotliv´ych tˇr´ıd, kter´e reprezentuj´ı jednotliv´e funkˇcn´ı bloky, jako jsou: reprezentace mapy, v´ypoˇcet Voron´eho bunˇek, pl´anovaˇc na vrcholech Voron´eho bunˇek, reprezentace B-spline kˇrivky a jej´ı optimalizace. V´ypoˇcet Voron´eho bunˇek je realizov´an pomoc´ı knihovny Voro++, kter´a je pops´ana v kapitole 3.2. Optimalizace trajektorie je provedena knihovnou OPT++, kter´a je pops´ana v kapitole 3.3.

Jiˇz bˇehem v´yvoje se objevila nutnost zobrazit v´ysledky jednotliv´ych krok˚u. Pro vizuali- zaci byla zvolena knihovna VTK, kter´a je pops´ana v kapitole 3.1. Tato knihovna byla vybr´ana, protoˇze je velmi dobˇre zdokumentovan´a v podobˇe mnoha pˇr´ıklad˚u na webu a v knize [13]. Knihovna poskytuje struktury pro ukl´ad´an´ı dat a implementaci algoritm˚u poˇc´ıtaˇcov´e grafiky. Hlavn´ı struktura, kterou se pˇred´av´a vˇetˇsina dat pro vizualizaci, je vtkP olyData, kter´a obsahuje seznam bod˚u, vrchol˚u, ´useˇcek, polygon˚u, troj´uheln´ık˚u a pˇr´ıdavn´e informace o jednotliv´ych seznamech.

3.1 Knihovna VTK

Knihovna VTK Visualization Toolkit je objektovˇe orientovan´a open-source knihovna pro 3D vizualizaci a zpracovan´ı dat, kter´a je poskytovan´a spoleˇcnost´ı Kitware. Knihovna VTK je implementov´ana v C++, d´ale poskytuje rozhran´ı pro Tcl, Python a Javu. VTK podporuje znaˇcnou ˇsk´alu reprezentac´ı dat, jako jsou mnoˇziny bod˚u, polygony, obr´azky a jin´e. Zpracov´an´ı dat se prov´ad´ı pomoc´ı filtr˚u, kter´e obsahuj´ı implementace algoritm˚u pro poˇc´ıtaˇcovou grafiku. Pr˚ubˇeh vizualizace lze rozdˇelit do tˇr´ı krok˚u. Prvn´ı krok je naˇcten´ı dat, dalˇs´ı krok je zpracov´an´ı dat a posledn´ı krok je zobrazen´ı dat.

Vizualizaˇcn´ı okno je vytvoˇreno pomoc´ı tˇr´ıdy vtkRenderWindow. Tomuto objektu se pˇri- ˇrazuj´ı dalˇs´ı vlastnosti, nejd˚uleˇzitˇejˇs´ı jevtkRenderer obsahuj´ıc´ı zobrazovan´y objekt avtkRen- derWindowInteractor pro interakci vizualizaˇcn´ıho okna s uˇzivatelem [13].

3.2 Knihovna Voro++

Knihovna prov´ad´ı v´ypoˇcet Voron´eho bunˇek pro kaˇzd´y zadan´y bod samostatnˇe. Vytvoˇr´ı kolem tohoto bodu Voron´eho buˇnku reprezentovanou jako mnohostˇen, kter´y bod obklopuje.

D´ale umoˇzˇnuje vytv´aˇret kontejnery, kter´e seskupuj´ı jednotliv´e body do podskupin, coˇz je

(37)

v´yhodn´e pro zvolen´y postup aproximace. Dalˇs´ı v´yhodou je, ˇze knihovna udrˇzuje informaci o okoln´ıch buˇnk´ach, kter´a je vyuˇzita pro slouˇcen´ı jednotliv´ych bunˇek. [14]

3.3 Knihovna OPT++

Knihovna OPT++ je objektovˇe orientovan´a knihovna, kter´a poskytuje algoritmy pro ne- line´arn´ı optimalizaci. Z´akladn´ı myˇslenka knihovny je m´ıt optimalizaˇcn´ı ´ulohu oddˇelenou od metody, kter´a ji ˇreˇs´ı. Knihovna rozliˇsuje optimalizaˇcn´ı ´ulohy podle dostupnosti derivac´ı hodnot´ıc´ı funkce od nult´e aˇz k druh´e derivaci.

Metody pro hled´an´ı minim´aln´ı hodnoty hodnot´ıc´ı funkce, kter´e jsou v knihovnˇe OPT++

implementovan´e, lze rozdˇelit do ˇctyˇr skupin: 1) metody pˇr´ım´eho hled´an´ı, 2) metody zobec- nˇen´ych gradient˚u, 3) metody Newtonova typu a 4) metody vnitˇrn´ıho bodu. V´ıce informac´ı lze nal´ezt v [15] a v online dokumentaci [16].

Objekt reprezentuj´ıc´ı probl´em optimalizace trajektorie nem´a dostupn´e derivace hodnot´ıc´ı funkce, proto je probl´em reprezentov´an instanc´ı tˇr´ıdy NLF0. Pˇri vytv´aˇren´ı instance tˇr´ıdy NLF0 nlp(ndim, optF unc, optInit) je ndim poˇcet re´aln´ych promˇenn´ych ve vektoru x, optF uncje ukazatel na funkci, kter´a poˇc´ıt´a hodnotu hodnot´ıc´ı funkce, aoptInitinicializuje poˇc´ateˇcn´ı hodnoty sloˇzek vektoru x. Takto sestaven´y probl´em se referenc´ı pˇred´a optima- lizaˇcn´ı metodˇe. Optimalizaci je moˇzn´e ukonˇcit podle n´asleduj´ıc´ıch podm´ınek: maxim´aln´ı poˇcet iterac´ı, maxim´aln´ı poˇcet vyhodnocen´ı hodnot´ıc´ı funkce a velikost´ı zmˇena hodnot´ıc´ı funkce v n´asleduj´ıc´ı iteraci. Z knihovny OPT++ byla pro optimalizaci pouˇzita metoda

”Parallel Direct Search (PDS) Method“. V´ysledn´e hodnoty promˇenn´ych vektoruxse z´ıskaj´ı z definovan´eho probl´emu. Optimalizace byla ukonˇcena, kdyˇz zmˇena hodnot´ıc´ı funkce v n´asleduj´ıc´ı iteraci byla menˇs´ı neˇz 0,0001.

(38)

4 Experimenty

V t´eto kapitole jsou uvedeny v´ysledky experiment˚u, kter´e byly provedeny ke zjiˇstˇen´ı vlastnost´ı navrˇzen´eho algoritmu pro r˚uzn´e hodnoty parametruαz rovnice 21. Experimenty jsou provedeny na mapˇe pˇrek´aˇzek, kter´a je zobrazena na obr´azku 13. Startovn´ı pozice je oznaˇcena zelenou koul´ı a c´ılov´a pozice je oznaˇcena ˇcervenou koul´ı. Na tomto obr´azku 13 jsou tak´e zobrazeny hrany Voron´eho bunˇek. Rozmˇery kv´adru, kter´y obklopuje mapu, jsou ve smˇeru osy x 6,45 m, ve smˇeru osy y 9,6 m a ve smˇeru osy z 4,1 m.

Obr´azek 13: Mapa pˇrek´aˇzek s napl´anovanou cestou

Napl´anovan´a cesta pomoc´ı Dijkstrova algoritmu je pˇrevedena na B-spline kˇrivku, kter´a je zobrazena na obr´azku 14. Poˇc´ateˇcn´ı bezpeˇcnost t´eto trajektorie je 125,2 a d´elka je 10,0 m.

Tyto dvˇe hodnoty lze povaˇzovat jako v´ychoz´ı pro porovn´an´ı optimalizovan´e trajektorie.

D´ale je na obr´azku 14 vidˇet, ˇze B-spline kˇrivka proch´az´ı velmi bl´ızko rohu zelen´e pˇrek´aˇzky, coˇz je nev´yhodou popsan´eho algoritmu pˇrevodu napl´anovan´e cesty na B-spline kˇrivku, viz kapitola 2.4.1. Pro mapu na obr´azku 13 bylo provedeno ˇsest simulac´ı, pˇri kter´ych se navz´ajem porovnaly v´ysledn´e trajektorie pro r˚uzn´e hodnoty parametru α. V´ysledn´e hod- noty bezpeˇcnostn´ı funkce a d´elky trajektorie jsou uvedeny v lev´e ˇc´asti tabulky 1. V prav´e ˇ

c´asti tabulky 1 jsou uvedeny v´ysledky experiment˚u pro mapu se dvˇema pˇrek´aˇzkami.

(39)

Na obr´azc´ıch 16, 17 a 18 jsou zaznamenan´e hodnoty bezpeˇcnostn´ı funkce, d´elky cesty a v´ysledn´e hodnot´ıc´ı funkce pro dan´e parametry α. Zaznamenan´e hodnoty jsou vˇzdy nej- menˇs´ı podle hodnot´ıc´ı funkce v pr˚ubˇehu optimalizace. Proces optimalizace byl ukonˇcen, kdyˇz zmˇena hodnot´ıc´ı funkce nebyla v n´asleduj´ıc´ı iteraci vˇetˇs´ı jak 0,0001.

Na obr´azku 15a je zobrazena trajektorie pro hodnotu parametru α=1,0 , coˇz znamen´a, ˇ

ze na hodnot´ıc´ı funkci m´a vliv pouze bezpeˇcnostn´ı funkce. V´ysledn´a trajektorie m´a pak nejvˇetˇs´ı vzd´alenost od pˇrek´aˇzek v mapˇe. Z pr˚ubˇehu grafu 16a je patrn´e, ˇze d´elka cesty se rychle dostane na hodnotu 15,8 m a hodnota funkce bezpeˇcnosti rychle klesne na hodnotu 3,4.

Na obr´azku 15b je zobrazena trajektorie, pˇri kter´e jsou obˇe kriteri´aln´ı funkce v´aˇzen´e stejnˇeα=0,5. Z pr˚ubˇehu grafu 16b je vidˇet, ˇze nejdˇr´ıve strmˇe kles´a hodnota bezpeˇcnostn´ı funkce, a kdyˇz se hodnoty bezpeˇcnostn´ı funkceFBa d´elky trajektorieFD pˇribliˇznˇe rovnaj´ı, zaˇcne se postupnˇe zmenˇsovat i d´elka trajektorie. Pˇredchoz´ı tvrzen´ı dokl´adaj´ı obr´azky 19. Na obr´azku 19c je d´elka trajektorie nejdelˇs´ı, na dalˇs´ıch obrazc´ıch se zmenˇsuje. U experimentu 1 a 2 pˇrevl´ad´a vliv bezpeˇcnosti nad d´elkou cesty.

Obr´azek 14: Poˇc´ateˇcn´ı trajektorie v zadan´e mapˇe

Na obr´azku 15c je zobrazena trajektorie pro α=0,05 . V´ysledn´a hodnota bezpeˇcnostn´ı funkce je o nˇeco vetˇs´ı neˇz v pˇredchoz´ıch experimentech. Vliv d´elky cesty se projevuje,

Odkazy

Související dokumenty

Student splni´l zad´ an´ı bakal´ aˇ rsk´ e pr´ ace a dle pˇ riloˇ zen´ eho dopisu jsou uˇ zivatel´ e jeho pr´ ace v´ıce neˇ z spokojeni.. Ot´ azky k

Pˇ redloˇ zen´ a diplomov´ a pr´ ace m´ a tˇ ri c´ıle: Prov´ est reˇ serˇ si literatury t´ ykaj´ıc´ı se homo- morfism˚ u graf˚ u; vytvoˇ rit prototyp

Pˇredloˇ zen´ a bakal´ aˇrsk´ a pr´ ace se zab´ yv´ a odhadov´ an´ım geometrie dvou kamer z korespondenc´ı, za situac´ı kdy se vyskytuje v´ yznamn´ e mnoˇ zstv´ı

C´ılem pˇ redloˇ zen´ e bakal´ aˇ rsk´ e pr´ ace je popis teˇ cen´ı uhl´ıkov´ eho kompozitu vhodn´ ym analytick´ ym mo- delem na z´ akladˇ e optick´ ych mˇ eˇ ren´ı

modelem ˇ s´ıˇ ren´ı z´ aˇ ren´ı v plazmatu zaloˇ zen´ em na principu raytracingu, kter´ y je v pr´ aci vyuˇ zit jednak pro modelov´ an´ı absorpce laserov´ eho svazku

Z pˇredloˇ zen´ e pr´ ace je zˇrejm´ e, ˇ ze autor splnil diplomov´ y ´ ukol, implementoval model sledov´ an´ı svazku a metodu pro v´ ypoˇ cet gradientu hustoty do

C´ılem pr´ ace bylo implementovat publikovan´ y algoritmus na uveden´ı probl´ emu s v´ aˇ zen´ ymi omezuj´ıc´ımi podm´ınkami (weighted constraint satisfaction problem,

C´ılem pˇ redloˇ zen´ e pr´ ace je n´ avrh a implementace vizualizaˇ cn´ı metody, kter´ a kombinuje obraz z barevn´ e a term´ aln´ı kamery.. Pˇ redpokl´ ad´ a se, ˇ