Analýza fyzikálneho modelu

Z RoboCupTP wiki

Prejsť na: navigácia, hľadanie

Obsah

Server

Server SimSpark je fyzikálny simulačný multiagentový systém pre agentov v troj-dimenzionálnom priestore. Sever je vytvorený v jazykoch C++ a Ruby a na vizualizáciu sú použité dve knižnice OpenGL a SDL. Keďže jadro simulátora nebolo nikdy prispôsobené pre simuláciu futbalu, všetky služby simulátora prispôsobené futbalu boli implementované ako pluginy.


Simulačný cyklus


SimsSpark implementuje jednoduchý model na ošetrovanie eventov simulácie a na ošetrovanie všetkých akcií, ktoré prichádzajú od agenta. Keďže server sa nesnaží vyrovnávať oneskorenie v sieti alebo výpočtové zdroje agentov, opakujúce sa simulácie môžu mať rôzny výstup. Hlavná slučka simulácie(Simulation update loop) v simsparku je plne modifikovateľná, pretože je vytvorená z pluginov nazývaných „simcontrol nodes“. Pri štarte servera je vyvolaný init event a pri ukončovaní jeho behu done event. Simulačný server taktiež zaznamenáva údaj o dĺžke trvania posledného cyklu. Simcontrol nodes sa stará o meranie času a synchronizáciu simulačného času s reálnym časom použitým na renderovanie scény. Simulačná slučka sa snaží aby každý cyklus trval rovnako (20ms). Pokiaľ je simulácia rýchlejšia, zvyšný čas server čaká. Naopak ak je pomalšia, aktualizuje sa len fyzika a server nekomunikuje s agentmi.
RunLoop.png
V každom cykle je najskôr vyvolaný „sense event“ a potom „action event“, dôsledkom čoho akcie ktoré agent poslal v ntom cykle budú vykonané v nasledujúcom (n+1)cykle (Obrázok 1).
Obrázok 1
Keďže dnešné počítače umožňujú spracovávať paralelizmus, je možné server aby server bežal v multi-thread režime. V tomto režime „simcontrol nodes“ sú spúšťané paralelne, a aj výpočet fyziky je pustený v samostatnom vlákne.

Rcssserver3d


Rcssserver3d je oficiálne prostredie pre 3D Soccer Simulation League v RoboCupe. Implementuje simuláciu futbalového zápasu, v ktorom dva tímy až jedenástich robotov hrajú proti sebe. Súčasným modelom robota je robot nazývaný Nao. Množstvo pravidiel zápasu je možné automaticky kontrolovať, aj keď veľa situácií ako je napríklad neférové správanie hráčov musí byť kontrolovaných ľudským rozhodcom cez Monitor.

Automatický rozhodca

  • Sleduje čas každej polovice
  • Sleduje, ktorý hráč sa posledný dotkol lopty
  • Sleduje skóre
  • Sleduje či je lopta mimo ihriska a rozhoduje komu má patriť lopta pri výkope, vyhadzovaní.
  • Počas voľného kopu musí byť protivník minimálne 1,3m od lopty.
  • Počas výkopu brankára musí byť protivník minimálne 1,0m od lopty.
  • Postavenie mimo hry je implementované len experimentálne.
  • Snaží sa zabraňovať nechcenému zablokovaniu hry nahromadením robotov okolo lopty, a taktiež detekuje ležiacich robotov na ihrisku.
  • Sleduje, či tím neblokuje svoju bránku viacerými hráčmi.

Ľudský rozhodca

  • Rozhoduje cez pripojený monitor.
  • Je zodpovedný za začatie hry na začiatku každej polovice zápasu.
  • Rieši situácie, keď sa hra uviazne v mŕtvom bode, napríklad keď sa navzájom blokujú hráči a nemôžu sa dostať k lopte. Taktiež rozhoduje fauly ( používanie rúk a nevhodné správanie).

Komunikačný protokol

