Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
Nowa wersja Both sides next revision
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-09c [2009/01/25 18:27]
jsi08
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-09c [2009/01/26 10:01]
jsi08
Linia 7: Linia 7:
 === Algorytmy === === Algorytmy ===
   * Realizowaliśmy algorytm sprzątacza. Pierwsza wersja miała opierać się na triggerach. Algorytm wyglądał następujaco. Robot obracał się dookoła i cały czas badał czy istnieje w odległości 20cm jakaś przeszkoda. Jeśli tak, zatrzymywał obrót i przystępował do wypchnięcia przeszkody poza obszar sprzątania po czym wracał na swoją pozycje i kontynuował obrót do 360 stopni.   * Realizowaliśmy algorytm sprzątacza. Pierwsza wersja miała opierać się na triggerach. Algorytm wyglądał następujaco. Robot obracał się dookoła i cały czas badał czy istnieje w odległości 20cm jakaś przeszkoda. Jeśli tak, zatrzymywał obrót i przystępował do wypchnięcia przeszkody poza obszar sprzątania po czym wracał na swoją pozycje i kontynuował obrót do 360 stopni.
 +  * Podobnie jak wyżej, z tym że algorytm bez triggerów.
 +
 +
  
-  ​ 
-  * Podobnie jak wyżej z tym że algorytm bez triggerów. 
   sprzataj :-    sprzataj :-
       ​nxt_ultrasonic(Value,​force),​       ​nxt_ultrasonic(Value,​force),​
Linia 18: Linia 19:
       ​nxt_go_cm(-400,​20),​       ​nxt_go_cm(-400,​20),​
       ​nxt_pincer(close).       ​nxt_pincer(close).
-  ​sprzataj. +           sprzataj. 
-  obrot(0).+           ​obrot(0).
   obrot(X) :-   obrot(X) :-
       ​nxt_rotate(400,​10),​       ​nxt_rotate(400,​10),​
Linia 33: Linia 34:
   * Podczas realizacji algorytmu opartego na triggerach występowały błędy.   * Podczas realizacji algorytmu opartego na triggerach występowały błędy.
  
-  ​...+Kod programu z triggerami:​ 
 + 
 +W tej wersji robot po napotkaniu przeszkody otwiera ramiona i jedzie do przodu, natomiast nie jedzie do tyłu - mimo, że komenda jazdy do tyłu jest między komendą "​nxt_pincer(open)"​ a "​nxt_go_cm(400,​10)"​. 
 +Przyczyna błędu jest w komendzie: nxt_stop - naszym celem, było to, by zatrzymała komendę obrotu o 360 stopni (nxt_rotate(400,​360)) i faktycznie - zatrzymywała,​ ale oprócz tego miała wpływ również na komendę jazdy do tyłu, tznrozkaz nxt_go_cm(-400,​10) był anulowany. 
 + 
 +  check_ultrasonic :- 
 + nxt_ultrasonic(Value,​force),​ 
 + Value < 25, 
 + write(Value). 
 + 
 +  ruch :-     
 + nxt_pincer(open),​ %%% 
 + nxt_go_cm(-400,​10),​ %%% 
 + nxt_go_cm(400,​10). %%% 
 + 
 +  ultrasonic :-  
 + nxt_stop, %%% 
 + ruch. 
 + 
 +  sprzataj :- 
 + nxt_open,​ 
 + trigger_create(_,​check_ultrasonic,​ultrasonic),​ 
 + nxt_rotate(400,​360). 
 + 
 +Podsumowując powyższy kod: nxt_stop zatrzymywała komendę, która następowała po niej. 
 +Zaczęliśmy przypuszczać,​ że funkcja "​ultrasonic"​ (zawierająca nxt_stop) zostaje po raz drugi uruchomiona przez trigger, podczas gdy pierwsze działanie "​ultrasonic"​ jeszcze się nie skończyło (przypuszczenia nie udało się sprawdzić, wyjaśnienie poniżej). 
 +Podjęliśmy więc próbę jednorazowego uruchomienia trigger'​a i ubicia go: 
 + 
 +[reszta kodu be zmian] 
 + 
 +  ultrasonic :-  
 + nxt_stop,​  
 + trigger_killall,​ %%% 
 + ruch. 
 + 
 +  sprzataj :- 
 + nxt_open,​ 
 + trigger_create_noreturn(_,​check_ultrasonic,​ultrasonic),​ %%% 
 + nxt_rotate(400,​360). 
 + 
 +Próba ubicia triggera skończyła się błędem:  
 + 
 +** Warning: [Thread 2] Thread running "​trigger_start_noreturn(main,​ check_ultrasonic,​ ultrasonic)"​ died on exception: Arithmetic: `angle/​1'​ is not a function** 
 + 
 + 
 +Próbowaliśmy tez tworzyć triggera jak poprzednio przez trigger_create/​3,​ ale kończyło się to identycznym błędem.
  
 +**Wnioski:​**
 +  * - trigger_create i trigger_create_noreturn nie działają tak jak powinny
 +  * - trigger_killall nie działa
 +  * - nxt_stop w funkcji wywoływanej przez triggera nie działa (prawdopodobnie przez to, że sam trigger_create źle działa)
 +  * - program bez triggerów działa dobrze
  
 === Zmiany === === Zmiany ===
pl/mindstorms/studenci/przedmioty/jsi/jsi2008/jsi20090121-09c.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