Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_mindstormsdesign:grid [2008/05/18 21:31] miw |
pl:miw:miw08_mindstormsdesign:grid [2008/05/26 00:58] miw |
====== Algorytmy omijania przeszkód ====== | |
Poniżej zestawiono kilka algorytmów omijania przeszkód. Algorytmy te w większości wykorzystują echosondę. | |
===== 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. | |
==== 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 laser_value == 'black' | |
then STOP | |
| |
Rule: 2 | |
if laser_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_white, | |
nxt_turn(Speed,+90). | |
start :- | |
nxt_light_sensor(Port,Value), | |
Value == RGB_black, | |
nxt_go(0). | |
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). | |
</code> | |
| |
| |
==== XTT ==== | |
{{:pl:miw:miw08_mindstormsdesign:alg11.png|XTT}} | |
| |
| |
| |