Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_mindstormsdesign:strona_1 [2008/03/30 23:40] miw |
pl:miw:miw08_mindstormsdesign:strona_1 [2019/06/27 15:50] (aktualna) |
====== Algorytmy (echosonda) ====== | ====== Algorytmy (echosonda) ====== |
Poniżej znajdują się algorytmy sterowania wykorzystujące **echosondę**. Aby sprawdzić działanie algorytmów należy przygotować tor przeszkód. | Poniżej znajdują się algorytmy sterowania wykorzystujące **echosondę**. Aby sprawdzić działanie algorytmów należy przygotować tor przeszkód. |
===== Unikanie przeszkód ===== | |
| |
| ===== Objechanie przeszkody ===== |
==== Zapis słowny ==== | ==== Zapis słowny ==== |
- jedź do przodu | - jedź do przodu |
- jeżeli przeszkoda zatrzymaj się (wskaźnik echosondy poniżej progu) idź do (3) inaczej wróć do (1) | - jeżeli przeszkoda zatrzymaj się (wskaźnik echosondy poniżej progu) idź do (3) inaczej wróć do (1) |
- obróć się o 90<sup>0</sup> w prawo | - obróć się o 90<sup>0</sup> w prawo |
- idź do (1) | - jeżeli przeszkoda zatrzymaj się (wskaźnik echosondy poniżej progu) idź do (3) inaczej idź do (5) |
| - zrób krok do przodu |
| - jeżeli przeszkoda idź do (3) inaczej idź wykonaj kolejny punkt |
| - obróć się o 90<sup>0</sup> w lewo i idź do (1) |
| |
| |
| |
| |
==== Implementacja w Prologu ==== | |
start :- | |
create_trigger(T), | |
trigger_fired(T,echo_sensor(X),[ nxt_motor(C,0), nxt_motor(c,0)]) | |
X > number, | |
go(Angle,Speed,force). | |
start :- | |
create_trigger(T), | |
trigger_fired(T,echo_sensor(X),[ nxt_motor(C,0), nxt_motor(c,0)]) | |
X =< number, | |
turn(90,Speed). | |
start :- | |
stop. | |
Piotrek FIXME brakuje bardziej intuicyjnej funkcji z sensorami. Co ma oznaczać force? Może lepiej zamiast **trigger_fired(T,echo_sensor(X),[ nxt_motor(C,0), nxt_motor(c,0)]** dać jakiś **stop**, żeby zatrzymać te silniki? To zarządzanie sensorami jest takie troche zakręcone 8-) | |
start2 :- | |
sensor(echosonda,X), | |
X > parametr, | |
foward(Speed). | |
start2 :- | |
sensor(echosonda,X), | |
X =< parametr, | |
turn(right,90). | |
start2 :- | |
stop. | |
:?: A może coś takiego? To wydaje się mniej zlożone. | |
| |
==== XTT ==== | ==== Zapis regułowy ==== |
| |
| <code ada> |
| Rule: 1 |
| if ultrasonic_Value > 50 and go ≠ 0 |
| then go := 100 and go_cm := 0 and turn := 0 |
| |
| Rule: 2 |
| if ultrasonic_Value > 50 and go = 0 and turn = 0 |
| then go := 100 and go_cm := 0 and turn := 0 |
| |
| Rule: 3 |
| if ultrasonic_Value > 50 and go = 0 and turn < 0 |
| then go := 100 and go_cm := 0 and turn := 0 |
| |
| Rule: 4 |
| if ultrasonic_Value > 50 and go = 0 and turn > 0 |
| then go_cm := 10 and go := 0 and turn := 0 |
| |
| Rule: 5 |
| if ultrasonic_Value ≤ 50 and go ≠ 0 |
| then turn := 90 and go := 0 and go_cm := 0 |
| |
| Rule: 6 |
| if ultrasonic_Value ≤ 50 and go = 0 and turn ≠ 0 |
| then turn := 0 and go := 0 and go_cm := 10 |
| |
| Rule: 7 |
| if ultrasonic_Value ≤ 50 and go = 0 and turn = 0 and go_cm = 0 |
| then turn := 90 and go := 0 and go_cm := 0 |
| |
| Rule: 8 |
| if ultrasonic_Value ≤ 50 and go = 0 and turn = 0 and go_cm ≠ 0 |
| then turn := -90 and go := 0 and go_cm := 0 |
| </code> |
| |
| |
===== Objechanie przeszkody ===== | |
==== Zapis słowny ====h | |
- jedź do przodu | |
- jeżeli przeszkoda zatrzymaj się (wskaźnik echosondy poniżej progu) idź do ( c) inaczej wróć do (a) | |
- obróć się o 90<sup>0</sup> w prawo | |
- zrób krok do przodu | |
- obróć się o 90<sup>0</sup> w lewo i idź do (a) | |
==== Implementacja w Prologu ==== | |
==== XTT ==== | |
| |
===== Pokonywanie przeszkód ===== | |
==== Zapis słowny ==== | |
- jedź do przodu | |
- jeżeli przeszkoda zatrzymaj się (wskaźnik echosondy poniżej progu) idź do ( c) inaczej wróć do (a) | |
- obróć się o 45<sup>0</sup> w prawo i zapisz odczyt czujnika | |
- obróć się o 135<sup>0</sup> w lewo i zapisz odczyt czujnika | |
- jeżeli odczyt_1 większy od odczyt_2 obróć się o 135<sup>0</sup> w prawo | |
- idź do (a) | |
==== Implementacja w Prologu ==== | |
==== XTT ==== | |
| |
===== I tak kolejne.... ===== | |
==== Zapis słowny ==== | |
==== Implementacja w Prologu ==== | ==== Implementacja w Prologu ==== |
| <code prolog> |
| |
| state(go). // Knowladge Base => previous state updated in fly.. initial state would also be state(go) |
| |
| start :- |
| nxt_ultrasonic_sensor(port,Value) |
| Value > 50, |
| start_go. |
| |
| start :- |
| nxt_ultrasonic_sensor(port,Value) |
| Value =< 50, |
| start_turn. |
| |
| start :- |
| nxt_go(0). |
| |
| start_go :- |
| state(go), |
| nxt_go(0). |
| |
| start_go :- |
| state(go_cm), |
| nxt_go_cm(distance,speed). |
| |
| start_turn :- |
| state(go), |
| nxt_turn_degrees(speed,90). |
| |
| start_turn :- |
| state(go_cm), |
| nxt_turn_degrees(speed,-90). |
| </code> |
| |
| |
| |
==== XTT ==== | ==== XTT ==== |
====== Uwagi ====== | {{:pl:miw:miw08_mindstormsdesign:alg3.png|XTT}} |
====== Materiały ====== | |