Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
pl:miw:miw08_mindstormsdesign:grid [2008/05/26 00:58]
miw
pl:miw:miw08_mindstormsdesign:grid [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Algorytmy omijania przeszkód ======
 +Poniżej zestawiono kilka algorytmów omijania przeszkód. Algorytmy te w większości wykorzystują echosondę.
 +
 +
 +
 +===== Algorytm 1 =====
 +{{ :​pl:​miw:​miw08_mindstormsdesign:​plansza.jpg?​150|plansza}}
 +Przed przystąpieniem do pracy należy przgotować planszę (plansza w postaci kwadratu złożona z 6x6 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.
 +Na tak przygotowanej planszy, można postawić robota mobilnego w dowolnym punkcie. Robot powinien znaleźć czarne pole omijając po drodze przeszkody.
 +
 +==== Zapis słowny reguł ====
 +      - jeżeli czarne pole to STOP
 +      - jeżeli białe pole to obróć się w prawo
 +      - jeżeli robot jest w odległości mniejszej niż 1/4 odległości granicznej od przeszkody to obróć o 180<​sup>​0</​sup>​
 +      - jeżeli robot jest w odległości mniejszej niż 1/2 odległości granicznej od przeszkody to obróć w prawo o 90<​sup>​0</​sup>​
 +      - jeżeli robot jest w odległości mniejszej niż odległości granicznej od przeszkody to obróć w lewo o 90<​sup>​0</​sup>​
 +      - 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.
 +<code ada>
 +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
 +</​code>​
 +
 +
 +
 +
 +==== Implementacja w Prologu ====
 +<code prolog>
 +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 :-
 +      nxt_ultrasonic_sensor(port,​Value),​
 +      Value =< N/4,
 +      nxt_turn(Speed,​+180).
 +start :-
 +      nxt_ultrasonic_sensor(port,​Value),​
 +      Value =< N/2,
 +      nxt_turn(Speed,​+90).
 +start :-
 +      nxt_ultrasonic_sensor(port,​Value),​
 +      Value =< N,
 +      nxt_turn(Speed,​-90).
 +start :-
 +      nxt_go(1).
 +</​code>​
 +
 +
 +
 +
 +
 +
 +
 +
 +==== XTT ====
 +{{:​pl:​miw:​miw08_mindstormsdesign:​alg8.png|XTT}}
 +
 +UWAGI!!!FIXME
 +   - Na powyższym diagramie XTT wykorzystano zapętlenie reguł.
 +   - Czy akcję początku i końca programu (START i STOP) powinny być jakoś dodatkowo zaznaczone na XTT?
 +   - 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.
 +   - 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ć.
  
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