Komunikácia so serverom prebieha pomocou TCP/IP protokol u. Správy posielané a prijímané serverom sú vo formáte S-výrazov. Správy sú vytvárané z ASCII znakov, čo umožňuje zakódovanie jedného znaku do jedného bytu. Správa má 32bitovú hlavičku(big endian), v ktorej je uložené poradové číslo správy. Nao robot Nao je humanoidný robot používaný pri RoboCupe s reálnymi hráčmi. Jeho výška je 57cm a váha 4,5kg. Podľa neho je vytvorený model Nao robota na simulačnom serveri rcssserver3d. Je vybavený množstvom perceptorov a efektorov, pomocou ktorých agent získava informácie o stave robota na serveri(perceptory) a manipuluje s ním(efektory). Obsahuje 22 kĺbov, pričom každý kĺb je možné natočiť len jedným smerov(na rozdiel od starších verzií, ktoré obsahovali aj univerzálny kĺb). Zložitejšie kĺby ako je napríklad bedrový kĺb alebo ramenný je zložený z viacerých jednoduchých kĺbov.

Perceptory

Na vnímanie sveta v RoboCup 3D slúžia perceptory. Server zasiela agentovi informácie o samotnom agentovi, videných objektoch a podobne.

GyroRate slúži na opis orientácie tela robota vzhľadom k jednotlivým osiam. Tento perceptor je umiestnený v hornej časti robota Nao.

Message format: (GYR (n <name>) (rt <x> <y> <z>))
<name>: The name of the body containing the gyro rate perceptor.
<x> <y> <z>: The current angular velocities along the three axes of freedom of the corresponding body in degrees per second and an accuracy of two digits.
Example message: (GYR (n torso) (rt 0.01 0.07 0.46))
Frequency: Every cycle
Noise model: None



HingeJoint určuje o koľko stupňov je ktorý kĺb natočený.

Message format: (HJ (n <name>) (ax <ax>))
<name>: The name of the corresponding hinge joint.
<ax>: The current position angle in degrees and an accuracy of two digits.
Example message: (HJ (n laj3) (ax -1.02))
Frequency: Every cycle
Noise Model: None



ForceResistance perceptor slúži na oznámenie o pôsobiacej sile na časť tela a jej vektore. Správa obsahuje dvoje súradnice, jedny určujú bod, na ktorý sila pôsobí a druhé súradnice určujú vektor tejto sily

Message format: (FRP (n <name>) (c <px> <py> <pz>) (f <fx> <fy> <fz>))
<name>: The name of the body, to which the force resistance perceptor belongs.
<px> <py> <pz>: The local coordinates of the origin of the applied force in meter and an accuracy of two digits.
<fx> <fy> <fz>: The components of the force vector with an accuracy of two digits, while the length of the force vector represents the given force in newton (kg m/s2).
Example message: (FRP (n lf) (c -0.14 0.08 -0.05) (f 1.12 -0.26 13.07))
Frequency: Every cycle, but only in case of an present collision.
Noise model: None



Accelerometer perceptor umiestnený v hornej časti tela počíta zrýchlenie.

Message format: (ACC (n <name>) (a <x> <y> <z>))
<name>: The name of the body containing the accelerometer.
<x> <y> <z>: The current acceleration along the three axes of freedom of the corresponding body in m/s2 and an accuracy of two digits.
Example message: (ACC (n torso) (a 0.00 0.00 9.81))
Frequency: Every cycle
Noise model: None



Vision perceptor dostáva informácie o objektoch videných agentom (ostatní agenti, lopta, statické body ihriska). Zorné pole robota Nao je 120°.
Vision Perception.png
Chyby vnášané do vision perceptora: Malá kalibračná chyba je pridávaná do pozície kamery. Pre každú os z intervalu  -0.005 m až 0.005 m. Chyba je vypočítaná raz a zostáva nemenná počas celého zápasu. Dynamický šum s normálnym rozdelením okolo 0 Chyba vzdialenosti: σ = 0.0965 Chyba φ: µ = 0.1225 Chyba ϑ : µ = 0.1480

GameState vysiela niekoľko základných informácií o aktuálnom stave hry.

Message format: (GS (t <time>) (pm <playmode>))
<time>: The current play time in seconds.
<playmode>: The current play mode of the soccer game.
Example message: (GS (t 0.00) (pm BeforeKickOff))
Frequency: Every cycle



