UNIVERZITA OBRANY. Knihovna HLAGate. Programátorská dokumentace. Petr Františ 24.1.2011

Podobné dokumenty
Dokumentace ke knihovně InsDevice

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Programování v C++ 1, 1. cvičení

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

VÝVOJ MAPOVÉHO DÍLA VOJENSKÝCH TOPOGRAFICKÝCH MAP ČESKOSLOVENSKA A ČESKÉ REPUBLIKY

Konstruktory a destruktory

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

přetížení operátorů (o)

Jazyk C++ I. Šablony 2

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

PREPROCESOR POKRAČOVÁNÍ

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ , 5.1 a 5.2 8/14

1 Podrobná specifikace Yunifly Datasheet

Řada programovacích jazyků nabízí prostředky pro řešení meziprocesové komunikace jako je synchronizace a řízení přístupu do kritické sekce.

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/ PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/ stran 1

Jazyk C++ I. Šablony 3

Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Robotický stolní fotbal

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Základy programování (IZP)

VYHLÁŠKA o způsobu stanovení pokrytí signálem zemského rozhlasového vysílání šířeného ve vybraných kmitočtových pásmech Vymezení pojmů

Profilová část maturitní zkoušky 2017/2018

1 Knihovní funkce Skupina funkcí bool Skupina funkcí String Testovací program ELDEC Interface X.XX Example...

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Knihovna GalaxyLib TXV druhé vydání srpen 2012 změny vyhrazeny

Teoretické minimum z PJV

ADT/ADS = abstraktní datové typy / struktury

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

LETECKÁ BITVA NA KKY. Letní semestr, Katedra Kybernetiky Západočeská Univerzita v Plzni. Speciální zadání semestrální práce MATLAB

Knihovna ConvertLib TXV první vydání září 2013 změny vyhrazeny

Programování v C++, 2. cvičení

Operační systémy. Přednáška 4: Komunikace mezi procesy

Úvod do programovacích jazyků (Java)

Cvičení č. 2. Komunikace mezi procesy Program Hodiny. 4 body

Knihovna DataBoxLib TXV první vydání prosinec 2010 změny vyhrazeny

2007 Nokia. V¹echna práva vyhrazena. Nokia, Nokia Connecting People, Nseries a N81 jsou ochranné známky nebo registrované ochranné známky spoleènosti

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Úvod do programování v jazyce Java

Pole a kolekce. v C#, Javě a C++

Základy programování (IZP)

Martin Flusser. December 15, 2016

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Zápis programu v jazyce C#

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Knihovna EpsnetLib TXV první vydání září 2012 změny vyhrazeny

Operační systémy. Přednáška 5: Komunikace mezi procesy

Propojení systému MICROPEL a inteligentní elektroinstalace ABB Ego-n

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Řídicí struktury. alg3 1

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

Principy operačních systémů. Lekce 6: Synchronizace procesů

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

Návrh (úplné znění) VYHLÁŠKA. ze dne. 2013,

Knihovna XmlLib TXV druhé vydání říjen 2012 změny vyhrazeny

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) 28. prosince Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Výrazy, operace, příkazy

Struktura programu v době běhu

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Dynamika objektů. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze

Nejzajímavější jsou události MouseDown a KeyDown.

GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Abstraktní datové typy

PB161 Programování v jazyce C++ Přednáška 10

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Opakování programování

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

K8055D.DLL v Technická příručka. Úvod. Obecné. Konvence volání. Nastavení adresy karty

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Programování v jazyce C a C++

Ukazatele, dynamická alokace

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Knihovna XmlLib TXV první vydání prosinec 2010 změny vyhrazeny

Programovací jazyk C++ Hodina 1

JSR tutorial 2 Transformace v JSR-184

Přednáška 4. Klasické synchronizační úlohy. Implementace procesů, vláken.

Filtrace snímků ve frekvenční oblasti. Rychlá fourierova transformace

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Operační systémy. Cvičení 5: Volání jádra, procesy, vlákna.

uterm03r JEDNOTKA IMPLEMETUJÍCÍ VZDÁLENÝ TERMINÁL TERM03 Příručka uživatele a programátora

setup() { I = 0; } loop() { I = I + 1; }

Mělká a hluboká kopie

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Spojová implementace lineárních datových struktur

Zpráva s popisem softwarového návrhu a specifikací rozhraní prototypového modulu pro odhad chyby a zjemnění sítě

usimt10 JEDNOTKA IMPLEMENTUJÍCÍ OBJEKTY PRO SIMULACI TERMINÁLU TERM10 NA PC Příručka uživatele a programátora

