To jest stara wersja strony!
Poruszanie się wzdłuż linii
Poniżej znajdują się algorytm sterowania wykorzystujący sensor natężenia światła.
Poruszanie się wzdłuż narysowanej linii
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 N0 póki obrót < 450. Jeżeli linia czarna idź do (1). Jeżeli obrót > 450 idź do (3).
obróć się w lewo o 450. Obracaj się o -N0 w lewo póki obrót > -450. Jeżeli linia czarna idź do (1). Jeżeli obrót < -450 to STOP
Zapis regułowy
Poniżej został zastosowany zupełny zapis reguł. W zapisie w Prologu zapis ten ulegnie zmianie.
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 not in (-45,0) and not in [0,45)
then STOP
Implementacja w Prologu
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)
increment(Value,X),
assert(turn_mem(X)).
start :-
start :-
turn_mem(Value),
Value < 0,
Value > -45,
nxt_turn(Speed,-1)
increment(Value,X),
assert(turn_mem(X)).
start :-
ultrasonic_sensor(Value),
Value =< N/4,
nxt_turn(Speed,+180).
start :-
ultrasonic_sensor(Value),
Value =< N/2,
nxt_turn(Speed,+90).
start :-
ultrasonic_sensor(Value),
Value =< N,
nxt_turn(Speed,-90).
start :-
nxt_go(1).
XTT
I tak kolejne....
Zapis słowny
Implementacja w Prologu
XTT
Uwagi
Materiały