HearPerceptor – priama komunikácia medzi robotmi nie je povolená, ale môžu si vymieňať správy cez simulačný server. Na túto komunikáciu slúži tento perceptor.

Message format: (hear <time> self/<direction> <message>)
<time>: The simulation time at which the given message was heard in seconds (a real number.)
<direction>: Either a relative horizontal direction in degrees indicating where the sound originated, or self indicating that the player is hearing their own words. (TODO: check of the direction is relative to the orientation of the head.)
<message>: Up to 20 characters, which may be taken from the ASCII printing character subset [0x20, 0x7E] except the white space character and the normal brackets ( and )
Example messages: (hear 12.3 self helloworld)
(hear 12.3 -12.7 helloyourself)
Frequency: Head capacity model


Na tento perceptor sa vzťahujú nasledujúce obmedzenia: Maximálna dĺžka správy je 20 bytov Správa môže obsahovať iba znaky <0x20, 0x7E> okrem medzery a obyčajných zátvoriek Správa vyslaná zo vzdialenosti viac ako 50m nie je ,,počutá“ Každý hráč môže v jednom okamihu počuť najviac jednu správu z každého tímu. Perióda obnovovania senzoru je 0,4 sekundy. Ak príde viacero správ toho istého tímu, sú spracované v poradí, v akom prišli a zvyšné správy sú ignorované. Hráč počuje svoje správy vždy.



[1]
Efektory

Create – v momente ako je agent pripojený na server nie je viditeľný a nemôže zasiahnuť do simulácie. Pomocou Create hráč odovzdá serveru cestu ku konfiguračnému súboru, ktorý definuje fyzickú reprezentáciu agenta a množinu jeho perceptorov a efektorov.

Message format (scene <filename>)
Example message (scene rsg/agent/nao/nao.rsg)



HingeJoint efektor dávajúci príkaz na ohnutie kĺbu.

Message format (<name> <ax>)
Example message (lae3 5.3)



Beam efektor určuje umiestnenie agenta na hracej ploche pred začatím polčasu

Message format (beam <x> <y> <rot>)
Example message (beam 10.0 -10.0 0.0)



Say efektor slúži na odoslanie správy pre komunikáciu medzi hráčmi.

Message format (say <message>)
Example message (say helloworld)



Init priradí hráča k tímu a pridelí mu číslo. Ak agent posiela ako číslo 0, server priradí hráčovi najbižšie voľné číslo automaticky

Message format (init (unum <playernumber>)(teamname <yourteamname>))
Example message (init (unum 1)(teamname FHO))


[2]

Ihrisko

Šírka ihriska je 14 metrov a jeho dĺžka 21 metrov (pozn. Platí pre najnovšiu verziu serveru, predtým boli rozmery 18x12 metrov). V strede je kruh s priemerom 1.5 metra. V skutočnosti ale nejde o skutočný kruh, ale je vymodelovaný z niekoľkých krátkych úsečiek. Bránky sú široké 2.1 metra, vysoké 0.8 metra a hlboké 0.6 metra. Rozmery bránkoviska sú 3.9m x 1.8m. Ihrisko je ohraničené hranicou širokou 10 metrov v každom smere. Po tejto ploche mimo ihriska sa agent pohybovať nemôže. Ihrisko obsahuje 8 orientačných statických bodov rozpoznateľných agentmi. Štyri sa nachádzajú v rohoch ihriska (F1L, F2L, F1R, F2R) v nulovej výške (súradnica Z – 0.0). Ďalšie 4 sa nachádzajú na bránkach (G1L, G2L, G1R, G2R), konkrétne na žŕdkach vo výške 0.8 metra.

Ihrisko1.png

Ihrisko2.png


Lopta

Lopta nachádzajúca sa v simulačnom prostredí má rádius 0.04 metra a jej váha je 26 gramov.

Fyzika pri pohybe lopty

Pohyb lopty je rozdelený do dvoch fáz.

Lopta.png

Prvá fáza:

Vektor sily pri pohybe lopty je definovaný ako <math>F_k</math>, kde




Druhá fáza:

Celkové sily sú

Súčiniteľ odporu pre loptu


Agent

