Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Slalom DÚ

Bohužel vývoj epidemiologické situace a s tím související nařízená omezení nám neumožnila setkávat se společně v laboratoři nad řešením původní úlohy pro tento semestr. Tím byla ovlivněna podstatná část semestru. Proto jsme i pře očekávané uvolnění pravidel připravili náhradní úlohu, kterou můžete řešit z domova. Tato úloha vychází z původní úlohy Slalom, ale všechny potřebné údaje jsou uvedeny níže.

Robotem byly nasnímána data jejichž zpracování (off-line) bude na Vás.

Zadání je rozděleno do tří úkolů podle náročnosti řešení:

  1. detekce zelené branky v obraze
  2. určení polohy vůči startovní brance (průjezd startem)
  3. detekce branek tvořených dvojcí tyček a určení polohy roboty (obří slalom)

Obecná pravidla a požadavky

Slalomová dráha a branky

Startovní pozice a branka Fig. 1: Startovní pozice a branka

Slalomová dráha je vyznačena brankami. Jednotlivé branky jsou vymezeny dvěma tyčkami stejné barvy. Tyčky tvoří v našem případě různobarevné papírové válce o průměru 50mm a výšce cca 350mm. Samotná branka je definována jako spojnice mezi středy příslušných tyček. Střed branky je středem této spojnice. Osa branky je kolmice na spojnici tyček, která prochází středem branky. Šířka branky je dána vzdáleností bližších stěn tyček, které vymezují danou branku. Dráha začíná startovní brankou, která je následována jednou, nebo více traťovými brankami.

Startovní/cílová branka je vyznačena dvěma zelenými tyčkami. Její šířka je 500mm +/- 20mm (přesnost umístění). Traťové branky jsou vyznačeny červenými a modrými tyčkami. Startovní branka je vyznačena na figure 1.

Startovní pozice

Startovní pozice je ve směru jízdy před startovní brankou. Střed robotu ve startovní pozici bude umístěn minimálně ve vzdálenosti 500mm od startovní branky (měřeno rovnoběžně s její osou). Střed robotu bude od osy startovní branky vzdále maximálně o 600mm (na obě strany). Podélná osa robotu bude odkloněna od směru osy startovní branky maximálně o ± 60º, ale vždy tak, aby byly obě tyčky startovní branky v zorné poli RGB kamery. Startovní pozice vůči startovní brance je znázorněna na výkresu figure 1.

Data nasnímaná robotem

Data jsou organizována do datových sad, které jsou uloženy v ZIP souborech. Datové sady relevantní pro jednotlivé úkoly jsou uvedeny v rámci jejich zadání. Datové sady sestávají z jednotlivých “snímků” (sady po 5 snímcích). Tyto “snímky” jsou uloženy v samostatných souborech. Soubory jsou ve formátu MAT. Tento formát slouží pro ukládání proměnných z prostředí Matlab (firmy Mathworks). V jednom souboru může být několik proměnných s různými jmény. Data je možné načíst a zpracovat v Matlabu, nebo v Pythonu. Pro načtení dat v Pythonu slouží funkce “loadmat”. Jejím výstupem je slovník (dictionary), který má klíče tvořeny názvy proměnných. Příklad načtení dat ze souboru “file_name” a vypsání jedné z proměnných:

from scipy.io import loadmat
data = loadmat(file_name) # načtení dat
print(data['image_rgb'])  # zobrazení jedné proměnné

Každý “snímek” obsahuje 5 proměnných, které představují zaznamenaná data ze senzorů robotu:

  • image_rgb … snímek pořízený RGB kamerou tvoří matici image_rgb[řádek, sloupec, barva] ∈ 〈0; 255〉, barva ∈ [0,1,2] ≡ B, G, R.
  • image_depth … hloubkový snímek je matice image_depth[řádek, sloupec] jejíž prvky představují vzdálenost od kamery v mm. Vzdálenost 0 mm označuje body pro něž nebylo možné vzdálenost určit.
  • point_cloud … body v 3D prostoru, které odpovídají měřením hloubkové mapy, tvoří matici point_cloud[řádek, sloupec, souřadnice] ∈ R, souřadnice ∈ [0,1,2] ≡ X, Y, Z. Poloha je udávána v metrech souřadnicové soustavě kamery. Body jejichž poloha nebyla změřena mají souřadnice “NaN”.
  • K_rgb … matice popisující projekci kamery (svět → obraz). Používá se pro přepočet z obrazových bodů na úhel v prostoru.
  • K_depth … matice popisující projekci pro hloubkovou kameru.

