To jest stara wersja strony!
Algorytmy (echosonda)
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 900 w prawo
idź do (1)
Zapis regułowy
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
Implementacja w Prologu
start :-
ultrasonic_sensor(Value),
Value > number,
go(0,speed,force).
start :-
ultrasonic_sensor(Value),
Value =< number,
turn(90,speed).
start :-
go(0,0,0).
XTT
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 900 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 900 w lewo i idź do (1)
Zapis regułowy
Rule: 1
if ultrasonic_sensor_Value > number
then robot_state is go
Rule: 2
if ultrasonic_sensor_Value ≤ number
then robot_state is turn
Rule: 3
if robot_state is go
and previous_action is turn_right_90_degrees
then robot_action is go_one_step_foward
Rule: 4
if robot_state is go
and previous_action is go_foward
then robot_action is go_foward
Rule: 5
if robot_state is go
and previous_action is turn_left_90_degrees
then robot_action is go_foward
Rule: 6
if robot_state is turn
and previous_action is go_foward
then robot_action is turn_right_90_degrees
Rule: 7
if robot_state is turn
and previous_action is go_one_step_foward
then robot_action is turn_left_90_degrees
Implementacja w Prologu
state(go_foward). // Knowladge Base => previous state updated in fly.. initial state would also be state(go)
start :-
ultrasonic_sensor(Value),
Value > number,
start_go.
start :-
ultrasonic_sensor(Value),
Value =< number,
start_turn.
start :-
go(0,0,0).
start_go :-
state(go_foward),
go(0,speed,force).
start_go :-
state(go_step_foward),
go_cm(distance,speed).
start_turn :-
state(go_foward),
turn_degrees(90,speed).
start_turn :-
state(go_step_foward),
turn_degrees(-90,speed).
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 450 w prawo i zapisz odczyt czujnika
obróć się o 1350 w lewo i zapisz odczyt czujnika
jeżeli odczyt_1 większy od odczyt_2 obróć się o 1350 w prawo
idź do (a)
Zapis regułowy
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
Implementacja w Prologu
start :-
ultrasonic_sensor(Value),
Value > number,
go(0,speed,force).
start :-
ultrasonic_sensor(Value),
Value =< number,
turn(90,speed).
start :-
go(0,0,0).
XTT
I tak kolejne....
Zapis słowny
Implementacja w Prologu
XTT
Uwagi
Materiały