Konstrukcja

Zastaliśmy złożonego Tribota z ramionami chwytającymi i czujnikiem dotykowym z przodu. Doinstalowaliśmy mu sonar skierowany do przodu i mikrofon skierowny w górę (wzdłóż jednostki centralnej). Sonar był uniesiony troszkę do góry, tak aby nie wykrywał piłki przed nim, tylko ścianę/inne przeszkodzy.

Nie zamieszczamy zdjęć, bo raczej wszyscy widzieli Tribota, nie zmodyfikowaliśmy go zbytnio.

Program

:- consult('plnxt/plnxt.pl').
 
check_sonar :-
        nxt_ultrasonic(Value,force),
        Value < 40.
 
check_touch :-
        nxt_touch(Value,force),
        Value = 1.
 
check_sound :-
        nxt_sound(Value,force),
        Value > 50.
 
grab :-
        nxt_stop,
        nxt_pincer(close),
        turn_right.
 
ungrab :-
        nxt_stop,
        nxt_pincer(open),
        X is -20,
        nxt_go(400,X),
        turn_right.
 
 
turn_right :-
        nxt_stop,
        nxt_rotate(400,45),
        go_forward.
 
go_forward :-
        trigger_create(_,check_sonar,[turn_right]),
        trigger_create(_,check_touch,[grab]),
        trigger_create(_,check_sound,[ungrab]),
        nxt_go(400).
 
start :-
        nxt_open,
        go_forward.

Program nie jest zbyt skomplikowany, ponieważ brakło nam czasu (patrz Problemy poniżej). Po wywołaniu robot jedzie do przodu dopóki nie stanie się jedna z trzech rzeczy:

  • Gdy wykryje przeszkodę w odległości mniejszej niż 40cm - skręci w prawo o ok. 90 stopni
  • Gdy wykryje dotknięcie - zamknie ramiona zakładając, że to piłka.
  • Gdy natężenie dźwięku osiągnie wartość większą niż 50 - rozłoży ramiona puszczając piłkę.

Widać to wszystko wprost z programu, po wielu walkach z triggerami wszystko w miarę działało.

Plik programu: our-first-nxt-program.pl

Problemy

Przez prawie całe zajęcia mieliśmy stałe problemy z nawiązaniem, utrzymaniem a także zakończeniem połaczenia. Objawiało się to tym, że robot nie chciał wystartować programu albo nie chciał go zakończyć. Udało nam się zawiesić interpreter prologa na komputerze po wykonaniu nxt_close. Zdarzało się także, że zatrzymany robot po chwili zaczynał sam z siebie jeździć - prawodopodobnie przez 'wiszące w powietrzu' triggery.

Sugestie

Ponieważ mieliśmy problemy ze zrozumieniem jak działają triggery a nie mogliśmy znaleźć w żadnym opisie oprócz przykładów, w szczególności w https://ai.ia.agh.edu.pl/wiki/_media/pl:mindstorms:lab:nxt_movement.pdf. Bardzo prosilibyśmy o jakiś opis jak to działa, kiedy się resetują, kiedy trzeba dodawać, czy można nadpisać itp.

Proponujemy jeszcze, żeby - może na koniec zajęć z laboratoriów w ramach podsumowania - umożliwić studentom pobawienie się prawdziwym robotem (Hexorem) zamiast takim z klocków.

Być może - w kolejnych latach - dobrym pomysłem byłoby też udostępnienie studentom czujników robionych na projektach z MIW. Z jednej strony byłby szerszy wachlarz zastosowań (np. czujniki promieniowania UV, ruchu etc. można skonstruować) a z drugiej studenci przypomnieliby sobie, że w takich klockach NXT nie siedzą skrzaty, a obwody i tranzystory :)

pl/mindstorms/studenci/przedmioty/jsi/jsi2008/jsi20090114-09e.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