Both sides previous revision
Poprzednia wersja
|
|
pl:miw:miw08_mindstormsdesign:strona_2 [2008/06/06 14:15] miw |
pl:miw:miw08_mindstormsdesign:strona_2 [2019/06/27 15:50] (aktualna) |
| ====== 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(1). |
| 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ą |
| |
| |