Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_mindstormsapi [2008/03/18 11:49] gjn |
pl:miw:miw08_mindstormsapi [2008/06/22 10:16] gjn email restored |
====== 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}} | |
| |
| |
====== 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. | |
| |
====== Materiały ====== | |
* http://mindstorms.lego.com/Overview/NXTreme.aspx | |
* http://mindstorms.lego.com/eng/community/resources/default.asp | |
| |