PŘETĚŽOVÁNÍ OPERÁTORŮ

Cvičení č. 6. Synchronizace ve Windows. 3 Body

Prezentace a vysvětlení programového prostředí NXC

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Transkript:

UNIVERZITA OBRANY Knihovna HLAGate Programátorská dokumentace Petr Františ 24.1.2011 Programátorská dokumentace knihovny HLAGate, výsledek projektu DISIM

Popis knihovny Knihovna HLAGate je určena pro propojení hostitelské aplikace do distribuované simulace pomocí protokolu HLA. Knihovna potřebuje nainstalovaný produkt VR-Link firmy MÄK. Bez tohoto nainstalovaného produktu včetně platné licence nabude tato knihovna pracovat. Knihovna HLAGate po spuštění inicializační funkce vytváří nové vlákno (thread). Toto vlákno provede vytvoření komunikačních tříd nástroje VR-Link a pokusí se připojit na RTI. Pokud se připojení zdaří, vytvoří se objekty kritických sekcí a objekt pro řízení simulovaného času v rámci federace. Vlákno vstoupí do smyčky, kdy načítá stav vzdálených entity z federace a publikuje stav lokálních entit. Paralelně k tomuto vláknu knihovna poskytuje funkce pro zjišťování stavu vzdálených entity a k přidání, odebrání nebo změně stavu lokálních entity. Tyto funkce jsou synchronizovány v rámci knihovny s vyžitím objektu kritické sekce, tak aby nedošlo k porušení integrity dat. Inicializace tříd a připojení do federace Načtení vzdálených entit Publikování lokálních entit Synchronizace s časem federace Synchronizační objekty Úložiště vzdálených entit Úložiště lokálních entit Vstupně výstupní funkce knihovny Je knihovna ukončena? Obrázek 1 Vnitřní architektura knihovny HLAGate Jedním z důležitých úkolů, které vykonává knihovna HLAGate je převod souřadnice vzdálených i lokálních entit. VR-Link standardně pracuje s geocentrickou souřadnicovou soustavou, většina aplikací pracujících nad geografickými daty (a vizualizační jádro) pracuje v souřadné soustavě WGS-84 UTM. Proto knihovna HLAGate musí převádět souřadnice entit mezi těmito soustavami. Knihovna HLAGate zpracovává události, ke kterým dochází v rámci federace. Dvě nejvýznamnější události jsou střelba a detonace. Událost střelba je vyvolána vždy, když entita vystřelí (a to i když na nikoho nemíří). Událost detonace je vyvolána při explozi (například, mina, munice, dopad střely atd.).

Při určitém druhu munice tyto události spolu souvisí. Například při střelbě raketou je nejprve vyvolána událost střelba a po dopadu střely je vyvolána událost detonace. Knihovna HLAGate zpracovává tyto události a v případě, že tato událost ovlivní nějakou lokální entitu (za kterou jsme odpovědní) nastaví patřičné příznaky entity v úložišti lokálních entit. Vizualizační systém pomocí funkcí knihovny HLAGate tyto příznaky v pravidelných intervalech čte a reaguje na ně. Při detekci zasažení (střelou nebo detonací) je z příznaků možno určit typ munice, kterým byla entita zasažena a charakter zásahu (přímý, blízký, vzdálený, atd.). Z těchto údajů je vypočítáno poškození entity a vyvolán zvukový a grafický efekt. Toto poškození je zpětně zasláno pomocí funkcí knihovny HLAGate jako stav entity pro ostatní simulátory ve federaci. Vlastní vozidlo Vstupně výstupní funkce knihovny Pozice Stav Reakce na události Zpracování vzdálených entit Databáze vzdálených objektů Vizualizace objektů HlaObjects.cfg Obrázek 2 Architektura propojení vizualizačního systému s knihovnou HLAGate Použití knihovny Knihovna je dodána ve tvaru dynamicky linkované knihovny, spolu s knihovnou se dodává i definiční soubor pro překladač a hlavičkový soubor s definicí vstupních funkcí. Jsou to soubory: HLAGate.dll, HLAGate.lib, HLAGate.h

Soubor HLAGate.lib se přidá k seznamu knihoven pro linker. Soubor HLAGate.dll musí být umístěn v pracovním adresáři vytvořené aplikace.

