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