Lista rozkazów

  1. forward(+unit) – rozpoczęcie poruszania naprzód, robot porusza się do przodu do czasu podania innej komendy ruchu lub rozkazu stop. unit - numer robota, aktualnie 11,
  2. backward(+unit) – rozpoczęcie poruszania wstecz, robot porusza się do tyłu do czasu podania innej komendy ruchu lub rozkazu stop
  3. left(+unit) – rozpoczęcie skręcania w lewo, robot skręca do czasu podania innej komendy ruchu lub rozkazu stop
  4. right(+unit) – rozpoczęcie skręcania w prawo, robot skręca do czasu podania innej komendy ruchu lub rozkazu stop
  5. stop(+unit) – zatrzymanie robota
  6. camera(+unit,+x,+y) - x,y współrzędne pozioma i pionowa ustawienia kamery/sonaru Y=240 poziom, X= 68 - 248 ( max w lewo do max w prawo )
  7. cameraOn(+unit) - włącz przesyłanie obrazy z kamery ( w celu podglądania obrazu z kamery na komputerze należy: włączyć odbiornik (zasilacz i przełącznik ) uruchomić program xawtv i wybrać jako wejście Composite1 - menu kontekstowe pod prawym klawiszem)
  8. cameraOff(+unit) - wyłącz przesyłanie obrazu z kamery
  9. readSensors(+unit,-temp,-sonar) temp,sonar wartości temperatury i sonaru odczytane z robota
  10. readIR(+unit,-state) state - stan czujników IR i dotykowych - sensor aktywny ⇒ odpowiedni bit w stanie niskim
  11. delay(+seconds) - czekaj przez seconds sekund
Znaczenie bitów argumentu state w readIR
7 6 5 4 3 2 1 0
??? dotykowy prawy dotykowy lewy IR przód IR lewy tył ??? IR środkowy tył IR prawy tył

Predykaty zwracają wartość TRUE w przypadku prawidłowego wykonania w przeciwnym wypadku FALSE ( np. błąd komunikacji).
Robot zatrzymuje się automatycznie po wykryciu przeszkody ( czujniki IR, dotykowe, przekroczenie wartości progowej dla sonaru).
W wypadku awarii programu ( zrzucenie pliku core ) proszę go przesłać na adres ptm@agh.edu.pl wraz z opisem sytuacji.

Przykładowe programy

Programy demonstrujące wykorzystania predykatów prologowych do sterowania robotem. Programy te do uruchomienia wymagają plików z: hexor_prolog.tar.gz.

Skanowanie sonarem i odczyt czujników

:-dynamic counter/1.
counter(68).
unit(11).
runme:- start.
start:-         unit(U),cameraOn(U),camera(U,68,240),sensors.
sensors:-       counter(T),T > 240, retract(counter(_)),assert(counter(68)),!,sensors.
sensors:-       unit(U),counter(T),X is T + 10, retract(counter(_)),assert(counter(X)),camera(U,X,240),
                readSensors(U,A,B),
                readIR(U,C),
                write('temp: '),write(A),
                write(' sonar: '),write(B),
                write(' ir: '),write(C),
                nl,!,sensors.

Poruszanie robotem

unit(11).
runme:- gohexor.
gohexor:-       unit(U),cameraOn(U),forward(U),writeln('forward'),delay(5),
                backward(U),writeln('backward'),delay(5),
                left(U),writeln('left'),delay(5),
                right(U),writeln('right'),delay(5),
                forward(U),writeln('forward'),delay(5),
                stop(U),writeln('stop'),writeln('DONE'),cameraOff(U).
gohexor:-       writeln('ERROR'),cameraOff(U).

Wykonanie pojedynczego kroku

W celu wykonania pojedynczego kroku robotem można użyć następującej procedury:

onestepforward(U):- forward(U),stop(U).

Podobnie można wykonywać pojedyncze kroki w innych kierunkach:

onestepleft(U):- left(U),stop(U).

Programowanie krok po kroku

  1. Pobierz kod programu stąd hexor_prolog.tar.gz
  2. Rozpakuj poleceniem tar xzf hexor_prolog.tar.gz
  3. Pojawi się katalog hexor_prolog
  4. Wejdź do katalogu cd hexor_prolog
  5. Kod programu sterującego jest w pliku hexorPL.pl
    • domyślnie uruchamiane są równolegle 2 cele w prologu runme1 i runme2
    • jeśli korzystasz tylko z jednego wątku drugi zakończ przez runme2.
    • TYLKO JEDEN WĄTEK MOŻE UŻYWAĆ PREDYKATÓW DO KOMUNIKOWANIA SIĘ Z ROBOTEM
    • dodatkowe wątki można uzyskać w/g instrukcji z hexor_prolog_mt
  6. Zmodyfikuj go zgodnie z tematem laboratorium.
  7. Skompiluj uruchamiając komendę make . Jeśli pojawiły się błędy wróć do punktu 6.
  8. Uruchom komendą ./hexorPL
  9. Powtarzaj punkty 6-8 aż do osiągnięcia celu.

Obsługa robota

  • Przed rozpoczęciem ćwiczeń podłącz robota do ładowarki
    1. włącz ładowarkę do sieci
    2. wyłącz robota
    3. podłącz wtyczkę ładowarki do gniazda na korpusie robota
      • świeci żółta dioda - ładowarka jest poprawnie podpięta do sieci
      • świeci zielona dioda - ładowany jest akumulator ( intensywność świecenia jest odwrotnie proporcjonalna do naładowania akumulatora)
  • Podłącz nadajnik do portu USB komputera.
  • Sprawdź czy pojawiło się urządzenie ttyUSB0 ( polecenie dmesg w linii poleceń)
  • Sprawdź czy jest poprawna komunikacja z robotem wykorzystując przykładowe programy.
  • Napisz własny program i testuj.
  • Jeśli robot nie jest używany przez dłuższy czas to podłącz go do ładowarki.
  • Robota nie da się włączyć jeśli wtyczka ładowarki jest podłączona

Architektura systemu sterującego

System sterowania robota Hexor składa się z następujących warstw:

  1. sprzęt
  2. oprogramowanie w Basicu sterujące mikrokontrolerami na płycie robota
  3. stacji nadrzędnej sterującej zachowaniem robota ( w tym przypadku PC + program w prologu )

Warstwy 2 i 3 połączone są ze sobą za pomocą łącza bezprzewodowego (RS-232)

Architektura systemu sterującego

Warstwa 3 zbudowana jest z następujących elementów:

  1. hexor.c/hexor.h biblioteka funkcji do komunikacji z robotem wykorzystująca port szeregowy
  2. hexorPL.c główny plik uruchamiający program sterujący. Zawiera funkcję main w języku C, która wywołuje interpreter prologu. Plik ten zawiera też definicje predykatów które dołączane są do interpretera prologu ( patrz funkcja main )
  3. hexorPL.pl plik zawierający program w prologu sterujący robotem. Można w nim używać dodatkowych predykatów zdefiniowanych w pliku hexorPL.c
  4. biblioteki EPP ułatwiającej dodawanie predykatów do prologu i zarządzanie wieloma wątkami wykonania w prologu
pl/hexor/hexor_prolog.txt · ostatnio zmienione: 2019/06/27 15:50 (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