Seznam poskytovaných funkcí int ConnectToFederation(char *name); Tato funkce zavolá RTI a připojí aplikaci do HLA federace daného jména name ukazatel na řetězec znaků (typ char) se jménem federace. nula pokud funkce proběhla správně, nenulová pokud se během provádění funkce vyskytla chyba int CreateEntity(int platform,int platformdomain,int country,int category,int subcategory,int specific,int extra,char *name); Tato funkce vytvoří lokální entitu, která bude spravována aplikací. Parametry této funkce jsou identifikátory entity dle standardu HLA. int platform,int platformdomain,int country,int category,int subcategory,int specific,int extra char *name proměnné typu int, které reprezentují identifikátor entity dle standardu HLA/DIS ukazatel na řetezec znaků se jménem entity identifikátor vytvořené entity (číslov seznamu entity) nebo hodnota (-1) pokud se během provádění funkce vyskytla chyba. int CreateAggregate(int platform,int platformdomain,int country,int category,int subcategory,int specific,int extra,char *name); Tato funkce vytvoří agregovanou entitu, která bude spravována aplikací. Parametry této funkce jsou identifikátory entity dle standardu HLA. int platform,int platformdomain,int country,int category,int subcategory,int specific,int extra proměnné typu int, které reprezentují identifikátor agregáta dle standardu HLA/DIS

char *name ukazatel na řetezec znaků se jménem agregáta identifikátor vytvořeného agregáta (číslo v seznamu agregátů) nebo hodnota (-1) pokud se během provádění funkce vyskytla chyba. void SetEntityPositionUTM(,double east,double north,double alt); Tato funkce nastaví pozici entity označené proměnnou index na pozici v souřadném systému WGS-84 UTM dle obsahu proměnných east, north a nadmořské výšky alt. double east číslo (identifikátor) entity v seznamu entit x ová souřadnice entity v souřadném systému UTM double north double alt y ová souřadnice entity v souřadném systému UTM výška entity v souřadném systému UTM void SetEntityPosition(,double x,double y,double z); Tato funkce nastaví pozici entity označené proměnnou index na pozici v geocentrickém souřadném systému dle obsahu proměnných x, y a z. double x double y double z číslo (identifikátor) entity v seznamu entit x ová souřadnice entity v geocentrickém souřadném systému y ová souřadnice entity v geocentrickém souřadném systému

z ová souřadnice entity v geocentrickém souřadném systému void SetAggregatePositionUTM(,double east,double north,double alt); Tato funkce nastaví pozici agregované entity označené proměnnou index na pozici v souřadném systému WGS-84 UTM dle obsahu proměnných east, north a nadmořské výšky alt. double east číslo (identifikátor) agregáta v seznamu entit x ová souřadnice agregáta v souřadném systému UTM double north double alt y ová souřadnice agregáta v souřadném systému UTM výška agregáta v souřadném systému UTM void SetAggregatePosition(,double x,double y,double z); Tato funkce nastaví pozici agregáta označené proměnnou index na pozici v geocentrickém souřadném systému dle obsahu proměnných x, y a z. double x double y double z číslo (identifikátor) agregáta v seznamu entit x ová souřadnice agregáta v geocentrickém souřadném systému y ová souřadnice agregáta v geocentrickém souřadném systému z ová souřadnice agregáta v geocentrickém souřadném systému int StartGetEntityList(THLAEntity *entity); Tato funkce vrátí informace o první vzdálené entitě do struktury THLAEntity.

THLAEntity *entity ukazatel na alokovanou strukturu THLAEntity. Tato struktura se naplní údaje o první entitě v seznamu vzdálených entit. nula, pokud funkce proběhla v pořádku a v seznamu vzdálených entit je další entita. int GetNextEntityList(THLAEntity *entity); Tato funkce vrátí informace o další entitě v seznamu vzdálených entit. Informace jsou uloženy ve struktuře THLAEntity. THLAEntity *entity ukazatel na alokovanou strukturu THLAEntity. Tato struktura se naplní údaje o další entitě v seznamu vzdálených entit. nula, pokud funkce proběhla v pořádku a v seznamu vzdálených entit je další entita. void StopGetNextEntityList(); Tato funkce ukončí načítání seznamu vzdálených entit. void Exit(); Tato funkce ukončí spojení s federací a odpojí aplikaci z distribuované simulace. void SetReferencePositionUTM(double east,double north,double alt); Tato funkce slouží k zadání referenční pozice (vlastní pozice entity reprezentující aplikaci). Tato pozice je použita pro převod souřadnic do souřadné soustavy UTM. Tato pozice se vezme jako základ pro převod souřadnic entit a agregátů do souřadné soustavy UTM. Zpravidla se tato pozice ztotožňuje s pozicí vlastní entity (například s vozidlem simulátoru). double east x ová souřadnice referenční pozice v souřadném systému UTM double north double alt y ová souřadnice referenční pozice v souřadném systému UTM

