Interpreter opisu dziaªa«platformy mobilnej wtyczki 1 Ogólny opis zadania Nale»y napisa program, który b dzie w stanie przeczyta z pliku tekstowego sekwencj polece«ruchu, a nast pnie zasymulowa dziaªanie robota i zapisa w pliku tekstowym wspóªrz dne kolejnych jego poªo»e«. Analiza skªadni polece«ma by realizowana w oparciu o wtyczki, 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 robota poprzez dopuszczenie istnienia nowych polece«. Wª czenie jednej wtyczki ma umo»liwia interpretacj pojedynczego nowego rodzaju polecenia. 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 biaªych. Po niej nast puje lista parametrów oddzielonych tak»e dowoln ilo±ci znaków biaªych. Zakªada si,»e program bez dodatkowych wtyczek powinien obsªugiwa trzy polecenia: ruch do przodu, 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 Polecenie to powoduje ruch robota do przodu z zadan pr dko±ci na odcinku drogi o zadanej dªugo±ci. Skªadnia polecenia: pr dko± _robota dªugo± _drogi Zakªada si,»e jednostkami parametrów s odpowiednio: [ mm ], [mm]. s Pr dko± robota mo»e by dodatnia (jazda do przodu) lub ujemna (jazda do tyªu) lub te» zero (zatrzymanie robota). W tym ostatnim przypadku dªugo± drogi musi mie równie» warto± 0. Dªugo± drogi musi by liczb nieujemn. 2.2 Polecenie Turn Robot ma mie mo»liwo± skr tu po zadanym ªuku. Operacj t umo»liwia polecenie Turn. Jego parametrami s : pr dko± robota, dªugo± drogi i promie«krzywizny ªuku. Skªadnia polecenia: Turn pr dko± _robota dªugo± _drogi promie«_krzywizny Zakªada si,»e jednostkami parametrów s odpowiednio: [ mm ], [mm], [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 w lewo, za± dla warto±ci ujemnych w kierunku przeciwnym. 1
2.3 Polecenie Rotate Zmiana orientacji robota 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 pr dko± k towa i dªugo± ªuku. Skªadnia polecenia: Rotate pr dko± _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. Pr dko± 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 robota). 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 TURN_SPEED 30 /* * Przykªadowy zestaw polece«*/ 10 10 // Start niezbyt szybki 40 100 // A teraz przy±pieszamy Turn TURN_SPEED 40 25 0 0 Rotate 30 60 40 50 0 0 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 przejedzie robot powinien zosta zapisany w pliku tekstowym, jako zbiór wspóªrz dnych punktów. Wspóªrz dne pojedynczego punktu powinny by zapisane w jednej linii, mi dzy liniami nie powinno by»adnych odst pów, np. 0 0 1.5 1.0 1.45 1.5 Menu programu powinno pozwala na wykonanie nast puj cych operacji: wczytanie nazwy pliku sekwencji instrukcji dla robota 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, 2
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 robota to (x, y, α) = (0, 0, 0 ). W ramach realizacji zadania nale»y równie» stworzy trzy wtyczko (odpowiadaj ce opisanym wcze±niej poleceniom), które specykacja opisana jest w rozdziale??. Mo»na tego typu wtyczek wykona wi cej tworz c w ten sposób wªasny zestaw instrukcji. 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>./interp4rob w - wczytanie nazwy pliku sekwencji instrukcji dla robota p - pokaz sekwencje instrukcji i - pokaz dostepne instrukcje/wtyczki s - start wykonywania sekwencji instrukcji a - dodaj nowa wtyczke d - usun wtyczke? - wyswietl ponownie menu k - koniec dzialania programu Twoj wybor (? - menu): w Podaj nazwe pliku: ruch_robota.cmd Twoj wybor (? - menu): p 10 30 Turn 30 40 30 25 100 Twoj wybor (? - menu): i Turn speed[mm/s] dist[mm/s] speed[mm/s] dist[mm/s] radius[mm] 3
Rotate ang_speed[deg/s] ang[deg] Twoj wybor (? - menu): k Koniec dzialania programu. SunOS 21> _ 5 Interfejs klas Poni»ej podana jest specykacja metod klasy bazowej Command, z której wyprowadzone zostanie ka»de z polece«: virtual void PrintCmd() wy±wietla nazw polecenia i warto±ci jego parametrów, np. dla polecenia wy±wietlony tekst mo»e mie posta : 20.0 30.4 40 virtual void PrintSyntax() wy±wietla nazw i skªadni danego polecenia, np.: speed[mm/s] dist[mm/s] virtual const char* GetCmdName() zwraca wska¹nik do napisu b d cego nazw danego polecenia. W przypadku polecenia b dzie to wska¹nik na napis. virtual bool ExecCmd(RobotPose *probpose) wykonuje dane polecenie. Parametry metody maj nast puj ce znaczenie: probpose wska¹nik na obiekt, w którym zapisane jest poªo»enie i orientacja robota. W momencie wywoªania struktura ta zawiera pocz tkow poz robota. Po zako«czeniu dziaªania metody, zapisane zostaj tu wspóªrz dne i orientacja ko«cowa robota. Struktura RobotPose zdeniowana jest nast puj co: class RobotPose public: bool Set( double x_mm, double y_mm, double alpha_deg ) RobotPose::x_mm = x_mm; RobotPose::y_mm = y_mm; RobotPose::alpha_deg = alpha_deg; return AfterUpdate(); bool Set( double x_mm, double y_mm ) RobotPose::x_mm = x_mm; RobotPose::y_mm = y_mm; return AfterUpdate(); void Get( double &x_mm, double &y_mm, double &alpha_deg ) x_mm = RobotPose::x_mm; y_mm = RobotPose::y_mm; alpha_deg = RobotPose::alpha_deg; 4
protected: /*! * Metoda wywoªywana jest po aktualizacji poªo»enia i orientacji * lub samego poªo»enia. * \retval true - gdy operacja powiodªa si, * \retval false - w przypadku przeciwnym. */ virtual bool AfterUpdate() = 0; private: double ; x_mm, y_mm, alpha_deg; Zakªada si,»e k t wyra»ony jest w stopniach, za± wspóªrz dne poªo»enia w milimetrach. Metoda ExecCmd mo»e zwraca jedn z dwu warto±ci: true je»eli operacja zako«czyªa si powodzeniem, 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«robota 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 standard error dodatkowe komunikaty, które mog wskazywa ¹ródªo problemu. 6 Wersja rozszerzona 2D Proponuje wykorzysta si moduª lacze_do_gnuplota dla wizualizacji ±cie»ki robota 2D i animacji jego ruchu. 7 Wersja bardziej rozszerzona 3D Analogicznie jak w przypadku powy»ej proponuje wykorzysta si moduª lacze_do_gnuplota dla wizualizacji ±cie»ki robota 3D i animacji jego ruchu. 8 Materiaªy pomocnicze W podkatalogu bk/edu/zamp/zad1 zostaªy umieszczone podstawowy zal»ek programu. Znajduje si w nim denicja klasy bazowej Command oraz wst pna konguracja dla systemu generacji dokumentacji doxygen. Oprócz tego znajduj wst pne zal»ki dla rozszerze«2d i 3D. 5