[[
✎ pl:miw:miw08_mindstormsapi
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Opis ====== Piotr Hołownia, <holownia@student.agh.edu.pl> Build an API prototype in Prolog for NXT-based robots * low-level sensomotoric API, cover NXT funcs, provide control for motors, sensors, brick i/o * mid-level mimic LEGO env blocks?? does it make sens? * component-level: identify common robot parts that need control: wheel, sensor, arm, etc? * robot-level: identify robot classes: e.g. im/mobile, rolling vs. walking; provide means to describe common robot designs, like the four provided by LEGO * high-level provide services for different classes Architecture: * MVC, the above is logical model * provide a V for every M component to support building of the interface Issues: * communication * control * design * event handling, device polling Ideas: * think how to build a Prolog API for NXT * investigate the [[http://lejos.sourceforge.net/|LeJOS]] [[http://lejos.sourceforge.net/p_technologies/nxt/nxj/api/index.html|NXJ API]] to remain compatible * investigate communication layer: one can use native NXT protocol, iCommand stack, other? * middle layer for: integrating logic layer with communication layer ====== Spotkania ====== ===== 08.03.04 ===== * fenomenologicznie :) mamy klocki, jakby można zrobić API? * inżyniersko, mamy klocki, BT, jak się dogadać z Prologiem ===== 080311 ===== * spec: czego chcemy od niższej warstwy, np.: synchr, etc. * próbujemy opisywać predykatem w prologu moduły ze środ. lego ===== 080318 ===== * pakiety SWI? * prefixy high-level i mid-level * sensory cd ====== Projekt ====== ===== 08.03.04 ===== {{:pl:miw:miw08_mindstormsapi:akcje.pl|:pl:miw:miw08_mindstormsapi:akcje.pl}} {{:pl:miw:miw08_mindstormsapi:ruch.pl|:pl:miw:miw08_mindstormsapi:ruch.pl}} <code prolog> nxt_motor(Motor,Speed, Direction) :- var(Speed), % odczyt pr get_speed(Speed) nxt_motor(Motor,Speed, Direction) :- var(Dir), % odczyt dir nxt_motor(Motor,Speed, Direction) :- nonvar(S), set_speed(S), nxt_motor(Motor,Speed, Direction) :- Speed < 0, nxt_motor(Motor,reverse, Direction) :- nxt_motor(Motor,Speed, _), Speedn is - Speed, nxt_motor(Motor,Speedn). nxt_motor(Motor,Speed, Time) :- create_timer(T1), %potrzebuje miec timery set_speed(M,S), wakeup(T1,Time,nxt_motor(,0,_)). </code> nxt_motor(M,S,_),S \= 0. <code prolog> nxt_motor(Motor,Speed, Direction) :- var(Speed), % odczyt pr nxt_get_speed(Speed). nxt_get_speed(Speed) :- icmnd_get_speed(Speed). nxt_get_speed(Speed) :- ptcp_get_speed(Speed). </code> ===== 08.03.11 ===== * {{:pl:miw:miw08_mindstormsapi:ruch2.pl|ruch2.pl}} * {{:pl:miw:miw08_mindstormsapi:silnik.pl|silnik.pl}} * {{:pl:miw:miw08_mindstormsapi:akcje2.pl|akcje2.pl}} ===== 08.03.18 ===== * {{:pl:miw:miw08_mindstormsapi:nxt_actions.pl|nxt_actions.pl}} * {{:pl:miw:miw08_mindstormsapi:nxt_components.pl|nxt_components.pl}} * {{:pl:miw:miw08_mindstormsapi:nxt_movement.pl|nxt_movement.pl}} ====== Sprawozdanie ====== ===== 08.03.04 ===== Podejście inżynierskie zawiesiłem. Spróbowałem tworzyć API wyższego poziomu przy założeniu, że mam dostępne pewne predykaty API niższego poziomu (ustawianie prędkości obrotowej serwomechanizmu, obracanie o zadany kąt). Jest to trudne do realizacji bez gotowych rozwiązań API niższego poziomu. Istotne jest, aby stworzyć mechanizmy działania, które w leJOS są dostępne w klasie Behavior i umożliwiają podejmowanie akcji po zajściu jakiegoś zdarzenia. Myślę, że należy skupić się na podejściu inżynierskim. ===== 08.03.11 ===== W pliku ruch2.pl zamieszczone są predykaty realizujące złożoną pracę silników: ruch pojazdu do przodu, do tyłu, skręcanie, obracanie. W pliku silnik.pl znajduje się predykat nxtMotor, pozwalający w wybrany sposób poruszać silnikiem. W pliku akcje2.pl są predykaty, które powinny obracać silnik z zadaną prędkością, o zadany kąt, odczytywać prędkość obrotową silnika, a także umożliwiać tworzenie timerów i triggerów. Wprowadzenie triggerów pozwala dodać dla każdego z ruchów pojazdu warunek: "do napotkania przeszkody" i wiele innych możliwości. Np. jedź do napotkania przeszkody, skręcaj do napotkania przeszkody, rozpocznij jazdę na komendę dźwiękową. W tym momencie predykaty z pliku akcja2.pl wypisują jedynie swój zamierzony cel, aby móc testować działanie. ** Wobec tego od realizujących warstwy niższe oczekuję wykonania w tym miejscu działających mechanizmów. Czyli:** * możliwość sterowania z Prologu ruchem silnika z zadana prędkością, zadanym kątem lub w nieskończoność, * możliwość używania timerów i triggerów. ===== 08.03.18 ===== Utworzyłem moduły: * nxt_actions - predykaty, które powinny obracać silnik z zadaną prędkością, o zadany kąt, odczytywać prędkość obrotową silnika, odczytywać pomiary sensorów, a także umożliwiać tworzenie timerów i triggerów, * nxt_components - predykaty realizujące operacje na sensorach i silnikach na różne sposoby, * nxt_movement - predykaty obsługujące złożoną pracę silników: ruch pojazdu do przodu, do tyłu, skręcanie, obracanie, ruch do napotkania przeszkody. Aby nie wprowadzać zbyt dużej ilości kodu przed stwierdzeniem słuszności zastosowania triggerów, tylko predykat 'go' z modułu 'nxt_movement' pozwala na ruch do napotkania przeszkody. W każdym razie niezbędny jest jakiś sposób implementacji callbacków. W module nxt_actions znajdują się predykaty, które powinny być pomostem pomiędzy moim projektem a projektami realizujących niższe warstwy. ====== Materiały ====== * http://mindstorms.lego.com/Overview/NXTreme.aspx * http://mindstorms.lego.com/eng/community/resources/default.asp
pl/miw/miw08_mindstormsapi.1205840337.txt.gz
· ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry