To jest stara wersja strony!


Algorytmy omijania przeszkód

Poniżej zestawiono kilka algorytmów omijania przeszkód. Algorytmy te w większości wykorzystują echosondę.

Algorytm 1

plansza Przed przystąpieniem do pracy należy przgotować planszę (plansza w postaci kwadratu złożona z 6×6 kwadratów o powierzchni mieszczącej robot mobilny). Zadaniem robota powinno być znalezienie czarnego kwadratu na planszy. Utrudnienie będzie polegać na tym, że w różnych miejscach na planszy pojawią się stojące przeszkody (rys. czerwone pola). Plansza powinna mieć białe obramowanie.

Zapis słowny reguł

  1. jeżeli czarne pole to STOP
  2. jeżeli białe pole to obróć się w prawo
  3. jeżeli robot jest w odległości mniejszej niż 1/4 odległości granicznej od przeszkody to obróć o 1800
  4. jeżeli robot jest w odległości mniejszej niż 1/2 odległości granicznej od przeszkody to obróć w prawo o 900
  5. jeżeli robot jest w odległości mniejszej niż odległości granicznej od przeszkody to obróć w lewo o 900
  6. jedź do przodu

Zapis regułowy

W poniższych regułach przyjęto, że reguły wykonują się w kolejności od 1 do 6. Jeżeli, któraś z reguł „zadziała”, to wówczas następuje powrót do ponownego sprawdzenia reguł od 1 do 6.

Rule: 1
if light_value == 'black'
then STOP
 
Rule: 2
if light_value == 'white'
then turn = + 90
 
Rule: 3
if ultrasonic_value < N/4
then turn = 180
 
Rule: 4
if ultrasonic_value < N/2
then turn = 90
 
Rule: 5
if ultrasonic_value < N
then turn = - 90
 
Rule: 6
go = max

Implementacja w Prologu

start :-
      nxt_light_sensor(Port,Value),
      Value == RGB_black,
      nxt_go(0).
start :-
      nxt_light_sensor(Port,Value),
      Value == RGB_white,
      nxt_turn(Speed,+90).
start :-
      ultrasonic_sensor(Value),
      Value =< N/4,
      nxt_turn(Speed,+180).
start :-
      ultrasonic_sensor(Value),
      Value =< N/2,
      nxt_turn(Speed,+90).
start :-
      ultrasonic_sensor(Value),
      Value =< N,
      nxt_turn(Speed,-90).
start :-
      nxt_go(1).

XTT

XTT

UWAGI!!!FIXME

  1. Na powyższym diagramie XTT wykorzystano zapętlenie reguł.
  2. Czy akcję początku i końca programu (START i STOP) powinny być jakoś dodatkowo zaznaczone na XTT?
  3. W diagramie na potrzeby algorytmu stworzono pusty przebieg (zaznaczony na czerwono). W programie wykrywane jest to jako błąd. Jednak uważam, że warto przemyśleć opcję wprowadzenia 'pustej reguły' w calu przekierowania strumienia np. do innej tablicy. Oczywiście zamiast tego pola można było wprowadzić regułę dopełniającą pozostałe reguły w tablicy.
  4. Ponadto w tablicy związanej z action_robot wprowadziłem akcję od pustego warunku (czyli taki 'else'). Program wyświetla to jako błąd. Uważam, że wprowadzenie formuły/pola 'else' mogłoby by być przydatne. Oczywiścię nie jest to problem, gdyż tak jak w wcześniejszej uwadze, można sztucznie wprowadzić regułę/pole, które mogłoby to uzupełnić.
pl/miw/miw08_mindstormsdesign/grid.1211142150.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (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