Body v RGB snímku, hloubkové snímku a 3D body jsou vzájemně přibližně registrovány. To znamená, že si vzájemně odpovídají hodnoty na stejných pozicích (řádek, sloupec).

Kamera / hloubkový snímač je umístěn přibližně 355 mm nad pojezdovou rovinou (podlahou) a je skloněn mírně k této rovině. Výška nad podlahou odpovídá přibližně výšce slalomových tyček. Směr od kamery k hornímu konci tyčky je prakticky rovnoběžný s pojezdovou rovinou. Z hlediska vodorovné roviny je kamera umístěna ve středu půdorysu robotu. Půdorys tvoří kruh o průměru 360mm.

Hledané parametry

Poloha robotu vůči brance Fig. 2: Poloha robotu vůči brance

Výstupem programu by měly být parametry určující polohu robotu vůči nejbližší (případně startovní) brance. Přehlede hledaných číselných parametrů (požadované parametry se mění dle úkolu):

  • c [obrazové body] - Poloha středu branky oproti středu obrazu ve směru řádku (rozdíl sloupců)
  • g [obrazové body] - Šířka branky v obraze měřeno ve směru řádků (počet sloupců)
  • α [rad] - Úhel mezi osou robotu (střed obrazu) a průvodičem ke středu branky (viz. figure 2). Je to úhel o který se musí robot otočit, aby jel směrem do středu branky.
  • β [rad] - Úhel mezi průvodičem (spojnice středu robota branky) a osou branky (viz. figure 2). Z tohto úhlu je možné určit zda robot brankou projede pokud pojede ve směru průvodiče.
  • d [m] - Skuteční šířka branky (viz. figure 2).
  • v [m] - Vzdálenost k brance (viz. figure 2).

Realizace programu

Program musí být napsaný v programovacím jazyku Python, nebo Matlab. Vstupem programu bude název souboru (“snímek”), který má být vyhodnocen. Výstupem budou parametry dle požadavku zadání vypsané na monitoru (textový výstup). Parametry musí být popsány tak, aby bylo jasné o jaký parametr se jedná. Způsob spuštění a formu výstupu nezapomeňte popsat ve zprávě.

Jednotlivé úkoly

1. Detekce startovní branky

Na základě jednoho snímku určete polohu startovní branky v RGB snímku (zelené tyčky). Při výpočtu můžete počítat s tím, že bude robot umístěn na startovní pozici dle obrázku figure 1. Hledanými parametry je poloha c středu branky vůči středu obrazu a šířka branky g ve snímku. Za splnění tohoto úkolu může být maximálně uděleno 40 bodů.

Datové sady:

  • Sada 1, 5 snímků, souboru set_01.zip - 8,5MB
  • Sada 2, 5 snímků, souboru set_02.zip - 8,4MB

2. Poloha vůči startovní brance

Na základě jednoho snímku určete polohu robotu vůči startovní brance (zelené tyčky). Při výpočtu můžete počítat s tím, že bude robot umístěn na startovní pozici dle obrázku figure 1. Výstupem vašeho algoritmu bude poloha robotu definovaná parametry α, β (úhel vůči průvodiči a brance), v (vzdálenost k brance) jak jsou znázorněny na figure 2. Určete také šířku branky d, nebo zda robot brankou projede pokud bude pokračovat ve směru průvodiče ke středu branky (šířka robotu 40cm). Za splnění tohoto úkolu může být maximálně uděleno 60 bodů.

