vrecko
virtual reality framework
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
CarControlUnit.h
Go to the documentation of this file.
1
#ifndef CAR_CONTROL_UNIT
2
#define CAR_CONTROL_UNIT
3
4
#include <
vrecko/Ability.h
>
5
#include <osg/Matrix>
6
#include "
CCUStructs.h
"
7
#include "
CarState.h
"
8
#include "
CarEnvirons.h
"
9
10
namespace
CarSim {
11
class
CarControlUnit
:
public
vrecko::Ability
{
12
public
:
13
CarControlUnit
();
14
// tento konstruktor bude slouzit k nastaveni generovanych aut
15
CarControlUnit
(
const
unsigned
int
startRoad
,
const
unsigned
int
stopRoad
,
16
const
bool
startDirection
,
const
bool
stopDirection
,
17
const
float
startEdge,
const
float
stopEdge,
18
const
float
startOffset,
const
float
stopOffset,
19
const
float
recVelOnFstJunc,
const
unsigned
int
fstJuncTurn,
20
Ability
*
const
pRoadsState
,
Ability
*
const
pCEU,
const
std::vector<unsigned int> *
const
pPath);
21
~CarControlUnit
();
22
23
void
preInitialize
(
void
);
24
void
update
(
void
);
25
26
bool
loadXMLParameters
(XERCES_CPP_NAMESPACE_QUALIFIER
DOMNode
*pParametersNode);
27
protected
:
28
Parameters
params
;
29
// I. jestlize neni auto odsunuto (pozna se to z params.carNextJuncRel), bude zde
30
// cas, po ktery auto stoji pred (tesne) bodem stopBeforeJunc a ceka az
31
// dostane povoleni jet krizovatkou; jestlize se ten cas nepocita, bude obsahovat -1.0,
32
// jinak hodnotu >=0.0;
33
// II. jestlize auto bylo na hrane odsunuto a
34
// a) bylo odsunuto nejdriv (1. ze vsech aut, ktere jsou nyni
35
// odsunuty na hrane), bude zde cas, ktery uplynul od posledniho pokusu dostat
36
// se z kraje vozovky zpatky do ni nebo od doby, kdy se auto stalo prvnim (nejdrive)
37
// odsunutym autem na hrane
38
// b) nebylo odsunuto nejdriv, bude obsahovat hodnotu -1.0
39
// III. ve zbylych pripadech -1.0
40
float
timeWaiting
;
41
42
// rika, zda bylo auto nastaveno rucne (false) nebo vygenerovano (true)
43
const
bool
gen
;
44
45
// jestlize je true, nastala chyba v inicializaci, takze se odregistruje
46
// aktualizovani CCU
47
bool
errorOccuredInInit
;
48
// rika, zda byla provedena inicializace v metode update()
49
bool
initBool
;
50
51
// z XML souboru se vyextrahuje silnice (id pro Road - ulozi se
52
// v promenne startRoad) pres uzel StartRoad a jeji smer (true - "forward"
53
// nebo false - "backward" - ulozi se v promenne startDirection) pres uzel startDirection,
54
// ktere uruji hranu, na ktere auto zacina;
55
unsigned
int
startRoad
;
56
bool
startDirection
;
57
// obdobne je tomu s stopRoad a stopDirection, ktere urcuji,
58
// na ktere hrane auto zastavuje
59
unsigned
int
stopRoad
;
60
bool
stopDirection
;
61
62
// doporucena rychlost na pristi krizovatce od RoadsState (ulozi se zde,
63
// aby se v kazdem snimku nemusela pocitat znovu v RoadsState);
64
// jestlize je < 0, neobsahuje aktualni data
65
float
recVelocityOnJunc
;
66
67
// ukazatel na abilitu RoadsState
68
Ability
*
pRoadsState
;
69
70
// cas zjisteny v minulem snimku
71
osg::Timer_t
lastTick
;
72
73
/*// slouzi ke zjisteni prumerneho poctu aktualizaci jednotky
74
// CCU 1. generovaneho auta za sekundu v 1. minute
75
bool isFPSmeasured;
76
float totalTime;
77
unsigned int count;*/
78
79
// rika, zda auto bude na pristi krizovatce zatacet doleva nebo doprava
80
unsigned
int
nextJuncTurn
;
81
82
// metody, ktere provedou inicializaci v ramci metody update()
83
// (slouzi jen pro negenerovana auta)
84
void
init
();
85
void
initPositionAndDirection
();
86
// metoda, ktera zkontroluje vstupni XML parametry
87
void
checkInputXMLParameters
();
88
// metoda, ktera urci pres RoadsState nejkratsi cestu pro auto
89
void
computeShortestPath
();
90
// metoda, ktera vypocita optimalni rychlost prujezdu 1. kriz. v ceste
91
void
computeRecVelOnFstJunc
();
92
// metoda urci, jakym smerem (viz nextJuncTurn) se auto vyda na prvni
93
// krizovatce
94
void
figureOutFirstJuncTurn
();
95
96
// metoda, ktera ukonci aktualizovani auta, u Removera prihlasi toto auto
97
void
quitAfterError
();
98
99
// vrati pocet sekund, ktere ubehly od posledniho updatu
100
float
getTimeFromLastUpdate
();
101
102
// metoda nastavi blinkry pres jednotku CEU podle nextJuncTurn,
103
// pokud jeste nejsou ve spravnem stavu
104
// (jestlize auto zataci doleva, zapne se levy blinkr, pokud jeste neni zapnuty;
105
// jestlize doprava, tak pravy blinkr (pokud neni zapnuty) a jestlize auto jede rovne,
106
// vypnou se blikry (pokud jeste nejsou vypnute));
107
// aktualni stav blinkru urcuje druhy parametr blinkLightState;
108
// jestlize je parametr isEmergency true, nenastavuji se blinkry podle
109
// nextJuncTurn, ale jestli jeste vsechny neblikaji, tak zacnou;
110
void
setBlinkers
(
Ability
*
const
pCEU,
const
unsigned
int
blinkLightState,
111
const
bool
isEmergency);
112
113
};
114
115
// tato metoda vypocita vzdalenost, po kterou musi auto brzdit, aby
116
// se jeho aktualni rychlost snizila na pozadovanou rychlost
117
// (jestlize je pozadovana rychlost vetsi nez aktualni, vrati se 0.0);
118
// parametry:
119
// carVel - aktualni rychlost auta
120
// desiredVel - pozadovana rychlost
121
// carDecel - zpomaleni, kterym bude auto brzdit
122
// hillAcc - prirustek zrychleni diky naklonu vozovky
123
// (pred krizovatkou budou zatim vsechna auta brzdit se zpomalenim AVERAGE_CAR_DEC;
124
// maximalni zpomaleni bude vyuzito v budoucnu pri krizovych situacich)
125
float
getBrakeDist
(
const
float
carVel,
const
float
desiredVel,
126
const
float
carDecel,
const
float
hillAcc);
127
}
128
129
#endif
130
131
132
include
vreckoAP
CarSim
CarControlUnit.h
Generated on Tue Feb 19 2013 10:23:42 for vrecko by
1.8.3.1