Hráčov (agentov) reprezentujú humanoidné roboty Nao. Ich výška je približne 57 cm a váha asi 4.5 kg. Nao má 22 kĺbov, 6 v každej nohe, 4 v každej ruke a 2 v krku.

450px-Models NaoAnatomy.png


No. Description Hinge Joint Perceptor name Effector name
1 Neck Yaw [0][0] hj1 he1
2 Neck Pitch [0][1] hj2 he2
3 Left Shoulder Pitch [1][0] laj1 lae1
4 Left Shoulder Yaw [1][1] laj2 lae2
5 Left Arm Roll [1][2] laj3 lae3
6 Left Arm Yaw [1][3] laj4 lae4
7 Left Hip YawPitch [2][0] llj1 lle1
8 Left Hip Roll [2][1] llj2 lle2
9 Left Hip Pitch [2][2] llj3 lle3
10 Left Knee Pitch [2][3] llj4 lle4
11 Left Foot Pitch [2][4] llj5 lle5
12 Left Foot Roll [2][5] llj6 lle6
13 Right Hip YawPitch [3][0] rlj1 rle1
14 Right Hip Roll [3][1] rlj2 rle2
15 Right Hip Pitch [3][2] rlj3 rle3
16 Right Knee Pitch [3][3] rlj4 rle4
17 Right Foot Pitch [3][4] rlj5 rle5
18 Right Foot Roll [3][5] rlj6 rle6
19 Right Shoulder Pitch [4][0] raj1 rae1
20 Right Shoulder Yaw [4][1] raj2 rae2
21 Right Arm Roll [4][2] raj3 rae3
22 Right Arm Yaw [4][3] raj4 rae4
Available hinge joints of the Nao robot.


512px-Models NaoBoxModel.png

Body part Hinge Joint
Name Parent Translation Mass Geometry Name Anchor Axis Min Max
torso 1.2171 Box
0.1, 0.1, 0.18
neck torso 0, 0, 0.09 0.05 Cylinder
L: 0.08 R: 0.015
HJ1 0, 0, 0 0,0,1 -120 120
head neck 0, 0, 0.065 0.35 Sphere 0.065 HJ2 0, 0,-0.005 1,0,0 -45 45
shoulder torso 0.098, 0, 0.075(r)
-0.098, 0, 0.075(l)
0.07 Sphere 0.01 AJ1 0, 0, 0 1,0,0 -120 120
upperarm shoulder 0.01, 0.02, 0(r)
-0.01, 0.02, 0(l)
0.150 Box
0.07, 0.08, 0.06
AJ2 -Translation 0,0,1 -95(r)
-1(l)
1(r)
95(l)
elbow upperarm -0.01, 0.07, 0.009(r)
0.01, 0.07, 0.009(l)
0.035 Sphere 0.01 AJ3 0, 0, 0 0,1,0 -120 120
lowerarm elbow 0, 0.05, 0 0.2 Box
0.05, 0.11, 0.05
AJ4 -Translation 0,0,1 -1(r)
-90(l)
90(r)
1(l)
hip1 torso 0.055, -0.01, -0.115(r)
-0.055, -0.01,-0.115(l)
0.09 Sphere 0.01 LJ1 0, 0, 0 -0.7071,0,0.7071(r)
-0.7071,0,-0.7071(l)
-90 1
hip2 hip1 0, 0, 0 0.125 Sphere 0.01 LJ2 0, 0, 0 0,1,0 -45(r)
-25(l)
25(r)
45(l)
thigh hip2 0, 0.01, -0.04 0.275 Box
0.07, 0.07, 0.14
LJ3 -Translation 1,0,0 -25 100
shank thigh 0,0.005,-0.125 0.225 Box
0.08, 0.07, 0.11
LJ4 0,-0.01, 0.045 1,0,0 -130 1
ankle shank 0, -0.01,-0.055 0.125 Sphere 0.01 LJ5 0, 0, 0 1,0,0 -45 75
foot ankle 0, 0.03,-0.035 0.2 Box
0.08, 0.16, 0.03
LJ6 -Translation 0,1,0 -25(r)
-45(l)
45(r)
25(l)
Osobné nástroje