Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_mindstormsdesign:grid [2008/05/18 21:20] miw |
pl:miw:miw08_mindstormsdesign:grid [2019/06/27 15:50] (aktualna) |
====== Algorytmy omijania przeszkód ====== | ====== Algorytmy omijania przeszkód ====== |
Poniżej zestawiono kilka algorytmów omijania przeszkód. Algorytmy te w większości wykorzystują echosondę. | Poniżej zestawiono kilka algorytmów omijania przeszkód. Algorytmy te w większości wykorzystują echosondę. |
| |
| |
| |
===== Algorytm 1 ===== | ===== Algorytm 1 ===== |
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. | {{ :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ł ==== | ==== Zapis słowny reguł ==== |
- jeżeli czarne pole to STOP | - jeżeli czarne pole to STOP |
- 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> | - 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 | - jedź do przodu |
| |
| |
==== Zapis regułowy ==== | ==== Zapis regułowy ==== |
<code ada> | <code ada> |
Rule: 1 | Rule: 1 |
if laser_value == 'black' | if light_value == 'black' |
then STOP | then STOP |
| |
Rule: 2 | Rule: 2 |
if laser_value == 'white' | if light_value == 'white' |
then turn = + 90 | then turn = + 90 |
| |
go = max | go = max |
</code> | </code> |
| |
| |
| |
| |
==== Implementacja w Prologu ==== | ==== Implementacja w Prologu ==== |
<code prolog> | <code prolog> |
start :- | start :- |
ultrasonic_sensor(Value), | nxt_light_sensor(Port,Value), |
Value > number, | Value == RGB_black, |
go(0,speed,force). | nxt_go(0). |
start :- | start :- |
ultrasonic_sensor(Value), | nxt_light_sensor(Port,Value), |
Value =< number, | Value == RGB_white, |
turn(90,speed). | nxt_turn(Speed,+90). |
start :- | start :- |
go(0,0,0). | 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> | </code> |
| |
| |
==== XTT ==== | |
{{:pl:miw:miw08_mindstormsdesign:alg11.png|XTT}} | |
| |
| |
| |
| |
| |
| |
| ==== 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ć. |
| |