|
|
pl:miw:miw08_mindstormsdesign:strona_2 [2008/06/06 13:40] miw |
pl:miw:miw08_mindstormsdesign:strona_2 [2017/07/17 10:08] |
====== Poruszanie się wzdłuż linii ====== | |
Poniżej znajdują się algorytm sterowania wykorzystujący **sensor natężenia światła**. | |
| |
===== Algorytm 1 ===== | |
Aby sprawdzić działanie algorytmu należy przygotować makietę z narysowaną czarną linią (najlepiej na białym tle). W algorytmie założono, że robot znajduje się na czarnej linii w chwili startu. Zadaniem robota jest poruszanie się wzdłuż linii. | |
| |
==== Zapis słowny ==== | |
| |
- jedź do przodu jeżeli widzisz czarną linię, inaczej idź do pkt (2) | |
- obracaj się w prawo o N<sup>0</sup> póki obrót < 45<sup>0</sup>. Jeżeli linia czarna idź do (1). Jeżeli obrót > 45<sup>0</sup> idź do (3). | |
- obróć się w lewo o 45<sup>0</sup>. Obracaj się o -N<sup>0</sup> w lewo póki obrót > -45<sup>0</sup>. Jeżeli linia czarna idź do (1). Jeżeli obrót < -45<sup>0</sup> to STOP | |
| |
| |
| |
==== Zapis regułowy ==== | |
Poniżej został zastosowany zupełny zapis reguł. W zapisie w Prologu zapis ten ulegnie zmianie. | |
<code ada> | |
Rule: 1 | |
if light_value == 'black' | |
then go = 1 and trun_mem = 0 | |
| |
Rule: 2 | |
if light_value != 'black' and turn_mem in [0,45) | |
then turn = 1 and turn_mem += turn | |
| |
Rule: 3 | |
if light_value != 'black' and turn_mem in (-45,0) | |
then turn = 1 and turn_mem += turn | |
| |
Rule: 4 | |
if light_value != 'black' and turn_mem >= 45 | |
then turn = -turn_mem and turn_mem = -1 | |
| |
Rule: 5 | |
if light_value != 'black' and turn_mem not in (-45,0) and not in [0,90) | |
then STOP | |
| |
| |
</code> | |
| |
| |
| |
| |
==== Implementacja w Prologu ==== | |
| |
<code prolog> | |
start :- | |
nxt_light_sensor(Port,Value), | |
Value = RGB_black, | |
assert(turn_mem(0)), | |
nxt_go(0). | |
start :- | |
turn_mem(Value), | |
Value >= 0, | |
Value < 45, | |
nxt_turn(Speed,1) | |
retractall(turn_mem(_)), | |
increment(Value,X), | |
assert(turn_mem(X)). | |
start :- | |
turn_mem(Value), | |
Value >= 45, | |
nxt_turn(Speed,-Value), | |
retractall(turn_mem(_)), | |
assert(turn_mem(-1)). | |
start :- | |
turn_mem(Value), | |
Value < 0, | |
Value > -45, | |
nxt_turn(Speed,-1), | |
retractall(turn_mem(_)), | |
decrement(Value,X), | |
assert(turn_mem(X)). | |
start :- | |
nxt_go(0). | |
</code> | |
| |
| |
| |
| |
==== XTT ==== | |
{{:pl:miw:miw08_mindstormsdesign:alg5.png|XTT}} | |
| |
| |
{{:pl:miw:miw08_mindstormsdesign:alg6.png|XTT2}} | |
| |
UWAGI!!! FIXME | |
* Problem z wpisaniem wartości z ujemną wartością | |
| |
| |