|
|
pl:hexor:hexor_prolog [2007/11/28 16:36] root Links to pl:hexor_prolog_mt changed to pl:hexor:hexor_prolog_mt |
pl:hexor:hexor_prolog [2019/06/27 15:50] |
====== 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 ) | |
- 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). | |
| |
| |
| |
| |
====== 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),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),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'). | |
gohexor:- writeln('ERROR'). | |
| |
| |
| |
===== Wykonanie pojedynczego kroku ===== | |
W celu wykonania pojedynczego kroku robotem można użyć następującej procedury: | |
| |
onestepforward(U):- forward(U),stop(U). | |
| |
| |
| |
| |
====== Programwanie krok po kroku ====== | |
- [[hexor_prolog_stanowisko|Instalacja stanowiska]] | |
- Pobierz kod programu z tą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 laboratorium. | |
- Skompiluj uruchamiając komende //make// . Jeśli pojawiły się błędy wróć do punktu 6. | |
- Uruchom komendą //./hexprPL// | |
- 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 beprzewodowego | |
| |
{{hexoroldnewarchitecture.png|Architektura systemu sterującego}} \\ | |
| |
Warstwa 3 budowana 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 | |