výška referenční pozice v souřadném systému UTM void SetEntityKillState(,bool stat); Tato funkce nastaví status entity index. Status určuje zda je entita živá nebo mrtvá. číslo (identifikátor) entity v seznamu entit bool stat hodnota true, pokud je entita aktivní, hodnota false pokud je entita zničena. void SetEntityDamageState(,int damage); Tato funkce nastaví míru poškození entity index v procentech. číslo (identifikátor) entity v seznamu entit int damage poškození entity v procentech (0-100). bool GetEntityDetonatedFlag(); Tato funkce vrátí příznak, zda entita index byla poškozena blízkou detonací. číslo (identifikátor) entity v seznamu entit true pokud je entita poškozena blízkou detonací, false pokud entita není detonací poškozena bool GetEntityFiredFlag(); Tato funkce vrátí příznak, zda entita index byla zasažena palbou. Po vrácení příznaku se interní příznak vynuluje, tedy při dalším zavolání již tento příznak nevrátí pokud entita nebyla znovu zasažena.

číslo (identifikátor) entity v seznamu entit true pokud je entita poškozena střelbou, false pokud entita není poškozena střelbou

Použité struktury struct CLASS_DECLSPEC THLAEntity { int platform; int platformdomain; int country; int category; int subcategory; int specific; int extra; char name[255]; char id[255]; int damage; //0-3 bool killed; //*** UTM coordinates double x; double y; double alt; double heading; double pitch; double roll; double velx; double vely; double velz; }; //*** geocentric coordinates double geo_x; double geo_y; double geo_z; Struktura THLAEntity je použita pro získání informací o vzdálených entitách. Obsahuje údaje o vzdálené entitě tak jak jsou poskytnuty vlastníkem entity. Proměnné : int platform; int platformdomain; int country; int category; int subcategory; int specific; int extra; tvoří identifikátor typu entity dle standardu HLA. Pole znaků: char name[255]; tvoří slovní název entity.

Pole znaků: char id[255]; tvoří identifikátor výskytu entity v HLA federaci. Proměnné: double x; double y; double alt; obsahují pozici a výšku entity v souřadném systému WGS-84 UTM. Proměnné: double heading; double pitch; double roll; obsahují orientaci entity pomocí trojice eulerových úhlů. Proměnné: double velx; double vely; double velz; obsahují jednotlivé složky vektoru rychlosti entity v metrech za sekundu. Proměnné: double geo_x; double geo_y; double geo_z; obsahují pozici a výšku entity v geocentrickém souřadném systému.

Příklad užití knihovny Tento příklad připojí aplikaci do federace VR-Link. Po připojení vytvoří lokální entitu Uaz a lokální agregovanou entitu MechCeta. Po vytvoření entit periodicky vypisuje stav všech vzdálených entit. Zároveň periodicky kontroluje, zda první entita nebyla poškozena detonací. Pokud ano, nastaví míru poškození. ConnectToFederation("VR-Link"); CreateEntity(1,1,222,1,2,1,0,"Uaz"); CreateAggregate(11,1,225,3,4,0,0,"MechCeta"); SetAggregatePosition(0,677289,5461754,200); SetEntityPositionUTM(1,677289,5461754,200); SetReferencePositionUTM(677289,5461754,200); THLAEntity entity; int ret; char type[255]; int damage=0; do { ret=startgetentitylist(&entity); while (ret>0) { printf("%d:%d:%d:%d:%d:%d:%d, %s id: %s Pos:%f %f %f \n Orient: %f %f %f Velocity: %f %f %f\n ",entity.platform,entity.platformdomain,entity.country,entity.category,enti ty.subcategory,entity.specific,entity.extra,entity.name,entity.id,entity.x, entity.y,entity.alt,entity.heading,entity.pitch,entity.roll,entity.velx,ent ity.vely,entity.velz); printf("%d:%d:%d:%d:%d:%d:%d, %s id: %s Pos:%f %f %f \n",entity.platform,entity.platformdomain,entity.country,entity.category,en tity.subcategory,entity.specific,entity.extra,entity.name,entity.id,entity. x,entity.y,entity.alt); if (GetEntityDetonatedFlag(0)) { printf("we are damaged by detonation!\n"); damage+=25; SetEntityDamageState(0,damage); } ret=getnextentitylist(&entity); } StopGetNextEntityList(); } while(true);