Datové sady:

  • Sada 1, 5 snímků, souboru set_01.zip - 8,5MB
  • Sada 2, 5 snímků, souboru set_02.zip - 8,4MB

3. Detekce branek různé barvy

Vzájemná poloha branek Fig. 3: Vzájemná poloha branek obřího slalomu

Úkolem je určit polohu robotu vůči nejbližší brance. Robot bude umístěn vždy tak, aby viděl obě tyčky dané branky a zároveň aby bylo zachováno pořadí tyček vzhledem ke směru průjezdu. Levá tyčka bude vždy i ve snímku vlevo od tyčky pravé. V rámci tohoto úkolu je nutné určit barvu nejbližší branky a polohu robotu vůči ní. Hledaná poloha robotu je definovaná parametry α, β (úhel vůči průvodiči a brance), v (vzdálenost k brance) jak jsou znázorněny na figure 2. Určete také šířku branky d, nebo zda robot brankou projede pokud bude pokračovat ve směru průvodiče ke středu branky (šířka robotu 40cm). Za splnění úlohy může být maximálně uděleno 80 bodů.

Parametry startovní branky jsou dány stejně pro všechny úkoly. Ostatní branky mají geometrické uspořádání odpovídající výkrasu na figure 1. Branky jsou tvořeny vždy dvěma tyčkami. Šířka branek je d = 450 až 600mm. Minimální vzdálenost bližší tyčky následující branky h ≥ 600mm. Maximální příčná vzdálenost středů následujících branek s ≤ 300mm. Následující branka může být skloněna vůči projížděné brance maximálně o ±30° (|α| ≤ 30°).

Datové sady:

Pomocné experimenty

Aby bylo možné lepší testování a případně “kalibrace” parametrů, realizovali jsem s robotem a brankami dva experimenty. Jejich popis a odpovídajíc data jsou k dispozici. Rozměrový náčrtek experimentu s popisem pozic je součástí ZIP archivu s daty.

  1. Robot přijíždí k řadě branek
    Pět branek bylo seřazeno za sebou s rozestupem 500mm podél společné osy. Vzdálenost vnitřních stran tyček jedné branky byla 550mm. První branka byla červená a dále se střídaly modré a červené branky. Poslední branka je zelená. Robot byl umístěn do osy branek ve vzdálenosti 150, 125, 100, 75 a 50 cm od první branky. V těchto polohách byl vždy sejmut snímek a to tak, že střed snímku zobrazuje střed první branky (osu branek). Data včetně náčrtku jsou k dispozici v souboru experiment_01.zip (8,4MB).
  2. Různý úhel robotu a branky
    Byla postavena zelená branka s vzdáleností vnitřních stran tyček 500mm. Do středu této branky byla navíc umístěna červená tyčka. Robot jsme umístili do vzdálenosti 80 cm od branky a měnili jsme úhle mezi robotem a brankou. Nejdříve byl pořízen snímek, když je robot v ose branky kolmo k ní. Data včetně náčrtku jsou k dispozici v souboru experiment_02.zip (8,1MB).

Bodové hodnocení

Náročnosti dané úlohy odpovídá uvedené maximální bodové hodnocení. Každý z týmů může v průběhu semestru řešit jednu či více úloh. Tým získá bodové hodnocení odpovídající bodovému hodnocení úlohy s největší náročností, kterou úspěšně vyřešil. Uvedený maximální počet bodů odpovídá bezchybnému splnění úlohy. Počet udělených bodů může být nižší v závislosti na funkčnosti řešení.

Všichni členové týmu obdrží stejné bodové hodnocení (bodové hodnocení týmu). V případě, že některý z členů týmu v rámci tohoto předmětu nepracuje, mohou ostatní členové týmu navrhnout cvičícímu jeho vyřazení z týmu čí snížení jeho bodového hodnocení. Cvičící tento požadavek posoudí, prodiskutuje ho se všemi členy týmu a o hodnocení dotčeného studenta rozhodne.

courses/b3b33lar/tasks/du_slalom_cs.txt · Last modified: 2020/04/24 18:44 by krsek