To jest stara wersja strony!


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 LeJOS 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:ruch.pl

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,_)).
nxt_motor(M,S,_),S \= 0.
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).

08.03.11

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

pl/miw/miw08_mindstormsapi.1205837379.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (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