Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_mindstormsdesign:strona_1 [2008/04/08 01:31] 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 ===== | |
| |
==== 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 | |
- 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_90_degrees | |
| |
Rule: 3 | |
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 ==== | |
{{:pl:miw:miw08_mindstormsdesign:alg11.png|XTT}} | |
| |
| |
===== Objechanie przeszkody ===== | ===== Objechanie przeszkody ===== |
- jeżeli przeszkoda idź do (3) inaczej idź wykonaj kolejny punkt | - jeżeli przeszkoda idź do (3) inaczej idź wykonaj kolejny punkt |
- obróć się o 90<sup>0</sup> w lewo i idź do (1) | - obróć się o 90<sup>0</sup> w lewo i idź do (1) |
| |
| |
| |
| |
| |
==== Zapis regułowy ==== | ==== Zapis regułowy ==== |
| |
<code ada> | <code ada> |
Rule: 1 | Rule: 1 |
if ultrasonic_sensor_Value > number | if ultrasonic_Value > 50 and go ≠ 0 |
then robot_state is go | then go := 100 and go_cm := 0 and turn := 0 |
| |
Rule: 2 | Rule: 2 |
if ultrasonic_sensor_Value ≤ number | if ultrasonic_Value > 50 and go = 0 and turn = 0 |
then robot_state is turn | then go := 100 and go_cm := 0 and turn := 0 |
| |
Rule: 3 | Rule: 3 |
if robot_state is go | if ultrasonic_Value > 50 and go = 0 and turn < 0 |
and previous_action is turn_right_90_degrees | then go := 100 and go_cm := 0 and turn := 0 |
then robot_action is go_one_step_foward | |
| |
Rule: 4 | Rule: 4 |
if robot_state is go | if ultrasonic_Value > 50 and go = 0 and turn > 0 |
and previous_action is go_foward | then go_cm := 10 and go := 0 and turn := 0 |
then robot_action is go_foward | |
| |
Rule: 5 | Rule: 5 |
if robot_state is go | if ultrasonic_Value ≤ 50 and go ≠ 0 |
and previous_action is turn_left_90_degrees | then turn := 90 and go := 0 and go_cm := 0 |
then robot_action is go_foward | |
| |
Rule: 6 | Rule: 6 |
if robot_state is turn | if ultrasonic_Value ≤ 50 and go = 0 and turn ≠ 0 |
and previous_action is go_foward | then turn := 0 and go := 0 and go_cm := 10 |
then robot_action is turn_right_90_degrees | |
| |
Rule: 7 | Rule: 7 |
if robot_state is turn | if ultrasonic_Value ≤ 50 and go = 0 and turn = 0 and go_cm = 0 |
and previous_action is go_one_step_foward | then turn := 90 and go := 0 and go_cm := 0 |
then robot_action is turn_left_90_degrees | |
| 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> | </code> |
| |
| |
| |
| |
<code prolog> | <code prolog> |
| |
state(go_foward). // Knowladge Base => previous state updated in fly.. initial state would also be state(go) | state(go). // Knowladge Base => previous state updated in fly.. initial state would also be state(go) |
| |
start :- | start :- |
ultrasonic_sensor(Value), | nxt_ultrasonic_sensor(port,Value) |
Value > number, | Value > 50, |
start_go. | start_go. |
| |
start :- | start :- |
ultrasonic_sensor(Value), | nxt_ultrasonic_sensor(port,Value) |
Value =< number, | Value =< 50, |
start_turn. | start_turn. |
| |
start :- | start :- |
go(0,0,0). | nxt_go(0). |
| |
start_go :- | start_go :- |
state(go_foward), | state(go), |
go(0,speed,force). | nxt_go(0). |
| |
start_go :- | start_go :- |
state(go_step_foward), | state(go_cm), |
go_cm(distance,speed). | nxt_go_cm(distance,speed). |
| |
start_turn :- | start_turn :- |
state(go_foward), | state(go), |
turn_degrees(90,speed). | nxt_turn_degrees(speed,90). |
| |
start_turn :- | start_turn :- |
state(go_step_foward), | state(go_cm), |
turn_degrees(-90,speed). | nxt_turn_degrees(speed,-90). |
</code> | </code> |
| |
| |
==== XTT ==== | |
{{:pl:miw:miw08_mindstormsdesign:alg2.png|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) | |
==== 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 ==== | ==== XTT ==== |
| {{:pl:miw:miw08_mindstormsdesign:alg3.png|XTT}} |
| |
===== I tak kolejne.... ===== | |
==== Zapis słowny ==== | |
==== Implementacja w Prologu ==== | |
==== XTT ==== | |
====== Uwagi ====== | |
====== Materiały ====== | |