====== 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 ====== - Pobierz kod programu stąd {{hexor_prolog.tar.gz}} - 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 * dodatkowe wątki można uzyskać w/g instrukcji z [[hexor_prolog_mt]] - Zmodyfikuj go zgodnie z tematem [[pl:hexor:hexor_lab|laboratorium]]. - 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 * ś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: - 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) {{hexoroldnewarchitecture.png|Architektura systemu sterującego}} \\ 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