Lista rozkazów
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,
backward(+unit) – rozpoczęcie poruszania wstecz, robot porusza się do tyłu do czasu podania innej komendy ruchu lub rozkazu stop
left(+unit) – rozpoczęcie skręcania w lewo, robot skręca do czasu podania innej komendy ruchu lub rozkazu stop
right(+unit) – rozpoczęcie skręcania w prawo, robot skręca do czasu podania innej komendy ruchu lub rozkazu stop
stop(+unit) – zatrzymanie robota
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 )
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)
cameraOff(+unit) - wyłącz przesyłanie obrazu z kamery
readSensors(+unit,-temp,-sonar) temp,sonar wartości temperatury i sonaru odczytane z robota
readIR(+unit,-state) state - stan czujników IR i dotykowych - sensor aktywny ⇒ odpowiedni bit w stanie niskim
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
-
Rozpakuj poleceniem tar xzf hexor_prolog.tar.gz
Pojawi się katalog hexor_prolog
Wejdź do katalogu cd hexor_prolog
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
-
-
Skompiluj uruchamiając komendę make . Jeśli pojawiły się błędy wróć do punktu 6.
Uruchom komendą ./hexorPL
Powtarzaj punkty 6-8 aż do osiągnięcia celu.
Obsługa robota
Przed rozpoczęciem ćwiczeń podłącz robota do ładowarki
włącz ładowarkę do sieci
wyłącz robota
podłącz wtyczkę ładowarki do gniazda na korpusie robota
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:
sprzęt
oprogramowanie w Basicu sterujące mikrokontrolerami na płycie robota
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)
Warstwa 3 zbudowana jest z następujących elementów:
hexor.c/hexor.h biblioteka funkcji do komunikacji z robotem wykorzystująca port szeregowy
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 )
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
biblioteki EPP ułatwiającej dodawanie predykatów do prologu i zarządzanie wieloma wątkami wykonania w prologu