Plánování pohybu range-finderu pro rekonstrukci modelu
3D tělesa
Jaroslav Fojtík, Tomáš Pajdla
Abstract
Našim cílem je provedení rekonstrukci povrchu (nebo objemu) tělesa.
Snímání objemu tělesa bude uskutečňováno pomocí Range-Finderu, který je
umístěn na rameni robota. V této konfiguraci bude mít range finder 6
stupňů volnosti. Bylo by vhodné nějakým způsobem minimalizovat cenu
měření. Například se může jednat o počet měření nutných k rekonstrukci.
Za tímto účelem je vhodné naplánovat místa pro snímání jednotlivých
měření. Algoritmus plánování měřících míst vychází jednak z apriorní
informace o modelu a navíc musí zohlednit naměřené hodnoty ze všech
předchozích měření. Součástí algoritmu je metoda pro určení okamžiku
ukončení sekvence měření.
Apriorní informace obsahuje údaje o prostoru, který je dosažitelný paží
robota. Dále bude v apriorní informaci obsažena nějaká standardní
výchozí poloha paže robota, ve které robot nezavadí o těleso. Bylo by
též vhodné do apriorní znalosti zahrnout polohu stolku nebo podložky pod
těleso a všech ostatních předmětů, které nesouvisí s měřeným tělesem.
Bylo by vhodné omezit polohu tělesa na místo, ze kterého bude těleso
pozorovatelné a měřitelné range-finderem. Pokud range-finder nezjistí
přítomnost tělesa z výchozí polohy, měl by se pohybovat po předem
připravené trajektorii (tuto trajektorii lze též zahrnout do apriorní
znalosti). Pokud ani poté na žádné těleso nenarazí, bude měření
ukončeno.
Sekvence měření má být ukončena v okamžiku, kdy již další měření
nepřináší zlepšení vnitřního modelu tělesa. Z fyzikálních vlastností
range-finderu vyplývá, že některé detaily na povrchu nebudou vůbec
měřitelné. Ze snahy o co nejmenší počet měření vyplývá nutnost
ignorování některých detailů. Algoritmus by měl mít parametr: "maximální
velikost ignorovaného detailu" a podle předaného parametru se
rozhodnout, zda další měření může zlepšit model o detaily větší než
nejmenší požadované či zda nikoliv. Zde je nutno zvážit, v jakých
jednotkách takový parametr zadávat a co vlastně bude určovat. V případě
pokračování v měření bude nutno určit, do které polohy přesunout
range-finder za účelem dalšího měření.
Posledním problémem, který zbývá vyřešit je volba vnitřní reprezentace
měřeného objektu. Vnitřní reprezentace by měla umožňovat snadné
slučování dat z jednotlivých měření. Bylo by vhodné ji vytvořit též s
ohledem na požadovaný výstup z celého algoritmu. Formát výstupních dat
bude nutno též upřesnit.
Ve strojírenství se vyskytují požadavky na digitalizaci již hotových
výrobků. Je žádoucí, aby digitalizovaný model sloužil buď ke kontrole
rozměrů anebo jako podklad pro novou výrobu.
V současné době se zavádějí elektronické obchody. V nich by bylo také
velmi přínosné mít nějaké 3D snímací zařízení pro zboží nabízené
elektronickou formou. 3D model by si pak mohl každý doma prohlížet
pomocí www prohlížeče. Mohl by se na dokonce zboží dívat z různých
pohledů.
Také herní průmysl vyžaduje stále více digitalizovaných reálných objektů.
Ty jsou umísťovány do jednotlivých her.
Právě zjednodušením, zkvalitněním a zrychlením digitalizace 3D dat se zabývá zpráva, kterou
držíte v ruce. Je v ní obsažen rozbor již používaných postupů. Dále je
ukázán nový postup. Ten je založen na Range Finderu1 umístěném v paži robota.
Ve zprávě je řešeno dvourozměrné snímání v řezech s tím, že v následujícím
kroku v našem výzkumu bude provedeno zobecnění pro 3D.
Úloha zpětné rekonstrukce objemu tělesa je poměrně náročná. Proto ji
rozdělíme na jednotlivé části a budeme se podrobně věnovat každé z nich.
2.1 Omezení scény, objektů a relace objekt - scéna
V tomto oddílu diskutujme možné konfigurace scény a jednotlivých
objektů. Na volbě konfigurace závisí do jisté míry i obtížnost a typ
úlohy rekonstrukce tělesa. Je potřeba pečlivě zvážit požadavky, aby
nedošlo ke zbytečné komplikaci úlohy.
Omezující podmínky na scénu
.Scéna je omezená velikostí
Objekt musí být celý umístěn ve scéně.
Objekt může ze scény vyčnívat / senzor může vstoupit do scény.
.Scéna není omezená
Druhý případ nastává například při rekonstrukci tvaru hor, budov a
vzájemné polohy hvězd. V dalším textu jej nebudeme uvažovat.
První případ je nejběžnější v laboratorním prostředí. Řešení prvního
případu je o něco jednodušší. U prvního případu lze obecně rozlišovat
dvě modifikace. Úloha se výrazně komplikuje pokud může dojít ke kolizi
senzoru a snímaného objektu. Taková situace nastane, když může senzor
vstoupit do prostoru, který je vyhrazen pro snímanou scénu. Rozšířená
úloha zatím nebyla uspokojivě vyřešena.
Objekty, které se mohou vyskytnout ve scéně
Rozdělení objektů do kategorií podle pohybu:
.Tuhá a nehybná tělesa
.Pohyblivá tělesa
.Tělesa měnící svůj tvar
Základní úloha rekonstrukce počítá s pevnými tělesy. Pokud se těleso
pohybuje, je nutno při rekonstrukci jeho tvaru pohyb buď uvažovat a nebo
provést měření tak rychle, že je vlastní pohyb zanedbatelný. U některých
větších pohyblivých těles je možno dokonce pohybu výhodně využít (např.
pro rekonstrukci objemu jedoucího vlaku).
Úlohu je možno navíc ještě komplikovat tím, že těleso bude v čase měnit
svůj tvar (jedná se např. o snímání živých zvířat).
Pro požadavky zkoumání způsobů rekonstrukce budeme zatím uvažovat jen
první variantu tuhých a nehybných těles.
Omezení kladená na tvar objektu
Některé aplikace požadují, aby byly objekty složeny pouze z kvádrů
popřípadě z válců. Jindy je požadován pouze konvexní tvar objektu. Zatím
nebudeme klást na tvar objektu další omezení. U konkávních objektů v
takovém případě mohou nastat i případy, kdy nebude možno rekonstruovat
tvar celého objektu. Použitému algoritmu by neměly tyto situace vadit.
Další omezení se týkají nejmenších detailů, které jsou měřitelné
použitou metodou. Menší detaily budou jednoduše ignorovány.
Optické vlastnosti rekonstruovaného tělesa
.Lambertovský povrch
.Zrcadlový povrch
.Průhledná tělesa
Objem je nejčastěji rekonstruován pomocí optiky. Proto je velmi důležité
provést rozbor optických vlastností scény. Nejsnadněji jsou snímána
tělesa s Lambertovským povrchem. Za tímto účelem jsou někdy tělesa
dokonce natírána šedou barvou.
Zrcadlový odraz a průhledná tělesa velmi komplikují nároky na
vyhodnocovací algoritmus. Zatím jsem se nesetkal s algoritmem, který by
se rekonstrukcí tvaru takových těles zabýval, a proto je nebudeme v dalším
výkladu uvažovat.
Zde budou diskutovány dva základní způsoby rekonstrukce, které se od sebe
liší. Jedná se o:
.Těleso je předem známo
.Těleso není známo
V prvním případě jde o ověření tvaru tělesa. V praxi se používá
například při kontrole rozměrů hotových výrobků. U nich je znám
prostorový model a tím pádem všechny rozměry. Poloha tělesa může být buď
pevně fixována anebo algoritmus sám určí polohu tělesa na základě
naměřených dat.
Druhý příklad je o něco složitější, poněvadž není kladeno žádné
explicitní omezení na tvar tělesa. Je potřeba používat různé strategie
pro snímání částí tělesa. Obecně nelze zaručit, že všechny části tělesa
bude možno rekonstruovat. V takových případech je nutno nasnímat co
možná největší množství dat.
Pro rekonstrukci tvaru je nutno nějakým způsobem ukládat naměřená data.
Volba interní reprezentace může zásadním způsobem ovlivnit jak přesnost
tak i rychlost a kvalitu rekonstrukce.
Nejčastěji jsou používány následující reprezentace:
CAD model - vzniká jako výstup z nějakého objemového modeláře.
Triangulovaný povrch - popisuje pouze povrch těles sítí trojúhelníků.
Voxelová reprezentace - určuje v každém bodě přítomnost tělesa.
3D primitiva - mnohostěny, válce.
Analytická funkce - snaží se popsat těleso jedinou funkcí.
CAD model je vhodný pro kontrolu tvaru již známých těles. Pro
rekonstrukci objemu je používán pouze tehdy, pokud je k dispozici
knihovna pro práci s tímto modelem. Byl použit např. v práci
[].
Triangulovaný povrch2 je
nejčastější reprezentací a vyskytuje se např. u těchto autorů
[,,,]. Triangulovaný povrch se
poměrně snadno ukládá do paměti. Složité je však slučování informací z
jednotlivých pohledů a vytváření nové triangulace.
Voxelová reprezentace vypadá na první pohled jako nejjednodušší. Voxel s
hodnotou '1' bude považován za obsazený a voxel s hodnotou '0' za prázdný.
V praxi je situace o něco složitější. Některé voxely nelze vůbec vidět a
některé zatím nebyly prozkoumány senzorem.
Proto je potřeba přidat další hodnotu pro netestované voxely. Je vhodné
například schéma -1 voxel je prázdný, 0 - hodnota voxelu není známa, 1
voxel je plný.
Voxelová reprezentace má z pochopitelných důvodů problémy s objemem dat.
Proto se používá v kombinaci s některým typem komprimace například s
oktalovými-stromy.
3D objemová primitiva jsou také poměrně často využívána
[,,]. Většina reálných
těles se neskládá pouze z těchto primitiv a tato aproximace je nedokáže
věrně reprezentovat. Teoreticky by sice bylo možno primitiva libovolně
zmenšovat, ale algoritmy postavené na primitivech neumějí zpracovat tak
velké množství primitiv.
Zdálo by se velmi efektivní použít k reprezentaci tělesa analytickou
funkci. Bohužel pouze velmi jednoduchá tělesa by bylo možno popsat
relativně jednoduchou analytickou funkcí. Ostatní tvary by nebyly
popsatelné vůbec a nebo za cenu extrémně složité funkce
Objem tělesa je snímán pomocí senzoru. Téměř nikdy nemůže senzor provést
měření celého objemu naráz. Proto musí být plánováno snímání objemu z
více poloh.
0.5
Figure 1: Snímací senzor v prostoru
Na obrázku obr. 1 je ukázána konfigurace jediného senzoru v
prostoru. Jako každé pevné těleso má snímač 6 stupňů volnosti. Jedná se
o polohu x,y,z a náklony a,b,j. Každý pohled je tedy
charakterizován 6 souřadnicemi.
Některé senzory mají navíc zdroj světla (nebo signálu). Pokud se jedná o
bodový zdroj světla, tak je potřeba uvažovat ještě další 3 stupně
volnosti. Obecně se jedná o 6 dalších stupňů volnosti pro zdroj světla.
Úkol prozkoumání stavového prostoru s velkým počtem rozměrů se často
řeší následujícími způsoby:
.Vyloučení některých stupňů volnosti.
.Vazba mezi stupni volnosti.
Například Range-Finder má spolu vázán zdroj světla a snímací kameru.
Zbývá nám 6 stupňů volnosti. I přes omezování a vylučování stupňů
volnosti se jedná o velmi složitý problém hledání nejlepšího pohledu v
parametrickém prostoru. V tomto prostoru je potřeba se nějakým způsobem
orientovat.
Pro orientaci v parametrickém prostoru jsou používány následující postupy:
.Parametrický prostor je popsán analyticky.
.Dodatečná omezení v parametrickém prostoru.
.Diskretizace parametrického prostoru.
.Sledování paprsků (Ray tracing).
Analytický popis parametrického prostoru je velmi elegantní. Bohužel je
též natolik složitý, že se často nedá snadno manipulovat s výslednou
analytickou funkcí.
Dodatečná omezení parametrického prostoru jsou nejčastěji založena na
heuristikách. Pro ně není jasné chování ve všech situacích a v některých
případech nejsou optimální.
Diskretizace prostoru je často prováděna do kulové (půlkulové) sítě bodů
a nebo do válcové sítě, jak je ukázáno na obr. a a obr. b. Ve
zvolených bodech je ohodnocena kvalita snímání a je hledáno optimum v
diskretizační mřížce.
0.35
Figure 2: Půlkulová a válcová síť snímacích bodů
Diskretizace má také nevýhody dané nízkým rozlišením diskretizační sítě.
Též dochází k citelné ztrátě stupňů volnosti snímacího členu.
Metody používající sledování paprsků (ray tracing) dávají poměrně
uspokojivé výsledky. Při sledování paprsků pro všechny plochy mají tyto
algoritmy extrémní výpočetní náročnost.
Metody hledání dalších pohledů závisí zčásti na tom, jakým způsobem je
parametrizován snímací prostor. U diskretizovaného prostoru lze projít
všechny jeho body.
U spojitých prostorů jsou často využívány techniky z umělé inteligence a
heuristiky. Také se používají metody generuj a testuj.
Plánovací strategie
Podle [] lze rozlišit 3 základní strategie v plánování
pozorování pro rekonstrukci:
sep 0pt
Úvodní hra
Zde se jedná o velmi hrubé a rychlé získání tvaru objektu.
Střední hra
V tomto kroku jsou snímány a rekonstruovány
velké plochy.
Konečná hra
V tomto kroku mají být nalezeny a rekonstruovány
všechny jemné detaily.
Navržené strategie jsou vhodné pro postupnou rekonstrukci tělesa od
nejhrubších rysů až k jemným detailům ve třech krocích. Pro každý krok
může existovat samostatný algoritmus. Některé plánovací strategie v sobě
mohou zahrnovat všechny tři kroky současně.
Prostor objektu je rozdělen oktalovým stromem. Při snímání objektu jsou
oblasti ležící na místě objektu označeny jako objekt, oblasti před
objektem jako viděné a všechny ostatní oblasti jako neviděné. Pro
výpočet NBV3 jsou navrženy dva algoritmy.
Jeden algoritmus je nazván "normální" a druhý älgoritmus planetária".
Algoritmus planetária hodnotí viditelnost
povrchu pro každou možnou pozici senzoru. Senzor bude umístěn do takové
pozice, která maximalizuje počet neviděných krychlí. Použitý algoritmus
má velkou výpočetní náročnost a navíc nerespektuje geometrii senzoru.
Druhý algoritmus nazvaný "normální" počítá plošky krychlí, které
oddělují prázdnou a viděnou oblast pro 6 pohledů. Z nich si pak jeden
pohled vybere. Toto je velmi rychlý a jednoduchý algoritmus, který
určuje omezený počet 6 pohledů a nebere v úvahu viditelnost.
Tento článek se zabývá plánováním s využitím modelů a testováním
hypotéz. Je zajímavý svým přístupem, který se odlišuje od hlavního
proudu NBV a může vést (podle []) k lepšímu porozumění
některých aspektů problému NBV. Základní předkládanou myšlenkou je
nalézt takové umístění senzoru, které by minimalizovalo nejednoznačnost
metriky v prostoru hypotéz, které se týkají typu objektu postaveného
před senzorem. Tomu částečně pomáhá graf aspektů,
který je využit k seskupení podobných operací týkajících se
umístění senzoru ve vztahu k částečně hypotetizovanému objektu.
Nejednoznačnost je měřena s využitím koncepcí z informační teorie, které
mohou vést k mnohem rafinovanějšímu přístupu při definování nových
měření. Bohužel tyto přístupy nevypadají příliš prakticky pro přímé
využití v NBV, vzhledem k odlišným předpokladům o objektech a obrovské
výpočetní náročnosti.
Maver a Bajcsy 1993 vyvinuly algoritmus pro plánování bodů pohledu
range-finderu. Pohyb proužku světla je omezen na posuny a rotace v
rovině nad objektem. Neviděné oblasti objektů jsou reprezentovány
polygony. Viditelnosti dosud neviděných oblastí (z různých pohledů dle nastavení
senzoru) jsou určeny dle
hranic polygonů. Předkládané řešení je bohužel omezeno pouze na určitou
speciální konfiguraci senzoru.
Whaite a Ferrie aproximují snímaná data parametrickým modelem ze
superkvadrik. Příští pohled je určován tak, že se minimalizuje
neurčitost modelu v místech, kde data nejhůře aproximují model.
Rangefinder je naváděn ve směru, který minimalizuje nejistotu aktuální
aproximace modelu. Tento algoritmus umožňuje daty řízené zkoumání
objektu za účelem tvorby modelu. Zvolený parametrický model nemůže
přesně reprezentovat objekty s velkým množstvím povrchových detailů.
Tato skutečnost představuje omezení celé navrhované metody. Omezení daná
viditelností povrchu a zákryty nejsou zahrnuta do procesu plánování, což
má za následek nemožnost snímání složitých povrchů vzhledem k zákrytům.
Pito navrhuje obecný algoritmus plánování pohledů, který bere v úvahu jak
omezení viditelnosti senzoru tak i neviděné části zkoumaného objektu.
Nejlepší pohled maximalizuje poměr neviděných částí, které musí sousedit
s částmi již viděnými. Omezení viditelnosti je předpočítáno pro každou
oblast aby byla snížena extrémní výpočetní náročnost.
Prezentovaný přístup je omezen na posuny snímacího čidla po válci, který
obklopuje objekt.
Papadopoulos-Orfanos a Schmitt navrhují plánovací algoritmus který
navádí senzor se třemi stupni volnosti. Senzor může dokonce vstoupit do
prostoru určenému pro objekt.
Tento článek obsahuje přehled plánovacích technik určených pro detekci
příznaků v prostředí se známou geometrií. Tím že se jedná o snímání
známých oblastí se tato úloha liší od NBV. V přehledu jsou detailně
rozebrány techniky HEAVEN, VIO, ICE, SRI a MVP []. V
článku jsou rozlišovány techniky typu generuj a testuj, které se
vyskytují hlavně u NBV, a analytický přístup. V analytickém přístupu je
vytvořený kompletní prostor řešení včetně zadaného omezení porovnán s
ostatními prostory řešení. U syntetického přístupu se může též jednat o
hledání optima mnohaparametrové optimalizační funkce. Jednotlivé
parametry mohou zahrnovat například polohu snímače, zoom a zaostření
kamery. Geometrické kalkulace jsou velmi zajímavé, poněvadž zahrnují
množství vzorkovacích technik (např automatické dělení dlaždic v
obklopující sféře) a technik sledování paprsků (BSP stromy,
předzpracování, konvexní obálky a výpočet množin bodů). Obecně je
použitá geometrie jednodušší než jaká je nejčastěji používána u NBV.
Článek je podle [] výsledkem neefektivní týmové spolupráce a
'školského' zpracování. Navzdory mnoha citacím4 článek popisuje nejméně efektivní algoritmus. Pro
reprezentaci geometrie je využita matice obsazenosti. Podle křivosti
dosud nasnímaného povrchu jsou vybrány tři možné pohledové body. Ty jsou
navzájem relativně ohodnocovány metodou sledování paprsků s
přihlédnutím ke všem ostatním datům (viditelnost). Použitá terminologie
není přesná. Na druhou stranu jsou v tomto článku nápady, které se
nevyskytují v jiných článcích. Především se jedná o charakteristiky
cesty snímacího čidla a o množství nové informace, které je odkryto
novým měřením.
V tomto článku je popisován algoritmus NBV založený na voxelové
reprezentaci. Pohled je plánován z mnoha bodů rozmístěných na kulové
ploše. Každý voxel může nabývat několika hodnot: Neviděno, viděno,
prázdný a rovina zákrytu. Rovina zákrytu vzniká tam, kde spolu
přímo sousedí voxely typu neviděno a viděno. Voxely typu
viděno obsahují navíc atribut úhlu mezi rangefinderem a měřenou rovinou.
V každém možném bodě pohledu je počítána viditelnost rovin zákrytu a
viděných rovin.
Nechť M je snímané těleso. Je kladen požadavek na převedení tělesa
M do digitální reprezentace. Duplikát tělesa M si nazvěme
[`(M)]. Je rozumné požadovat, aby se [`(M)] co
nejméně lišilo od M. Vzhledem k používání iterativních metod je
duplikát postupně vylepšován přidáváním dalších informací. Proto máme k
dispozici celou posloupnost modelů [`(M)]. Nazvěme si je
[`(M)]0 až [`(M)]n.
Nechť vektor [x\vec] obsahuje souřadnice snímacích členů pro jednu
konfiguraci. Do souřadnic snímacích členů se promítají též všechny
stupně volnosti kamery a zdroje světla. Jednotlivá měření si označme
[x\vec]1, [x\vec]2 ... [x\vec]n a uložme si je do matice X.
0.5
Figure 3: Cyklus zahrnující jednotlivé kroky při snímání dat
Na obr. 3 je zobrazen celý proces snímání 3D tělesa. Do
procesu vstupuje prázdný model [`(M)]0. Ten je postupně
vylepšován dalšími měřeními tak, že data z těchto měření jsou do něho
integrována. Před každým měřením je nutno naplánovat novou konfiguraci
snímací sestavy [x\vec]k+1.
Důležitý krok ve snímacím cyklu představuje rozhodování o zastavení jednotlivých
iterací. K tomu by mělo dojít z následujících důvodů:
.Překročení stanoveného času. Někdy je vhodné omezit dobu, po
kterou je prováděno měření. Toto kritérium nemusí vždy produkovat
nejlepší výsledky.
.Překročení maximálního počtu iterací. Vzhledem k tomu, se jedná
o poměrně složité výpočty, nemusí být doba výpočtu spolu s měřením konstantní.
Proto je někdy vhodné omezit maximální počet iterací. Tím se zajistí
určitý maximální počet měřících cyklů (iterací ve výpočtu).
.Nelze-li již dalším měřením výrazně vylepšit stávající model. Toto
kritérium je ze všech nejlepší. Je však nutno nějakým způsobem
dopředu odhadovat možný přínos nového měření. Pokud tento přínos bude
menší než stanovená hranice, pak dojde k ukončení posloupnosti měření.
Zde je nutno řešit určité komplikace, aby nedošlo k zacyklení algoritmu.
Definujme si funkci, která provede celé nové měření s následnou
aktualizací naměřeného modelu:
M2k+1 = update(M2k,
®
x
k+1
)
(1)
V této rovnici musí být známa následující hodnota polohy senzoru. K jejímu
výpočtu použijeme funkci NBV.
®
x
k+1
= NBV(X,M2k)
(2)
Ještě je nutno definovat funkci, která nějakým způsobem ohodnocuje
odhadované možné zlepšení modelu dalšími měřeními. Této funkci již
postačí pouze znalost modelu v k té iteraci.
q = Possible_Improvement(M2k)
(3)
Funkce ohodnocující možné zlepšení nemůže sama o sobě zaručit ukončení
algoritmu po konečném počtu kroků. Největším problémem algoritmů
iterativního typu představuje vznik cyklů. Kdyby se každé měření
nevratně projevilo nějakým způsobem na vznikajícím modelu, tak by vždy
po určitém maximálním počtu kroků došlo k zakončení algoritmu. Bohužel v
praxi existují taková měření, která nepřinášejí žádnou novou informaci o
modelu. Proto je nutno k rekonstruovanému modelu přidat ještě dodatečnou
stavovou informaci. Datová struktura kombinující stavovou informaci a
rekonstruovaný model již může mít vlastnosti požadované na počátku tohoto
odstavce.
V tomto oddílu bude věnován prostor popisu metod, které byly použity k
řešení úlohy v experimentální implementaci. Zatím se jedná jen o snímání
v jedné rovině pomocí robota. Po odladění tohoto algoritmu je uvažováno
o rozšíření do všech tří rozměrů.
Pro plánovač pohledů je potřeba volit reprezentace následujících skutečností:
.Reprezentace možných měření
.Reprezentace znalosti o měření
.Reprezentace apriorní znalosti o úloze
Je snaha, aby byla jednotlivá fakta (presentovaná v předchozím výčtu),
pokud to půjde, reprezentována stejným nebo alespoň podobným
formalismem. Hlavním důvodem jednotné reprezentace je zjednodušení a
zefektivnění výsledného algoritmu.
Reprezentace možných měření
Po analýze problému byla zvolena reprezentace
mřížkou (v Matlabu se jedná o matici). Jednotlivé buňky mohou
nabývat 3 základních hodnot: 0 buňka není známa; 1 buňka je plná; -1
buňka je prázdná. Mřížka obecně má nevýhodu vyjádřenou poměrem velké
paměťové náročnosti a malé přesnosti. Tento nedostatek jsme se rozhodli
překonat tak, že ke každé plné buňce bude přidán seznam všech naměřených
bodů, které do ní spadají. Po dokončení měření pak bude možno ze všech
naměřených hodnot rekonstruovat přesný tvar snímaného 2D tělesa.
Zvolená reprezentace umožňuje snadnou fúzi naměřených dat. Nechť
M1 je matice vzniklá z jednoho měření a M2 je matice z druhého
měření. Pak jejich sloučení lze vypočítat M = sgn(M1+M2). Za
jednu z výhod mřížky je možno též považovat snadný a rychlý přístup k
datům.
Reprezentace apriorní znalosti o úloze
Apriorní znalost se týká několika částí úlohy.
První znalost se týká použitého snímače. Zatím uvažujme pouze
Range-Finder s kamerou. Ten musí být zkalibrován a plánovacímu algoritmu
musí být známa jeho geometrická konfigurace. Především se jedná o
vzájemnou vzdálenost ohniska kamery a laseru, dále se jedná o náklon
laseru, náklon kamery a zorný úhel kamery.
Další apriorní informace se týkají velikosti snímaného objektu. Ta je v
zásadě dána manipulačním rozsahem robota v jehož paži je range-finder
umístěn. V algoritmu se projeví volbou velikosti mřížky a skutečnými
rozměry jedné buňky.
V dalším textu o plánování jsou použity následující termíny. Ty jsou
zobecněny tak, že je lze použít jak v pixelové tak i ve vektorové
implementaci.
Neznámá oblast.
Neznámá oblast představuje prostor, o kterém se dosud nepodařilo získat
žádnou informaci ze snímacího senzoru.
Prázdná oblast.
Prázdná oblast představuje prostor, ve kterém se nevyskytuje žádné plné těleso.
Růstový bod.
Za růstový bod je považován takový plný bod, v jehož okolí se nachází
neznámá oblast.
Rovina zákrytu.
Rovina zákrytu představuje styčnou plochu vznikající na rozhraní prázdné
a neznámé oblasti. Nejčastěji se na takovémto rozhraní vyskytuje plná
oblast.
Kandidát na snímání.
Představuje bod s dosud neznámou hodnotou, který leží v sousedství
plného bodu. U rastrové reprezentace je sousedství dáno osmiokolím, u
vektorové se jedná o určitou malou vzdálenost.
Predikovaný bod.
Predikovaný bod je kandidátem na snímání, který leží v sousedství
růstového bodu. Pokud lze proložit nějakou plochu (křivku ve 2D
případě), která prochází růstovým bodem a jeho sousedními plnými body,
tak růstový bod leží na této ploše. Jinými slovy, růstový bod leží v
místech, kam s největší pravděpodobností pokračuje dosud nasnímaná
plocha (či křivka ve 2D případě).
Základní měřící cyklus je ukázán na obrázku obr. 3. První krok spočívá
v nalezení tělesa (tzn. alespoň jeho jediného bodu). V současné
implementaci se rangefinder pohybuje po přímce do té doby, dokud
nenaměří nějakou hodnotu. Nejvhodnější strategií by bylo objet celé
těleso po nějaké kruhové dráze.
Od okamžiku nalezení objektu začíná vlastní plánování. Pokud rangefinder
naměřil dosud jen jediný bod, tak se plánovač pokusí udělat malý krok
stranou (z důvodu minimalizace pohybu RF) a provést nové měření.
Sousedí-li růstový bod alespoň s jedním plným bodem, pak probíhá vlastní
plánování. Jedním z požadavků na optimální směr pohledu je kolmost na
predikovanou přímku vycházející z predikovaného bodu. Je žádoucí, aby
ani jeden paprsek neprocházel plnou oblastí. Paprsek by mohl ještě navíc
procházet přes dalšího kandidáta ke snímání (ležel by na spojnici
Rangefinder - predikovaný bod). Celá situace je zachycena na obrázku
obr. .
0.8
Figure 4: Zobrazení situace při snímání range finderem.
Pro splnění podmínek předchozího odstavce je zvolen následující postup.
Je vybrán jeden kandidát na snímání. Kolem něho je zkonstruována
kružnice viditelnosti. Ta je v současné implementaci představována
vektorem s 360 položkami (reprezentují kruhové výseky po jednom stupni).
Pro konstrukci této struktury je nutno projít celou matici. Každá
neprázdná buňka vytvoří v kružnici viditelnosti neprázdnou stopu.
Samozřejmě, že jednotlivé stopy se mohou překrývat. I zde by nebylo
nutno používat diskrétní reprezentaci, ale bylo by možno použít i
reprezentaci vektorovou založenou na intervalech.
Z výsledné kružnice viditelnosti lze vyčíst směry, kterými se lze dívat
na vybraného kandidáta ke snímání a směry, kterými nelze. Zvolme si
Viditelnostm=0, je-li paprsek odpovídající m v zákrytu s nějakou
plnou buňkou. Jinak Viditelnostm=1.
Další kritérium Kolmost zohledňuje požadavek na kolmý pohled k povrchu
tělesa. Nechť a je odklon normály dosud nasnímaného povrchu od
nastavení RF pro jeden možný pohled. Kolmost pro danou konfiguraci
vypočteme následujícím způsobem:
Kolmosti = vaha cos ai + (1-vaha)
(4)
Vektor kritéria kolmosti [Kolmost\vec] = [Kolmost0, ... Kolmostn] vznikne
složením jednotlivých kritérií.
Proměnná vaha reprezentuje sílu kritéria. Může nabývat hodnot v
rozsahu (0,1). Poměrně uspokojivé výsledky lze dosáhnout např. s
hodnotou 0,5.
Poslední kritérium Pohybi zohledňuje pohyb snímacího členu z aktuální
polohy do i-té polohy.
Po vypočítaní všech tří kritérií je potřeba provést jejich fúzi.
Nejjednodušší operací je jednotlivá kritéria vynásobit po prvcích
(položku po položce). Z tohoto důvodu byl kladen požadavek na rozsah
hodnot jednotlivých kritérií Kriterium Î < 0;1 > . Fúzí vlastně vznikne
celkové kritérium vhodnosti pohledu z určitého směru. Nazvěme jej [Pohled\vec].
Celé měření je založeno na expanzi růstových bodů. Je dobré si udržovat
aktuální seznam růstových bodů. Vždy si lze jeden růstový bod vybrat a
snažit se o jeho expanzi. K tomu slouží nalezení všech kandidátů na
snímání v okolí zvoleného růstového bodu. Vše je zakresleno na
obr. . Vektor růstových bodů je označován symbolem p,
aktuální růstový bod pp, vektor všech kandidátů na snímání c a konečně
vybraný kandidát na snímání symbolem cc.
0.7
Figure 5: Algoritmus pro výběr a snímání kandidátů podle růstových bodů.
Po zvolení kandidáta na snímání nastupují jednotlivé strategie. Ty jsou
primárně určeny k naplánování takové konfigurace měřících senzorů, aby
bylo možno co nejlépe změřit vybraného kandidáta na snímání. Jednotlivé
snímací strategie se mohou společně chovat jako stavový automat viz.
obr. . Jednotlivé přechody mezi stavy jsou značeny písmeny a
jsou vysvětleny u jednotlivých strategií.
0.7
Figure 6: Plánování strategií pro změření vybraného kandidáta cc.
Základní strategie 0 - rovná či mírně zakřivená křivka
Základní strategie je optimalizována na snímání rovných a mírně
zakřivených obvodových linií. Celá situace je zakreslena na obrázku
obr. .
V předchozím textu byl popsán způsob ohodnocování možných pohledů.
Předpokládejme, že jsme si vypočítali optimální pohled pro strategii 0.
Následně se přesune Range-Finder na nově určenou pozici a provede se
měření. Po měření může nastat pět základních situací (viz též přechody
na obr. 6):
A0 Byl viděn požadovaný dosud neznámý bod
Tato situace je optimální. Růstový bod se přesune do nově naměřeného bodu,
lze nalézt jeho kandidáty ke snímání a takto pokračovat dále.
B0 Byl viděn dosud neznámý bod, který je též kandidátem na snímání
Tato situace je velmi obdobná situaci předchozí. Lze ji zpracovat
tak, jako kdybychom původně chtěli změřit právě nalezený bod.
C0 Byl viděn jiný dosud neznámý bod
Uvedená situace ukazuje na výskyt nespojitosti povrchové křivky
(popř. plochy). Vhodná následující akce je např naplánování nového
pohledu na již předem zvoleného kandidáta ke snímání.
D0 Byl viděn již viděný bod
Pohled na již viděný bod znamená v každém případě chybu. Buďto se
může jednat o nepřesnost RF a nebo o špatné vyhodnocení viditelnosti.
Rozumné zotavení představuje např. zákaz pohledu danou konfigurací RF
a naplánování nového pohledu na již předem zvoleného kandidáta ke snímání.
E0 Nebylo vidět nic
Tato situace též poukazuje na možný výskyt nespojitosti povrchové křivky
(popř. plochy). Na rozdíl od předchozí situace "Byl viděn jiný dosud neznámý
bod" nelze příliš odhadovat typ nespojitosti. Je možno také zakázat pohled
danou konfigurací RF a naplánovat nový pohled na již předem zvoleného kandidáta
ke snímání. Mnohem výhodnější se však jeví přepnutí na jinou plánovací strategii.
0.6
Figure 7: Další pohled ve strategii 0
Základní strategie 0 by mohla teoreticky nasnímat jakýkoliv povrch.
Optimální výsledky však dává jen v místech, kde se nevyskytují
nespojitosti. Při výskytu nespojitosti je lepší zvolit jinou strategii a
testovat hypotézy ohledně typu nespojitosti.
Samozřejmě může při plánování pohledu nastat situace, kdy pohled na
kandidáta na snímání naplánovat nelze. Pak se kandidát na snímání označí
jako nezměřitelný a je nalezen nový kandidát.
Strategie 1 - ostrý úhel
Pokud snímání probíhala dobře až do bodu, kdy nebylo nic vidět, je
nejpravděpodobnější příčinou ostrý úhel na obvodové hraně tělesa. Situaci
zachycuje např. obr. . Požadujeme strategii, která
vzniklou situaci detekuje a pokračuje v měření přes ostrý úhel. Dále by
bylo vhodné, kdyby zvolená strategie byla schopna ověřit, zda se se
skutečně jedná o ostrý úhel či zda se jedná o jinou formu zákrytu.
0.6
Figure 8: Strategie 1 - způsob plánování
Navržená strategie podle obrázku obr. 8 tyto požadavky
splňuje. Jejím základem je pohled přes kandidáta na snímání na růstový
či jiný plný bod. Pak mohou nastat čtyři situace:
A1 Byl viděn požadovaný dosud neznámý bod.
Tato situace je optimální. Růstový bod se přesune do nově naměřeného bodu,
lze nalézt jeho kandidáty ke snímání a takto pokračovat dále.
B1 Byl viděn jiný dosud neznámý bod.
Uvedená situace ukazuje na výskyt nespojitosti povrchové křivky
(popř. plochy). Vhodná následující akce je např naplánování nového
pohledu na již předem zvoleného kandidáta ke snímání.
C1 Byl viděn již viděný bod.
Kandidát na snímání je prázdný a je nalezen nový kandidát na snímání.
Strategie pokračuje do té doby, dokud snímací senzor nenarazí na nějaký plný bod.
D1 Nebylo vidět nic.
Pokud nebylo nic vidět, tak to znamená v této strategii chybu. Ve
snímaném modelu existuje nějaký zákryt, který nebyl dosud zjištěn. Je
nejlepší v této přepnout na jinou strategii.
Při použití popisované strategie většinou nedojde k zákrytu, čímž je
zaručeno, že bude viděn alespoň nějaký plný bod. Pro ohodnocování a
následné plánování vhodnosti pohledů lze využít předchozí kritéria viditelnosti a
pohybu paže robota. Kritérium kolmosti je u strategie 1 nepoužitelné,
protože hledáme pokračování obvodové linie v místě ostrého úhlu. Místo
něho lze použít kritérium viditelnosti sousedních plných bodů (do
omezené vzdálenosti) přes kandidáta na snímání.
U výpočtu nových pohledů ve strategii 1 je vhodné použít kružnici
viditelnosti. Kružnice viditelnosti zaručuje, že u již naměřených dat
nedojde k zákrytu.
Ve strategii 1 lze detekovat situaci (s využitím kružnice viditelnosti),
kdy pohled na kandidáta na snímání naplánovat nelze. Pak se kandidát na
snímání označí za nezměřitelný a je nalezen nový kandidát.
Strategie 2 - ostrý úhel
Použitím strategie 1 dochází ke zbytečnému pohybu senzoru při přepnutí
strategie. Pak se snímací senzor nepohybuje po hladké křivce. Proto byla
definována nová strategie, která by měla umožnit hladký průchod
snímacího senzoru přes ostrou hranu i za cenu mírného snížení
robustnosti.
0.6
Figure 9: Strategie 2 - způsob plánování
Strategie provádí jakési obcházení růstového bodu, jak je ukázáno na
obr. 9. Kandidáti na snímání pak leží na
jednotkové kružnici kolem růstového bodu. Snímací senzor testuje
jednotlivé kandidáty po nastaveném úhlu. Pokud by se v modelu nacházel
pouze ostrý úhel, pak snímač vždy musí narazit na neprázdného kandidáta
na snímání.
Horší situace, než v případě ostrého úhlu, nastane v případě zákrytu.
Protože praktická kontrola snímaných dat ve strategii 2 je poměrně
slabá5, může se stát, že snímač zbytečně obkrouží celý objekt. Ve
strategii 2 nelze detekovat situaci, kdy požadovaný bod není změřitelný.
To se někdy pozná až po obkroužení celého objektu snímacím senzorem.
Kružnice viditelnosti je v této strategii nepoužitelná vzhledem k
neustálé změně predikovaného bodu (pohybuje se po kružnici).
Ve strategii 2 mohou nastat následující situace:
A2 Byl viděn dosud neznámý bod, který je kandidátem na snímání
Protože ve strategii 2 neexistuje pevně definovaný kandidát na snímání,
žádaného cíle bylo dosaženo.
B2 Byl viděn jiný dosud neznámý bod
Uvedená situace ukazuje na výskyt nespojitosti povrchové křivky
(popř. plochy). Nespojitost je nejspíše jiného typu než ostrý úhel.
Vhodnou následující akcí by bylo přepnutí na strategii 1.
C2 Byl viděn již viděný bod
Pohled na již viděný bod znamená přetočení na pomyslné kružnici.
Další otáčení již nemá smysl a tak by bylo nejlepší přepnout na jinou strategii.
D2 Nebylo vidět nic
U strategie 2 je tato situace normální. Doporučenou další akcí je pokračování
snímání na dalším bodě pomyslné kružnice.
Ukončení měřící sekvence
Důležitou částí každého plánovacího procesu je ukončení sekvence měření
a prohlášení naměřených dat za výsledek měření. Zatím neomezujme měřící
sekvenci ani počtem měření ani dobou vyhrazenou na měření. Sekvence
měření bude považována za ukončenou když žádné nové měření nepovede ke
zpřesnění naměřeného modelu.
Při jednotlivých měřeních dochází ke zpřesňování modelu. Algoritmus
usiluje vždy o expanzi vybraného růstového bodu. V jeho okolí je vybrán
kandidát ke snímání. Po jeho změření je kandidát na snímání označen
příslušným způsobem (plný/prázdný). Pokud jej nebylo možno z nějakého
důvodu proměřit pak bude označen za nezměřitelný a bude nalezen nový
kandidát. V každém případě jeden kandidát na snímání nemůže být za
kandidáta na snímání označen dvakrát6.
Kandidáti na snímání obklopují růstové body. Kolem jednoho růstového
bodu může být kandidátů jen omezené množství. Pokud dojde k vyčerpání
všech kandidátů, přestává být růstový bod růstovým bodem.
Definujme tedy konec snímací sekvence jako vyčerpání všech možných
růstových bodů.
7.1 Citlivost algoritmu na vzdálenost Laser-Kamera
Navržená a realizovaná plánovací strategie plánuje pohled na středy
čtverečků. Při překročení úhlu mezi kamerou a laserem nad určitou mez
přestane být plánovač schopen naplánovat viditelnost některých bodů, jak
je ukázáno na obr. .
0.45
Figure 10: Simulovaná snímání objektu - vliv vzdálenosti LASER-Kamera na měření
Pro krátkou tyč je trajektorie RF plynulá, jak je vidět na
obr. 10(a). Čáry na obrázku obr. 10(b) znamenají
přejezdy robota z místa na místo. Někdy jsou zbytečně dlouhé a to
znamená málo efektivní plánování trajektorie. Důvodem takového množství
a délky přejezdů je, že plánovač již nemohl najít vhodný pohled na
těleso přiměřeně blízko předchozímu pohledu.
Možné řešení vzniklé situace spočívá v plánování pohledů ne na středy,
ale na obvod čtvercové buňky. Místo jednoho bodu by bylo možno uvažovat
4 body umístěné ve středech jednotlivých hran a plánovat pohledy
současně na všechny body.
0.45
Figure 11: Ukázky dalších měření na simulovaných datech
Obrázky obr. a obr. ukazují naměřená data z
reálného rangefinderu drženého v paži robota. První obr.
zachycuje zbytečné přejezdy robota v důsledku šumu v naměřených datech.
0.9
Figure 12: Záznam z měření na reálných datech
Zejména obr. ukazuje, že lze s plánovačem provádět
experimenty i na reálných datech. Pro práci s reálnými daty je potřeba
zvýšit robustnost navrhované plánovací strategie. Použitá plánovací
strategie je trochu citlivá na chyby v datech. Jedná se zejména o
situaci, kdy je nastavena kamera do určité pozice a je naměřen bod,
kterým by teoreticky paprsek laseru ani procházet neměl.
0.9
Figure 13: Zdařilý experiment z měření na reálných datech
Proměnná circ je vektorem s 360 položkami. Každá položka
reprezentuje viditelnost daného bodu v kruhové výseči o velikosti 1
stupně. Protože v Matlabu nelze přistupovat k položce č.0 je místo
ní využita položka č. 360. Hodnota 0 v proměnné circ znamená, že
do výseče zasahuje plný objekt a hodnota 1 znamená, že výseč nezasahuje
do nějakého plného objektu.
M matice obsazenosti plochy.
Popisovaná plocha představuje obdélník. Každý element matice popisuje
čtvercovou oblast se středem v bodě [x,y]. První element odkazuje oblast [(0.5
: 1.5),(0.5 : 1.5)] se středem v bodě [1,1].
Hodnoty elementů v matici:
0
o dané ploše není známa žádná informace
1
daná plocha odkazuje plné těleso
-1
plocha je prázdná
-0.1
plocha je asi prázdná
0.1
plocha je asi plná
Vlastním algoritmem jsou použity 2 doplňkové hodnoty -0.1 a 0.1.
pos
určuje nastavení rangefinderu. Pro 2D se jedná o matici o rozměrech 2
x 3.
pos(1,:) = [Xzdroje_světla, Yzdroje_světla]
pos(2,:) = [Xsnímače, Ysnímače]
pos(3,:) = [Xsměr, Ysměr]
Třetí bod popisuje nasměrování rangefinderu. Paprsek prochází přímkou od
zdroje světla do bodu [Xsměr, Ysměr].
vec vektor části kontury
Matice vec obsahuje několik okolních bodů z již nasnímané linie. Body
jsou uloženy do řádků matice.
vec(bod,:) vrací [Xbodu,Ybodu]
Procedury jsou pro přehlednost seřazeny podle abecedy.
[M]=bkrangef2d[M,pos,X] [M]=bkrangef2d_[M,pos,X]
Funkce bkrangef2d provádí aktualizaci interního modelu na základě
znalosti naměřených dat. Bod X by měl být výsledkem funkce
[X]=rangef2d(M,pos) . Matice modelu M použitá u funkce
bkrangef2d by se neměla shodovat s originální maticí popisující
měřený objekt. Na počátku by měla být inicializována nulami.
Procedura bkrangef2d je téměř shodná s procedurou
bkrangef2d_. Jediný rozdíl spočívá v lepší implementaci algoritmu
raytracingu. Za pixely příslušející trasované úsečce jsou považovány
všechny pixely, jejichž čtvercovou oblastí prochází sebemenší část
trasované úsečky.
[dir]=ComputeDirection(M,X,Count)
Funkce ComputeDirection vypočítá směrový vektor hranice, která prochází
bodem X z matice M. Výpočet směrového vektoru je prováděn
metodou nejmenších čtverců z maximálně Count bodů. Menší
množství než Count je použito pouze v případě, pokud na hraně
již nelze nalézt další body.
[angle]=GetAngle(vec)
Funkce vypočítá orientovaný úhel, který svírá vektor [1,0] s vektorem
vec .
[c]=getcandidates2d(M,X)
Funkce najde všechny kandidáty ke scanovaní v okolí bodu X . Za
kandidáta je považován takový bod, který ve svém osmiokolí současně
sousedí s prázdným bodem a plným růstovým bodem (v našem případě se
jedná o bod X ). Kandidát sám musí mít v matici M hodnotu
"neznámá hodnota". Je-li kandidátů více, pak má matice c více
řádek.
[dist]=getdistance(X1,X2)
Funkce vypočítá Euklidovskou vzdálenost dvou bodů X1 a
X2 podle vzorce dist = Ö{ (X1(1) - X2(1))2 + (X1(2) -X2(2))2 } .
[d]=GetDistanceVC(X1,X2,P)
Funkce určí vzdálenost bodu P od přímky procházející body
X1 a X2 .
[pp]=GetNearestPP(M2,p,pp_old)
Funkce najde nejbližší růstový bod (Všechny růstové body jsou umístěny
v matici p.) ve kterém muže dojít k expanzi rekonstruované plochy.
U vybraného bodu je ověřeno zda se stále jedná o růstový bod. V opačném
případě je vybrán jiný bod pp. Pokud nelze vybrat žádný bod pp, pak
funkce vrací [-1,-1].
[M]=getmodel() [M]=getmodel2() [M]=getmodel3() [M]=getmodel4() [M]=getmodel5() [M]=getmodel6()
Rodina funkcí getmodel? vytvoří nějaký model a uloží jej do matice M.
Jedna z funkcí je vždy volána na počátku snímacích skriptů.
[pp]=getpoints2d(M)
Funkce vrací vektor všech základních bodů. Za základní bod je
považován takový bod, který sousedí minimálně s jedním kandidátem ke
snímání. Nelze-li nalézt ani jeden základní bod, pak funkce vrací hodnotu [-1,-1].
[vc]=getvc(a,b,c)
Funkce určí souřadnici průsečíku úsečky ab a výšky vc v trojúhelníku
abc .
0.3
[circ]=MakeCircleOfVisibility(M,Xs)
Funkce MakeCircleOfVisibility vrací kružnici viditelnosti bodu Xs .
Kružnice je vytvářena z dosud rekonstruované části modelu.
paintRF(M2) paintRF(M2,pos,cc,x) paintRF(M2,pos,cc,x,LastMovement)
Funkce vykreslí aktuální model spolu s pozicí rangefinderu na obrazovce.
Současně s tím je nakreslen právě naměřený bod x a kandidát ke snímání, na
kterého byla nařízena kamera.
Volitelně je možno nakreslit celou minulou trajektorii range-finderu.
Každý řádek matice LastMovement obsahuje jednu polohu RF.
[pos,angles]=PlanNewPos(circ,Xs,OldPos)
[pos,angles]=PlanNewPos2(circ,Xs,pp)
[pos,angles]=PlanNewPos3(circ,Xs,pp,M2)
[pos,angles]=PlanNewPos4(circ,Xs,pp,M2,OldPos)
[pos,angles]=PlanNewPos5(circ,Xs,pp,M2,OldPos,LLine)
Plánovače nového pohledu ve strategii 0. K naplánování pohledu využívají
kružnici viditelnosti circ vybraného bodu Xs . Nelze-li
naplánovat pohled do Xs je vráceno pos=[-1,-1;-1,-1;-1,-1]. Pro
testování je vhodné testovat pouze třetí řádek matice pos .
Algoritmus PlanNewPos5 odhaduje aktuální pohled tak, aby procházel přes
požadovaný bod a současně přes predikovaný bod. LLine obsahuje
počet bodů, ze kterých je počítána povrchová přímka. Z povrchové přímky
je predikován nový bod pohledu.
[pos,angles]=PlanNewPos_s1_0(circ,Xs,pp) [pos,angles]=PlanNewPos_s1_1(circ,Xs,pp,OldPos) [pos,angles]=PlanNewPos_s1_2(circ,Xs,pp,vec,OldPos)
Plánovače nového pohledu ve strategii 1. Strategie 1 se používá zejména na
ostrých hranách objektu. Je preferován pohled ve směru přes vybraný bod tak
aby pohled končil uvnitř již změřeného plného bodu. Nelze-li naplánovat
pohled na Xs je vrácena pozice pos=[-1,-1;-1,-1;-1,-1].
[pos]=PlanNewPos_s2_2(pp,BaseFi) [pos,rotation]=PlanNewPos_s2_2(M2,pp,BaseFi,rotation)
Plánovače nového pohledu ve strategii 2. Strategie 2 je též používána na
ostrých hranách objektu. Nebere v úvahu viditelnost a pomalu otáčí se
senzorem do té doby dokud nenarazí na nějaký neprázdný bod. Nelze-li
naplánovat pohled na Xs je vrácena pozice pos=[-1,-1;-1,-1;-1,-1]. K této
situaci by došlo, kdyby se senzor otočil o 360 stupňů a nic nezměřil.
[X]=rangef2d(M,pos) [X]=rangef2d_(M,pos)
Tato procedura provede jeden scan range-finderu. Ve dvourozměrném
případě je výsledkem již přímo pozice bodu [x_bodu,y_bodu] , ve
kterém vyslaný paprsek narazil na neprůhledný bod v matici M a
odrazil se zpět do senzoru. Pokud by paprsek minul neprůhledné body a
nebo se nemohl dostat ke snímacímu senzoru, vrací procedura hodnotu
[-1,-1]. Při sledování úsečky ray-tracingem vzniká spojitá linie v
osmiokolí.
Procedura rangef2d je téměř shodná s procedurou rangef2d_.
Jediný rozdíl spočívá v lepší implementaci algoritmu raytracingu v proceduře
rangef2d. Pixely trasované úsečky jsou všechny pixely,
jejichž čtvercovou oblastí prochází sebemenší část trasované úsečky.
rfconfig
Tato procedura nastaví globální proměnné popisující geometrii snímače.
Při změně geometrie snímacího členu postačí nastavit pouze tyto
konstanty. Jedná se o RFlength : obsahuje vzdálenost ohniska
kamery od laseru. RFalpha : odklon roviny laseru (přímky) od
spojnice laser-kamera. RFbeta : odklon střední roviny (přímky)
kamery od spojnice laser-kamera. FRgamma šířka svazku paprsku
kamery ve 2D rovině. Úhly jsou zadávány v radiánech.
[vec]=TraceContour(M,X,count)
Procedura sleduje konturu snímaného objektu do délky maximálně count bodů.
Trasování kontury začíná v bodě X.
[line]=TraceLine2D(Start,Stop,Bound)
Procedura trasuje úsečku vycházející z bodu Start a končící v
bodě Stop . Matice line obsahuje ve svých řádcích
jednotlivé body příslušející zadané úsečce. Omezení Bound obsahuje
souřadnice levého dolního rohu Bound(1,:) a pravého horního rohu
Bound(2,:). Pokud sledovaná úsečka vystupuje ze zadaného obdélníku je
uvažována jen ta její část, která v něm leží.
[circ]=UpdateCirc(circ,Xs,X)
Procedura provede aktualizaci kružnice viditelnosti pro bod X , který se
stal neprůhledným. Bod Xs je středem kružnice a představuje tzv. vztažný bod.
Ve vektoru circ budou vynulovány všechny jednostupňové výseče, která
zasahují do čtvercové oblasti určené bodem X .
verify=verifypoint2d(M,p)
Funkce ověří, zda je bod p tzv. růstovým bodem. Pokud je, tak
vrací 1 jinak 0.
circpix
Skript rekonstruující daný objekt pohybem po kružnici. Při pohybu se snímací
prvek již nesmí vrátit.
fullpix
Skript rekonstruující daný objekt. Kritérium konce rekonstrukce nastane
při vyčerpání všech možných kandidátů. Za kandidáta je považován bod, ve
kterém může pokračovat hrana.
stratpix
Skript rekonstruující daný objekt. Kritériem konce rekonstrukce je vyčerpání
všech možných kandidátů. Za kandidáta je považován bod, ve kterém může
pokračovat hrana. Navíc je v tomto skriptu kladen důraz na lepší trajektorii
senzoru. Toho je dosaženo přepínáním použitých strategií.
Footnotes:
1Range-finder je zařízení určené
ke snímání hloubkových map, tj. produkuje matici, jejíž prvky představují
vzdálenosti od pozorovatele.
2Triangulovaný povrch je povrch popsaný
možinou bodů v prostoru, které jsou seskupeny do sítě trojúhelníků.
3NBV = Next Best View - nejlepší pohled, který
přinese nejvíce nové informace o snímaném tělese.
4Ty by byly pro
nás možná přínosné
5Kontrolu snímaných dat definujme jako schopnost rozeznat
z naměřených dat, že se skutečně vyskytla konfigurace, kterou chceme
změřit.
6Úlohu je potřeba ještě
hlouběji analyzovat pro případ přepínání strategií.