Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-08d [2009/01/27 12:09] jsi08 |
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-08d [2019/06/27 15:50] (aktualna) |
<code prolog> | ====== Cel: śledzenie linii ====== |
| |
| Robot umieszczony na planszy testowej dojeżdża do grubej czarnej linii i od tego momentu stara się poruszać wzdłuż tej linii. Po wciśnięciu sensora dotyku kończy pracę. |
| |
| Dodatkowo robot reaguje na dźwięk - zatrzymuje się przy klaśnięciu. |
| |
| ====== Wykonanie ====== |
| ===== Robot ===== |
| Po raz pierwszy mieliśmy do dyspozycji zbudowanego wcześniej robota. Nasz Irek był zbudowany w sposób prosty, na podstawie instrukcji Quick Start. |
| |
| Irka wyposażyliśmy w czujnik światła, dotyku, dźwięku i ultradźwięku, jednak zrezygnowaliśmy z ostatniego, bo bardziej przeszkadzał, niż pomagał - jazda po linii (po cole ;-) ) tymczasowo nie wymagała zabezpieczania się przed ścianą. Czujnik wykorzystywaliśmy sprawdzając, czy robot działa (programem ''demo2.pl''). |
| |
| ===== Problemy ===== |
| Czasami Irek zachowywał się dziwnie. Zatrzymywał się i wydawał z siebie "pykający" odgłos z czujnika ultradźwięku. Przesyłanie poleceń z Prologu nie dawało rezultatów. Pewne błędy widać na demonstracyjnym programie ''demo2.pl''. Po uruchomieniu programu zobaczyliśmy ostrzeżenie o przepełnieniu stosu przez wątek sprawdzający odległość. |
| <code> |
?- [demos/demo2]. | ?- [demos/demo2]. |
% threads compiled into threads 0.00 sec, 8,216 bytes | % threads compiled into threads 0.00 sec, 8,216 bytes |
?- halt. | ?- halt. |
1 threads wouldn't die | 1 threads wouldn't die |
student@robo2:~/plnxt$ ./bin/plnxt_stty irek | |
Setting device configuration (pairing may be needed)... | |
DONE! | |
student@robo2:~/plnxt$ pl | |
Welcome to SWI-Prolog (Multi-threaded, Version 5.4.7) | |
Copyright (c) 1990-2003 University of Amsterdam. | |
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, | |
and you are welcome to redistribute it under certain conditions. | |
Please visit http://www.swi-prolog.org for details. | |
| |
For help, use ?- help(Topic). or ?- apropos(Word). | |
| |
?- [ | |
Action (h for help) ? | |
</code> | </code> |
| Ostatnia linia powyższego kodu może świadczyć o __błędzie w PLNXT__. Jeden wątek nie chciał się zamknąć nawet przy zamknięciu interpretera Prologu, działał po ponownym uruchomieniu robota i powodował błędy. Dało się słyszeć charakterystyczne "pykanie" z czujnika odległości, robot nie reagował na żadne bodźce. |
| |
| Zrestartowanie Irka i praca po ponownym sparowaniu BT przebiegała już bez problemów, o ile nie używaliśmy sensora ultradźwięku. W razie problemów restartowaliśmy NXT i można było działać od nowa. |
| |
| ===== Nasz program ===== |
| |
| Mimo ciężkiej walki z błędami, udało nam się zaprogramować algorytm poruszania się po linii. |
| |
| ==== Kod ==== |
<code prolog> | <code prolog> |
------test2.pl------------------------------------- | |
:- consult('../plnxt.pl'). | :- consult('../plnxt.pl'). |
| |
:- start. | :- start. |
</code> | </code> |
| Plik z programem: {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:gg_jazda_po_linii.pl|}} |
| |
| ==== Start ==== |
| Irek ruszał do przodu wraz z wywołaniem programu z powłoki Prologu. |
| ==== Działanie ==== |
| Nasz Irek dojeżdżał do czarnej linii na planszy, po czym poruszał się po linii do przodu do momentu "wyjechania" z linii. Następnie skręcał o pewien kąt w prawo w poszukiwaniu linii i w razie jej napotkania ruszał dalej. |
| ==== Stop ==== |
| Ta sekwencja powtarzała się do naciśnięcia czujnika dotyku, który zatrzymywał robota. |
| W każdej chwili Irek mógł się zatrzymać słysząc jakiś hałas. |
| |
| ===== Film ===== |
| YouTube:[[http://pl.youtube.com/watch?v=-nRYVM7D_yc]] |
| |
| aiWiki:{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:wideo056.rar|Pobierz wideo056.rar}} |
| |
| W roli głównej Irek jeżdżący po cole. |
| |
| W pozostałych rolach: Plansza, Rafał Gibas, Tomasz Gryzio, Weronika Furmańska, Paweł Grzesiak. |
| |
| Zdjęcia: Tomasz Gryzio. |
| |
| Dialogi: Natura. |
| |
| Plik z rozszerzeniem .3gp - converter do avi dostępny na stronie http://www.boilsoft.com/download.html |
| |
| ===== Uwagi ===== |
| |
| Dobranie odpowiednich wartości progowych jest bardzo ważne dla prawidłowego odczytu z sensorów. Robot dla różnych warunków (zmienne oświetlenie, cień, hałas) potrzebuje indywidualnego doboru wspomnianych wartości. Przed spojrzeniem krytycznie na algorytm warto spojrzeń nań z punktu widzenia czujnika - "Nie widzę, bo mi zasłaniasz, a nie dlatego, że źle patrzę". |
| |
| ===== Możliwe błędy ===== |
| Prawdopodobnie popełniliśmy nieco błędów w naszym programie. ''nxt_close'' wywołane może być zbyt często (może to nie szkodzi, ale program brzydko wygląda), na przykład dla instrukcji (klauzula ''jedz_po_cole'') wywoływanych w sposób rekurencyjny. |
| |
| Robot, co widać na filmie, "tańczył" czasami podczas zjeżdżania z linii, wykonując piruety i zawroty. Najprawdopodobniej jednak poruszał się za szybko i skręcał bez sprzężenia zwrotnego. W takim wypadku zmniejszenie prędkości i dołożenie nowego wątku powinno naprawić problem. |
| |
| ====== Uwagi do laboratorium ====== |
| |
| Niezbędnym będzie poświęcenie którychś laboratoriów (najlepiej tych z oprogramowaniem Lego) na pokazanie nam, jak korzysta się z interfejsów dostępnych dla NXT. Na takie coś dziś jest oczywiście za późno, jednak da się to zrealizować w przyszłych latach. Pomoże to studentom programować zestawy Lego znacznie efektywniej i lepiej wykorzystywać bardziej zaawansowane techniki programowania. |
| |
| Nie widzę przeszkód, żeby takie spotkanie odbyło się w ramach wykładu z JSI. Pan Profesor chętnie zaprasza na wykład osoby chcące pokazać coś nowego. |
| |
| Innym na to sposobem będzie przygotowanie "przewodnika po NXT w prologu" dostępnego na aiWiki, zawierającego zrealizowane przykłady, krok po kroku, wraz z filmami opisującymi rezultaty. Za wzór może posłużyć strona [[http://showmedo.com/|ShowMeDo]], na której możemy obejrzeć przeróżne samouczki z dziedziny programowania. |
| |