Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_mindstormsdesign:strona_1 [2008/05/19 17:23] 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}} | |
| |
===== Pokonywanie przeszkód ===== | |
| |
==== 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 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 (1) | |
| |
==== Zapis regułowy ==== | |
<code ada> | |
Rule: 1 | |
if ultrasonic_sensor_Value > number | |
then robot_action is go_foward | |
| |
Rule: 2 | |
if ultrasonic_sensor_Value ≤ number | |
then robot_action is turn_right | |
| |
Rule: 3 // co z ta reguła ??? | |
if error | |
then stop | |
</code> | |
| |
==== Implementacja w Prologu ==== | |
<code prolog> | |
start :- | |
ultrasonic_sensor(Value), | |
Value > number, | |
go(0,speed,force). | |
start :- | |
ultrasonic_sensor(Value), | |
Value =< number, | |
turn(90,speed). | |
start :- | |
go(0,0,0). | |
</code> | |
==== XTT ==== | |
| |
===== I tak kolejne.... ===== | |
==== Zapis słowny ==== | |
==== Implementacja w Prologu ==== | |
==== XTT ==== | |
====== Uwagi ====== | |
====== Materiały ====== | |