Little Green BATS je holandský tím z univerzity v Groningene. Agent tohto tímu sa skladá z niekoľkých častí a vrstiev. Všetky nižšie vrstvy sú nezávislé od vyšších.
Spodná úroveň komunikácie medzi simulátorom a agentom používa ASCII cez S-výrazy a TCP/IP spojenie. Modul AgentSocketComm zabezpečuje nastavenia tohto spojenia, vytváranie a spracovanie správ a ich transformáciu z a do ľahšie spracovateľnej dátovej štruktúry.
Integrácia vstupu a výstupu je zabezpečená pomocou druhej vrstvy na trochu vyššej úrovni. Na strane vstupu modul Cochlea získa všetky dáta zo stále textovej správy vytvorenej modulom AgentSocketComm a transformuje ich do použiteľnejšie binárne hodnoty. Modul Cerebellus sa používa na zhromažďovanie riadiacich príkazov, pričom z nich v prípade nevyhnutnosti odstráni protichodné príkazy a posunie ich v textovej štruktúre modulu AgentSocketComm, ktorý im v tomto tvare rozumie.
Štyri moduly v tretej vrstve používajú dáta z modulu Cochlea na aktualizovanie modelov do súčasného stavu sveta ako sú aktuálny čas, stav v akom sa nachádza telo agenta, stav sveta a hry a rozostavenie všetkých objektov na ihrisku.
Inteligencia je implementovaná v najvyššej vrstve. Inštancia HumanoidAgent má prístup ku všetkým informáciám nazhromaždených v rozličných moduloch, na základe ktorých posiela akcie do modulu Cerebellus.
Najnižšia trieda knižnice, ktorá zabezpečuje komunikáciu so serverom pomocou TCP soketov. Tiež zabezpečuje spojenie so serverom, posielanie, prijímanie a spracovanie správ. Trieda je navrhnutá ako singleton. Udržuje dve vnútorné fronty pre správy. Jednu pre vstupné a jednu pre výstupné správy. Sú postupne napĺňané a vyprázdňované pri volaní metódy update() triedy AgentSocketComm. Vykoná sa v prípade, že boli prijaté nové dáta zo serveru. Ako bolo spomínané zabezpečuje tiež odosielanie správ na server a spracovanie prijatých správ.
Je to vrstva nad AgentSocketComm, ktorá vyťahuje informácie z dát získaných zo servera a upravuje ich na jednoducho prístupnú formu. Používa vlastné mená pre kĺbové senzory, ktoré sa nezhodujú s názvami používanými serverom. Vnútorné mená sú „head1“, „head2“, „larm1“ až „larm4“ pre ľavú ruku a „rarm1“ až „rarm4“ pre pravú ruku, „lleg1“ až „lleg6“ a „rleg1“ až „rleg6“ pre nohy. Server používa mená ako „laj1“ ,čo je prvý kĺb na ľavej ruke, alebo „rlj3“ čo je zas tretí kĺb na pravej nohe. Modul Cochlea využíva preklad týchto názvov na vlastné, čo následne umožňuje ovládať aj rozdielne modely robotov.
Vracia aktuálny čas.
Udržuje informácie o vlastnom stave agenta. Pozíciu kĺbov, dáta zo senzorov a tiež dáta vyššej zložitosti ako napríklad ťažisko. Pri inicializácii načíta XML konfiguračný súbor s menom, veľkosťou a váhou častí tela agenta a kĺbov. Tieto dáta využíva tiež na nastavenie názvov pre modul Cochlea, takže to nie je potrebné robiť ručne. Po inicializácii je agent pripravený na použitie.
Dáta ponúkané z Cochlea nemusia byť priamo použiteľné, pretože môžeme potrebovať informácie, ktoré zo získaných dát vyplývajú. Práve toto robí WorldModel. Ponúka napríklad aktuálny stav hry alebo veľkosť ihriska, ale tiež aj informácie na vyššej úrovni ako kto útočí, alebo či je iný hráč bližšie k lopte. Na začiatku WorldModel taktiež potrebuje vedieť názov tímu pre niektoré funkcie. Následne sa model aktualizuje v každom cykle. WorldModel získava dáta z Cochlea ak boli aktualizované pred aktualizovaním WorldModel.
Localizer je abstraktná trieda od ktorej sa odvodzujú rôzne implementácie. Jednou z nich je KalmanLocalizer, ktorý udržuje pozíciu hráča, lopty, ostatných hráčov, bránky a rohových zástaviek. Systém používa viacero koordinačných pozícií.
• Pozícia agenta znazorňuje jeho pozíciu, pričom stred je v jeho ťažisku. Kladná os x smeruje paralelne s pravým ramenom, kladná os y priamo pred telo agenta a kladná os z smerom do stredu hlavy agenta. Tento systém používa AgentModel na koordinovanie častí tela.
• Lokálna pozícia. Stred tiež súradnicovej sústavy je tiež v ťažisku hráča, akurát že kladná os z smeruje vždy priamo hore a osi x a y ležia rovnobežne s čiarami ihriska. Túto sústavu používa Localizer na orientáciu a určenie pojmov ako „predo mnou“, „vedľa mňa“, „nado mnou“.
• Globálna pozícia je plne nezávislá od pozície agenta. Jej stred leží v strede ihriska. Kladná os x smeruje do stredu súperovej bránky, kladná os y vľavo pri pohľade v smere osi x a kladná os z nahor kolmo na osi x a y. Toto je druhá sústava, ktorú používa Localizer a je najlepšia na určenie globálnych pomerov.
Spája výsledky z viacerých zdrojov a vytvára akcie, pričom odstraňuje protichodné príkazy. Aktuálne má k dispozícií 5 rôznych akcií a to:
• MoveJointAction: pohni jednoduchým kĺbom alebo zložitým v jednej osi
• MoveHingeJointAction: pohni jednoduchým kĺbom
• MoveUniversalJointAction: pohli zložitým kĺbom v smere všetkých osí
• BeamAction: nasmeruj sa na určitú pozíciu
• SayAction: povedz niečo
Po vyskladaní akcie, sa zavolá outputCommands() na odoslanie akcie cez AgentSocketComm.
Zabezpečuje všetko potrebné pre fungovanie agenta.