Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-08d [2009/01/27 17:24]
jsi08
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-08d [2019/06/27 15:50]
Linia 1: Linia 1:
-====== 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]. 
-%     ​threads compiled into threads 0.00 sec, 8,216 bytes 
-%    nxt_sensomoto compiled into nxt_sensomoto 0.00 sec, 21,744 bytes 
-%   ​lib/​nxt_movement compiled into nxt_movement 0.00 sec, 36,820 bytes 
-%   ​lib/​nxt_actions_serial compiled into nxt_actions_serial 0.01 sec, 
-33,460 bytes 
-%  ../plnxt compiled 0.01 sec, 72,388 bytes 
-% demos/demo2 compiled 0.01 sec, 74,576 bytes 
- 
-Yes 
-?- start. 
- 
-Yes 
-?- Warning: [Thread 4] Thread running "​trigger_start(check_distance,​ 
-wall, 1)" died on exception: Out of global stack 
- 
-Action (h for help) ? abort 
-ERROR: Execution Aborted 
-% Execution Aborted 
-?- nxt_close. 
- 
-No 
-?- halt. 
-1 threads wouldn'​t die 
-</​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> 
-:- consult('​../​plnxt.pl'​). 
- 
-jedz_po_cole :- 
-       ​nxt_go(200),​ 
-       ​trigger_create(_,​not(check_light),​[nxt_stop,​nxt_rotate(200,​20),​jedz_po_cole]). 
-       ​trigger_create(_,​check_touch,​[nxt_stop,​nxt_close]),​ 
-       ​nxt_close. 
- 
-check_sound :- 
-       ​nxt_sound(Value,​force),​ 
-       Value > 50. 
- 
-check_touch :- 
-       ​nxt_touch(Value,​force),​ 
-       Value < 50. 
- 
-check_light :- 
-       ​nxt_light(Value,​force),​ 
-       Value < 28. 
- 
-start :- 
-       ​nxt_open,​ 
-       ​nxt_go(400),​ 
-       ​trigger_create(_,​check_sound,​[nxt_stop,​nxt_close]),​ 
-       ​trigger_create(_,​check_light,​[nxt_stop,​jedz_po_cole]). 
-%       ​nxt_close. 
- 
-:- start. 
-</​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. 
- 
-{{:​pl:​mindstorms:​studenci:​przedmioty:​jsi:​jsi2008:​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. 
  
pl/mindstorms/studenci/przedmioty/jsi/jsi2008/jsi20090121-08d.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0