Obsah

Analýza fyzikálneho modelu

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.



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).

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

Ľudský rozhodca

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°.

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 selfindicating 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.

Oficiálna wiki stránka SimSparku: https://gitlab.com/robocup-sim/SimSpark/wikis/Perceptors


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 )
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))

Odkaz na ofici8lnu wiki str8nku SimSparku> https://gitlab.com/robocup-sim/SimSpark/wikis/Effectors


Ihrisko

Šírka ihriska je 20 metrov a jeho dĺžka 30 metrov (pozn. Platí pre najnovšiu verziu serveru, predtým boli rozmery 21×14 metrov). V strede je kruh s polomerom 2 metre. 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. 7 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.

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.

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.

nao.jpg

No.DescriptionHinge JointPerceptor nameEffector name
1Neck Yaw[0][0]hj1he1
2Neck Pitch[0][1]hj2he2
3Left Shoulder Pitch[1][0]laj1lae1
4Left Shoulder Yaw[1][1]laj2lae2
5Left Arm Roll[1][2]laj3lae3
6Left Arm Yaw[1][3]laj4lae4
7Left Hip YawPitch[2][0]llj1lle1
8Left Hip Roll[2][1]llj2lle2
9Left Hip Pitch[2][2]llj3lle3
10Left Knee Pitch[2][3]llj4lle4
11Left Foot Pitch[2][4]llj5lle5
12Left Foot Roll[2][5]llj6lle6
13Right Hip YawPitch[3][0]rlj1rle1
14Right Hip Roll[3][1]rlj2rle2
15Right Hip Pitch[3][2]rlj3rle3
16Right Knee Pitch[3][3]rlj4rle4
17Right Foot Pitch[3][4]rlj5rle5
18Right Foot Roll[3][5]rlj6rle6
19Right Shoulder Pitch[4][0]raj1rae1
20Right Shoulder Yaw[4][1]raj2rae2
21Right Arm Roll[4][2]raj3rae3
22Right Arm Yaw[4][3]raj4rae4


Body partHinge Joint
NameParentTranslationMassGeometryNameAnchorAxisMinMax
torso 1.2171Box
0.1, 0.1, 0.18
necktorso0, 0, 0.090.05Cylinder
L: 0.08 R: 0.015
HJ10, 0, 00,0,1-120120
headneck0, 0, 0.0650.35Sphere 0.065HJ20, 0,-0.0051,0,0-4545
shouldertorso0.098, 0, 0.075®
-0.098, 0, 0.075(l)
0.07Sphere 0.01AJ10, 0, 01,0,0-120120
upperarmshoulder0.01, 0.02, 0®
-0.01, 0.02, 0(l)
0.150Box
0.07, 0.08, 0.06
AJ2-Translation0,0,1-95®
-1(l)

95(l)
elbowupperarm-0.01, 0.07, 0.009®
0.01, 0.07, 0.009(l)
0.035Sphere 0.01AJ30, 0, 00,1,0-120120
lowerarmelbow0, 0.05, 00.2Box
0.05, 0.11, 0.05
AJ4-Translation0,0,1-1®
-90(l)
90®
1(l)
hip1torso0.055, -0.01, -0.115®
-0.055, -0.01,-0.115(l)
0.09Sphere 0.01LJ10, 0, 0-0.7071,0,0.7071®
-0.7071,0,-0.7071(l)
-901
hip2hip10, 0, 00.125Sphere 0.01LJ20, 0, 00,1,0-45®
-25(l)
25®
45(l)
thighhip20, 0.01, -0.040.275Box
0.07, 0.07, 0.14
LJ3-Translation1,0,0-25100
shankthigh0,0.005,-0.1250.225Box
0.08, 0.07, 0.11
LJ40,-0.01, 0.0451,0,0-1301
ankleshank0, -0.01,-0.0550.125Sphere 0.01LJ50, 0, 01,0,0-4575
footankle0, 0.03,-0.0400.2Box
0.08, 0.16, 0.02
LJ6-Translation0,1,0-25®
-45(l)
45®
25(l)