Both sides previous revision
Poprzednia wersja
|
|
pl:miw:miw08_mindstormsdesign:strona_1 [2008/06/03 01:34] miw |
pl:miw:miw08_mindstormsdesign:strona_1 [2008/06/06 13:44] miw |
====== Algorytmy (echosonda) ====== | |
Poniżej znajdują się algorytmy sterowania wykorzystujące **echosondę**. Aby sprawdzić działanie algorytmów należy przygotować tor przeszkód. | |
| |
===== Objechanie przeszkody ===== | |
==== Zapis słowny ==== | |
- jedź do przodu | |
- 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 | |
- 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) | |
| |
| |
| |
| |
| |
==== Zapis regułowy ==== | |
| |
atrybuty: | |
* ultras_v | |
* robot_state | |
* prev_action | |
* robot_action | |
akcje | |
* zmiana wart atrybutu? | |
| |
pomieszanie | |
* deklaratywne/proceduralne | |
* reguły/uruchamianie | |
| |
model przetwarzania: | |
* pojedyncze przejscie, | |
* monitorowanie? | |
* nawroty? | |
| |
<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> | |
| |
| |
| |
| |
| |
==== 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 ==== | |
{{:pl:miw:miw08_mindstormsdesign:alg3.png|XTT}} | |
| |