Nowa wersja
|
Poprzednia wersja
Nowa wersja
Both sides next revision
|
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090114-11c [2009/01/18 15:08] jsi08 utworzono |
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090114-11c [2009/01/18 21:48] jsi08 |
=== Prezentacja robota: === | === Prezentacja robota: === |
| |
**Zdjęcia Irka:** | W tym tygodniu przyszło nam współpracować z Irkiem, któremu nie wiem czemu zmieniliśmy imię na Irosław. Okazało się znowu że praca związana z budową Irosława została wykonana już za nas dzięki temu mieliśmy więcej czasu na opracowywanie algorytmów. Irosław był bardzo podobny do jego kuzyna Henia, którego poznaliśmy na wcześniejszych zajęciach, różnił się nieco ilością i rozłożeniem czujników. Posiadał tylko czujnik dźwięku oraz ultradźwiękowy, więc postanowiliśmy wyposażyć go w dodatkowy czujnik dotyku aby móc wykorzystać go w naszych algorytmach. |
| |
| **Zdjęcia Irosława:** |
| |
| {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:iroslaw2.jpg|}}{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:iroslaw1.jpg|}}{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:iroslaw3.jpg|}} |
---- | ---- |
| |
=== Projektowanie algorytmów: === | === Projektowanie algorytmów: === |
| |
| Na dzisiejszych zajęciach projektowaliśmy algorytmy przy wykorzystaniu interfejsu programistycznego PLNXT. Interfejs ten jest to API w języku Prolog dla LEGO Mindstorms NXT, przez co przy projektowaniu mogliśmy wykorzystać wiedzę z programowania w języku Prolog zdobytą na poprzednich zajęciach. Do instrukcji laboratorium dołączona była dokumentacja która w bardzo dobry sposób opisywała potrzebne w algorytmach funkcje, więc nie mieliśmy problemu z wydawanie poleceń Irosławowi. Zanim mogliśmy przystąpić do tworzenia algorytmów musieliśmy najpierw połączyć się Irosława z komputerem za pomocą Bluetooth. |
| |
**Algorytm I** | **Algorytm I** |
| |
| Pierwszy algorytm jaki zleciliśmy do wykonania Irosławowi miał na celu jazdę do przodu z prędkością obrotu kół 300 stopni/sekundę do momentu napotkania przeszkody w odległości 15 cm. |
| |
| <code prolog> |
| :- consult('/home/student/plnxt/plnxt.pl'). |
| |
| start :- |
| nxt_open, |
| trigger_create(_,check_distance,[nxt_stop,nxt_close]), |
| nxt_go(300). |
| |
| check_distance :- |
| nxt_ultrasonic(Distance,force), |
| Distance < 15. |
| </code> |
| |
| |
**Algorytm II** | **Algorytm II** |
| |
**Algorytm III** | W drugim algorytmie Irosław miał jechać do przodu i reagować na klaśnięcie bądź czujnik dotyku. Klaśnięcie powodowało że robot musiał się zatrzymać, po czym ruszał po ponownym klaśnięciu. Dodatkowo cały algorytm kończył się po naciśnięciu czujnika ruchu, tzn. robot zatrzymywał się i zamykał połączenie. |
| |
**Algorytm IV** | <code prolog> |
| :-consult('/home/student/plnxt/plnxt.pl'). |
| |
**Algorytm V** | start:- |
| nxt_open, |
| go_on_buddy, |
| trigger_create(_,pushed,[nxt_stop,nxt_close]). |
| |
| go_on_buddy :- |
| nxt_go(200), |
| sleep(1), |
| trigger_create(_,clap,wait_a_second_buddy). |
| |
| wait_a_second_buddy :- |
| nxt_stop, |
| sleep(1), |
| trigger_create(_,clap,go_on_buddy). |
| |
| % Sprawdzenie klaśnięcia. |
| clap :- |
| nxt_sound(Value,force), |
| Value > 15. |
| |
| % Sprawdzenie czujnika dotyku. |
| pushed :- |
| nxt_touch(Value,force), |
| Value=1. |
| </code> |
| |
| **Algorytm III** |
| |
| Trzeci algorytm polegał na jeździe z omijaniem przeszkód. Jarosław miał poruszać się z prędkością 300 stopni/sekundę, po czym napotykając na przeszkodę powinien wycofać się ominąć ją po czym obrócić się do początkowego kierunku i rozpocząć ponownie jazdę. |
| |
| <code prolog> |
| :-consult('/home/student/plnxt/plnxt.pl'). |
| |
| start :- |
| nxt_open, |
| trigger_create(_,check_distance,wycofaj), |
| nxt_go(300). |
| |
| check_distance :- |
| nxt_ultrasonic(Distance,force), |
| Distance < 15. |
| |
| wycofaj:- |
| nxt_stop, |
| nxt_rotate(400,90), |
| nxt_go_cm(900,30), |
| nxt_rotate(400,-90), |
| nxt_go(300). |
| </code> |
| |
| **Algorytm IV** |
| |
| Ostatni algorytm był bardzo prosty. Chcieliśmy sprawdzić prędkość i wytrzymałość Irosława. Kazaliśmy mu wykonać kilka szybkich obrotów i dojechać do krawędzi urwiska. |
| |
| <code prolog> |
| :-consult('/home/student/plnxt/plnxt.pl'). |
| |
| start :- |
| nxt_open, |
| nxt_rotate(900,1890), |
| nxt_go_cm(900,30), % Jazda 200 cm do tyłu z prędkością 400 stopni/sekundę. |
| nxt_close. |
| </code> |
| |
| Irosław wykonał zadanie bezproblemowo 8-) Poniżej zamieszczamy jego poczynania. |
| \\ |
| [[http://www.youtube.com/watch?v=wzoNWoM3e3Q|Irosław Szalony]] |
| |
---- | ---- |
=== Integracja i testowanie: === | === Integracja i testowanie: === |
| |
| Po stworzeniu algorytmów rozpoczęliśmy ich testowanie. Na początku postanowiliśmy wypróbować większość funkcji jakie oferuje API PLNXT. Wprowadzaliśmy je każdą osobno z klawiatury po czym obserwowaliśmy zachowanie naszego robota. Oczywiście nie dało się wszystkiego przetestować w pełni z racji braku czasu oraz miejsca w laboratorium na bardziej wymyślne pomysły 8-). Podczas testowania algorytmów Irosław spisywał się znakomicie, chociaż pojawiło się kilka uciążliwych problemów. |
---- | ---- |
| |
=== Problemy: === | === Problemy: === |
| |
| * Na początku mieliśmy problem z komunikacją z naszym robotem. Pierwsza próba komunikacji zakończyła się powodzeniem lecz po wykonaniu jakiejś błędnej instrukcji lub wystąpieniu jakiegoś błędu w programie nie mogliśmy ponownie nawiązać komunikacji. Jest to bardzo irytujący błąd gdyż jego rozwiązanie jest uciążliwe. Rozwiązaniem było ponowne uruchomienie konsoli i nawiązanie połączenia od samego początku wraz z jego konfiguracją. |
| |
| * Kolejnym problemem była reakcja robota na czujniki. Często zdarzało się że rozpoznawał jedno klaśnięcie jako 2, więc w zadanym algorytmie zatrzymywał się i jechał od razu nie czekając na kolejne klaśnięcie. |
| |
---- | ---- |
| |
=== Wnioski: === | === Wnioski: === |
| |
| * Za pomocą API PLNXT w bardzo łatwy sposób możemy wydawać polecenia robotowi. Według nas jest to sposób o wiele bardziej przyjemny, bo mamy całkowita kontrolę nad tym co zrobi nasz podopieczny. |
| |
| * Jest to o wiele bardziej wygodne niż za pomocą programu komputerowego wykorzystywanego na poprzednich zajęciach gdzie aby wydać pojedyncze polecenie należało wgrać cały program do robota po czym go uruchomić. Tutaj mogliśmy wydawać pojedyncze polecenia i po zatwierdzeniu robot od razu je wykonywał. |
| |
| * Interfejs PLNXT umożliwia tworzenie bardzo rozbudowanych algorytmów zwłaszcza osobom znającym dobrze język Prolog. Znajomość niewielkiej liczby funkcji daje duże możliwości tworzenia skomplikowanych i bardziej czytelnych algorytmów. |
| |
---- | ---- |
=== Propozycje rozszerzenia wiki: === | === Propozycje rozszerzenia wiki: === |
| |
| * Proponujemy wzbogacić wiki o tutoriale opisujące budowanie bardziej zaawansowanych algorytmów, przy wykorzystaniu zaawansowanych konstrukcji języka Prolog. |
| |
| * Bardzo przydatny byłby lepszy opis niektórych nieintuicyjnych funkcji jak np. trigger_create/3. |
| |
| === Inne propozycje zmian: === |
| |
| * Proponujemy aby w przyszłości przeznaczyć więcej godzin na zaznajomienie się z API PLNTX, kosztem standardowego dostarczonego z zestawem klocków. Pozwala ono na bardziej programistyczne podejście do tworzenia algorytmów sterowania, wykorzystując język Prolog a ten sposób jest naszym zdaniem o wiele ciekawszy. |
| |
| |