To jest stara wersja strony!
Labirynt
Przed przystąpieniem do zadania należy przygotować labirynt (makietę). W celu lepszego sterowania robotem dobrze jest również pozbyć się kleszczy z przodu (patrz budowa robota TriBot). Kleszcze mogą utrudniać poruszanie się robota po planszy.
W ramach prezentowanego niżej algorytmu przyjęto:
pola makiety po jakich poruszać się będzie robot są na tyle duże, że robot może się swobodnie obrócić
przyjmujemy budowę robota TriBot bez przednich kleszczy
robot nie wie nic o planszy
w algorytmie przyjęto ruch co określoną długość, w celu uproszczenia za długość kroku przyjęto szerokość jednego pola planszy (patrz rys. Labirynt)
każdej nowej pozycji przypisywany jest numer oraz parametry związane z tą pozycją
Opis pozycji robota:
pozycja robota zostaje opisana przez 8 pomiarów echosondy pobieranych co kąt 450. Otrzymane wyniki są zapisywane w bazie wiedzy robota o planszy. Kolejne pozycje są numerowane. Każda nowa pozycja znajduje się w odległości N cm od pozostałej (gdzie N jest szerokością jednego pola planszy). Taka struktura danych mogłaby wyglądać następująco:
pole(nr_pola,[nr_pomiaru,następne_pole,ultrasonic_value])
nr_pola - numer pola dla którego przeprowadzane są pomiary
nr_pomiaru - numer przeprowadzanego pomiaru
następne_pole - jest to informacja o polu jakie znajduje się w danym kierunku
utrasonic_value - wartość echosondy w danym kierunku
W ten sposób zdefiniowane pola można łączyć i budować prostą bazę wiedzy o otoczeniu robota.
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