Obsah

Generator Videných Objektov

sk.fiit.robocup.library.generator.SeenGenerator.java
sk.fiit.robocup.library.generator.Geometry.java

Generátor je aktuálne používaný pri testoch, pre vytvorenie nezašumených vstupov na otestovanie algoritmov či správne fungujú. Pri zašumení ide o čo najlepšiu aproximáciu reálnej polohy. S nezašumenými dátami by algoritmi mali generovať presné hodnoty.

sk.fiit.robocup.library.generator.SeenGenerator.java

Generátor objektov, ktoré vidí agent.

Použitie

import static java.lang.Math.ToRadians;
import sk.fiit.robocup.library.Geometry.Point;
...
SeenGenerator seenGenerator = new SeenGenerator();

double x = 1;
double y = 2;
double z = 0.4;

// Otočenie okolo osi v stupňoch
double rotX = 0;
double rotY = 0;
double rotZ = 90;

Point location = new Point(x,y,z);
// SeenGenerator.calculate berie otočenie v radiánoch
Point rotation = new Point(toRadians(rotX),toRadians(rotY),toRadians(rotZ));

List<Object> seen = seenGenerator.calculate(location,rotation);
...

Otáčanie Agenta

Otáčanie okolo x-ovej osy: „naklánanie hlavy robota na bok“ / pád agenta na bok
Otáčanie okolo y-ovej osy: pozeranie hore/dole
Otáčanie okolo z-ovej osy: otáčanie vrámci ihriska (pohľad z hora), napr otočenie smerom k hľadisku, bránke, …

Postup generovania:

  1. Inicializácia súradníc čiar a kontrolných bodov (vlajok a bránok).
  2. Vytvorenie 4 rovín reprezentujúcich hranice viditeľnosti agenta (roviny sú zostavené tak, že ich normálové vektory smerujú smerom do viditeľnej oblasti agenta)
  3. Pre každú plochu:
    1. Pre každý bod sa vypočíta uhol medzi normálovým vektorom a vektorom medzi polohou agenta a bodom. Ak je tento uhol -90° až 90°, agent vidí daný bod, inak sa daný bod odstráni zo zoznamu.
    2. Pre každú čiaru sa vypočíta uhol medzi normálovým vektorom roviny a jednotlivými koncovými bodmi čiary (rovnako ako pri bodoch sa počíta uhol medzi normálovým vektorom roviny a vektorom z polohy agenta k bodu). Ak agent vidí oba body, pokračuje sa na ďalšiu čiaru, ak nevidí ani jeden bod, čiara sa odstráni zo zoznamu, ak vidí iba jeden bod, vypočíta sa priesečník roviny s čiarou a aktualizuje sa poloha bodu, ktorý agent nevidí.
  4. Vytvorí sa zoznam bodov a čiar, ktoré vidí agent.

sk.fiit.robocup.library.generator.Geometry.java

Trieda obsahuje matematiku, použitú pri generovaní objektov, ktoré vidí agent


!!! Generátor používa súradnice objektov ktoré používa server vo verzii 0.6.7. Pre generovanie videných objektov pre inú verziu servera je potrebné zmeniť súradnice v metóde SeenGenerator.init()