Interpreter opisu dziaªa« drona wtyczki 1 Ogólny opis zadania 2

Transkrypt

Interpreter opisu dziaªa« drona wtyczki 1 Ogólny opis zadania 2
Interpreter opisu dziaªa« drona wtyczki
1
Ogólny opis zadania
Nale»y napisa¢ program, który b¦dzie w stanie przeczyta¢ z pliku tekstowego sekwencj¦
polece« lotu drona, a nast¦pnie zasymulowa¢ jego dziaªanie i zapisa¢ w pliku tekstowym
wspóªrz¦dne kolejnych jego poªo»e«. ‘cie»ka przelotu powinna by¢ te» wizualizowana.
Analiza skªadni polece« ma by¢ realizowana w oparciu o
, które b¦d¡ bibliotekami dzielonymi ªadowanymi dynamicznie w trakcie dziaªania programu. Zakªada si¦,
»e z ka»dym rodzajem polecenia skojarzona jest odpowiednia wtyczka, które obsªuguje
dane polecenie. Program powinien dopuszcza¢ mo»liwo±¢ rozszerzenia skªadni opisu ruchu drona poprzez dopuszczenie istnienia nowych polece«.
jednej wtyczki ma
umo»liwia¢ interpretacj¦ pojedynczego nowego rodzaju polecenia.
wtyczki
Wª¡czenie
2
Skªadnia polece« w pliku
Przyjmuje si¦, »e ka»de z polece« zapisywane jest w jednej linii. Na pocz¡tku wyst¦puje
nazwa plecenia. Mo»e by¢ ona poprzedzona dowoln¡ ilo±ci¡ znaków
. Po niej
nast¦puje lista parametrów oddzielonych tak»e dowoln¡ ilo±ci¡ znaków
. Zakªada
si¦, »e program bez dodatkowych
powinien obsªugiwa¢ trzy polecenia:
biaªych
biaªych
wtyczek
Fly lot w przód z zadan¡ pr¦dko±ci¡ horyzontaln¡ i wertykaln¡,
Turn skr¦t po ªuku,
Rotate obrót wokóª wªasnej osi.
W dalszej cz¦±ci przedstawiona jest skªadnia poszczególnych polece« oraz przykªady ich
u»ycia.
2.1
Polecenie
Fly
Polecenie to powoduje ruch drona do przodu z zadan¡ pr¦dko±ci¡ horyzontaln¡ oraz pr¦dko±ci¡ wertykaln¡ (wznoszenie lub opadanie). W wersji podstawowej programu mo»na
zaªo»y¢ uproszczenie polegaj¡ce na tym, »e dron od razu ma zadan¡ pr¦dko±¢ i utrzymuje
j¡ na zadanym odcinku lotu. Skªadnia polecenia:
Fly
szybko±¢_hor, szybko±¢_wer, dªugo±¢_drogi;
Zakªada si¦, »e jednostkami parametrów s¡ odpowiednio: [ ms ], [m].
Szybko±¢ drona mo»e by¢ dodatnia (lot do przodu) lub ujemna (lot do tyªu) lub te»
zero (zatrzymanie). W tym ostatnim przypadku dªugo±¢ drogi musi mie¢ równie» warto±¢
0. W ogólnym przypadku dªugo±¢ drogi musi by¢ liczb¡ nieujemn¡.
2.2
Polecenie
Turn
Dron ma mie¢ mo»liwo±¢ skr¦tu po zadanym ªuku. Operacj¦ t¦ umo»liwia polecenie Turn.
Jego parametrami s¡: pr¦dko±¢ drona, dªugo±¢ drogi i promie« krzywizny ªuku. Skªadnia
polecenia:
Turn
pr¦dko±¢_drona dªugo±¢_drogi promie«_krzywizny
1
], [mm], [mm].
Zakªada si¦, »e jednostkami parametrów s¡ odpowiednio: [ mm
s
Zakres i interpretacja dopuszczalnych warto±ci pr¦dko±ci i dªugo±ci drogi s¡ analogiczne jak we wcze±niejszym przypadku. W przypadku promienia krzywizny toru ruchu
przyjmuje si¦, »e jego warto±¢ musi by¢ ró»na od zera. Dla warto±ci dodatnich skr¦t jest
realizowany
, za± dla warto±ci ujemnych w kierunku przeciwnym.
w lewo
2.3
Polecenie
Rotate
Zmiana orientacji drona mo»na dokona¢ nie tylko poprzez skr¦t po ªuku, ale równie»
poprzez obrót wokóª wªasnej osi. Temu sªu»y niniejsze polecenie. Parametrami jego s¡
szybko±¢ k¡towa i dªugo±¢ ªuku. Skªadnia polecenia:
Rotate
szybko±¢_k¡towa k¡t_obrotu
◦
Zakªada si¦, »e jednostkami parametrów s¡ odpowiednio: [ s ] (stopnie na sekund¦), [◦ ]
(stopnie).
K¡t obrotu (podobnie jak we wcze±niejszych przypadkach droga) mo»e by¢ warto±ci¡
nieujemn¡. Szybko±¢ k¡towa mo»e by¢ warto±ci¡ ujemn¡ (obrót w prawo) lub warto±ci¡
dodatni¡ (obrót w lewo) lub te» warto±ci¡ 0 (zatrzymanie drona).
2.4
Przykªad u»ycia polece«
Poni»ej przedstawiona jest przykªadowa sekwencja wcze±niej opisywanych polece«. Sekwencja ta mo»e znale¹¢ si¦ w pliku tekstowym, który b¦dzie musiaª zosta¢ wczytany
przez program. W pliku tym mog¡ wyst¡pi¢ polecenia dla preprocesora j¦zyka C, które
musz¡ by¢ poprawnie zinterpretowane.
#define ROTATE_SPEED
30
/*
* Przykªadowy zestaw polece«
*/
Fly 2 1 30
// Start niezbyt szybki
Fly 0 0 0
// A zatrzymujemy
Rotate ROTATE_SPEED 40
Fly 0 0 0
Rotate 30 60
Fly 0 0 0
Fly 3 0.5 3
Fly 1 -0.7 4
3
Wymagania co do programu
Program realizuj¡cy sformuªowane wcze±niej zadanie ma by¢ napisany w j¦zyku ANSI
C++11. Ma on dostarcza¢ proste tekstowe menu. Ksztaªt ±cie»ki wzdªu» której przeleci
dron powinien zosta¢ zapisany w pliku tekstowym, jako zbiór wspóªrz¦dnych punktów.
Wspóªrz¦dne pojedynczego punktu (x, y, z) powinny by¢ zapisane w jednej linii, mi¦dzy
liniami nie powinno by¢ »adnych odst¦pów, np.
0 0 0
1.5 1.0 1.3
1.45 1.5 1.2
2
Menu programu powinno pozwala¢ na wykonanie nast¦puj¡cych operacji:
• wczytanie nazwy pliku sekwencji instrukcji dla drona mobilnego (w pliku mog¡ by¢
instrukcje dla preprocesora j¦zyka C),
• w przypadku napotkania niedozwolonej warto±ci parametru polecenia lub te» bª¦dnej nazwy polecenia, program powinien przerwa¢ wczytywanie pliku i zgªosi¢ bª¡d,
• wy±wietlenie sekwencji instrukcji z danego pliku (bez instrukcji dla preprocesora),
w trakcie wy±wietlenia nale»y sprawdzi¢ równie» poprawno±¢ skªadni polecenia, je»eli wyst¡pi bª¡d, to przerywamy realizacj¦ tej operacji i wy±wietlamy odpowiedni
komunikat.
• wykonanie sekwencji ruchu zapisanych w pliku,
• wy±wietlenie listy dopuszczalnych polece« i ich skªadni,
• dodanie nowej wtyczki,
• usuni¦cie wtyczki,
• zako«czenie dziaªania programu.
Dla uproszczenia zakªada si¦, »e przed ka»dorazowym wykonaniem sekwencji wczytanych
instrukcji wspóªrz¦dne drona to (x, y, z, α) = (0, 0, 0, 0◦ ). W ramach realizacji zadania
nale»y równie» stworzy¢ trzy
(odpowiadaj¡ce opisanym wcze±niej poleceniom).
Specykacje wtyczek opisane s¡ w rozdziale 5. Mo»na tego typu wtyczek wykona¢ wi¦cej
tworz¡c w ten sposób wªasny zestaw instrukcji.
wtyczki
4
Przykªad uruchomienia i interakcji z programem
Niniejszy przykªad demonstruje posta¢ menu i przykªadowe komunikaty w trakcie dziaªania programu.
SunOS 21> ./interp4dron
w
p
i
s
a
d
?
-
wczytanie nazwy pliku sekwencji instrukcji dla drona
pokaz sekwencje instrukcji
pokaz dostepne instrukcje/wtyczki
start wykonywania sekwencji instrukcji
dodaj nowa wtyczke
usun wtyczke
wyswietl ponownie menu
k - koniec dzialania programu
Twoj wybor (? - menu): w
Podaj nazwe pliku: ruch_drona.cmd
Twoj wybor (? - menu): p
Fly
2 1 30
3
Fly 0 0 0
Rotate 30 40
Fly 0 0 0
Rotate 30 60
Fly 0 0 0
Fly 3 0.5 3
Fly 1 -0.7 4
Twoj wybor (? - menu): i
Fly
speed_hor[m/s] speed_ver[m/s] dist[m]
Rotate ang_speed[deg/s] ang[deg]
Turn
ang_speed[deg/s] ang[deg] radius[m]
Twoj wybor (? - menu): k
Koniec dzialania programu.
SunOS 21> _
5
Interfejs klas
Poni»ej podana jest specykacja metod klasy bazowej Interp4Command, z której wyprowadzone zostanie ka»dy z interpreterów poszczególnych polece«:
virtual void PrintCmd() wy±wietla nazw¦ polecenia i warto±ci jego parametrów,
np. dla polecenia Fly wy±wietlony tekst mo»e mie¢ posta¢:
Fly
3 1 30
virtual void PrintSyntax() wy±wietla nazw¦ i skªadni¦ danego polecenia, np.:
Fly
speed_hor[m/s]
speed_ver[m/s]
dist[m]
virtual const char* GetCmdName() zwraca wska¹nik do napisu b¦d¡cego nazw¡
danego polecenia. W przypadku polecenia Fly b¦dzie to wska¹nik na napis Fly.
virtual bool ExecCmd(DronPose *pDronPose, Visualization *pVisualizer) wykonuje dane polecenie. Parametry metody maj¡ nast¦puj¡ce znaczenie:
pDronPose wska¹nik na obiekt, w którym zapisane jest poªo»enie i orientacja
drona. W momencie wywoªania struktura ta zawiera pocz¡tkow¡ poz¦
drona. Po zako«czeniu dziaªania metody, zapisane zostaj¡ tu wspóªrz¦dne
i orientacja ko«cowa drona. Denicja klasy DronPose dost¦pna jest w
dostarczonym do zadania zal¡»ku.
Zakªada si¦, »e k¡t wyra»ony jest w stopniach, za± wspóªrz¦dne poªo»enia
w metrach.
Metoda ExecCmd mo»e zwraca¢ jedn¡ z dwu warto±ci:
true je»eli operacja zako«czyªa si¦ powodzeniem,
4
false w przypadku przeciwnym.
virtual bool ReadParams(istream& Strm_CmdsList) wczytuje z ci¡gu tekstowego
list¦ parametrów wªa±ciwych dla danego polecenia. Opis parametrów:
Strm_CmdsList strumie« wej±ciowy zawieraj¡cy list¦ polece« drona z ich
parametrami.
Po poprawnym zako«czeniu operacji wczytywania polecenia, metoda ReadParams
zwraca warto±¢ true. Je±li operacja czytania nie powiodªa si¦, to zwracana jest
warto±¢ false. W takim przypadku metoda mo»e wy±wietla¢ równie» na wyj±ciu
dodatkowe komunikaty, które mog¡ wskazywa¢ ¹ródªo problemu.
standard error
6
Wersja uproszczona
‘cie»ka ruchu robota mo»e by¢ wy±wietlona po wykonaniu caªegu ruchu robota.
7
Materiaªy pomocnicze
W podkatalogu ∼bk/edu/zamp/z1 zostaªy umieszczone podstawowy zal¡»ek programu.
Znajduje si¦ w nim denicja klasy bazowej Inter4Command oraz wst¦pna konguracja
dla systemu generacji dokumentacji doxygen. Oprócz tego znajduj¡ wst¦pne zal¡»ki dla
rysowania 3D z wykorzystaniem moduªu lacze_do_gnuplota.
5

Podobne dokumenty