To jest stara wersja strony!


Labirynt

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:

  1. pola makiety po jakich poruszać się będzie robot są na tyle duże, że robot może się swobodnie obrócić
  2. przyjmujemy budowę robota TriBot bez przednich kleszczy
  3. robot nie wie nic o planszy
  4. 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)
  5. każdej nowej pozycji przypisywany jest numer oraz parametry związane z tą pozycją

Opis pozycji robota: Pomiar

  1. 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

Przechodzenie do następnego pola W ten sposób zdefiniowane pola można łączyć i budować prostą bazę wiedzy o otoczeniu robota.

Zapis słowny

  1. jedź do przodu
  2. jeżeli przeszkoda zatrzymaj się (wskaźnik echosondy poniżej progu) idź do (3) inaczej wróć do (1)
  3. obróć się o 900 w prawo
  4. 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

XTT

pl/miw/miw08_mindstormsdesign/labirynt.1211230972.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0