Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-09a [2009/01/28 21:56] jsi08 |
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-09a [2019/06/27 15:50] (aktualna) |
---- | ---- |
| |
Robot: **?** | |
| |
Data wykonania: **21.01.2009, godz. 9.30** | Data wykonania: **21.01.2009, godz. 9.30** |
---- | ---- |
| |
Budowa naszego robota: | === Realizacja === |
| |
| Zastaliśmy już złożonego robota, |
| |
{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:franek14-01-09.jpg?220|}} | korzystał on z dwóch sensorów: |
{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:franek2_14-01-09.jpg?220|}} | * czujnika sonarowego, |
| * czujnika dotyku; |
| |
| zatem mogliśmy od razu przystąpić do realizacji algorytmu. |
| |
Franek korzystał z dwóch sensorów: | Zaimplementowaliśmy algorytm "sprzątacza", w którym robot miał za zadanie usunąć wszystkie przeszkody znajdujące się w odległości nie większej niż określona. Aby to zrealizować obracał się on wokół własnej osi, a po wykryciu przeszkody przez czujnik sonarowy wstrzymywał ruch obrotowy, wykonywał ruch w kierunku przeszkody wypychając ją poza obszar do wysprzątania, a potem wracał na wcześniejszą pozycję i kontynuował ruch obrotowy, aż do sprawdzenia całego obszaru wokół siebie. Czujnik dotyku służył za awaryjny wyłącznik robota, który uaktywniał się także, gdy przesuwana przeszkoda była zbyt ciężka dla robota. |
* czujnika sonarowego | |
* czujnika dotyku | |
| |
| |
Najpierw zapoznaliśmy się z podstawowymi poleceniami API robota: | |
* otwieranie i zamykanie połączenia Bluetooth - nxt_open, nxt_close, | |
* poruszanie się z daną prędkością i zatrzymywanie - nxt_go(n), nxt_stop, | |
* pobieranie danych z czujników - nxt_sound, nxt_touch, | |
* reagowanie na zdarzenie - trigger_create. | |
| |
| |
Zaimplementowaliśmy algorytm "sprzątacza", w który robot miał za zadanie usunąć wszystkie przeszkody znajdujące się w odległości nie większej niż określona. | |
| |
<code prolog> | <code prolog> |
nxt_go_cm(-300,40), | nxt_go_cm(-300,40), |
sleep(10). | sleep(10). |
trigger_create(_,fakt,krecenie). | trigger_create(_,_,krecenie). |
| |
% Sprawdzenie, czy znaleziono przeszkodę | % Sprawdzenie, czy znaleziono przeszkodę |
:- start. | :- start. |
</code> | </code> |
{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:panikarz_14-01-09.pl|}} | {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:sprzatacz.pl|}} |
| |
| === Problemy === |
| |
| Niestety, szczególnie na początku zajęć, kilkukrotnie nieoczekiwanie robot przestawał wykonywać wysyłane mu polecenia i konieczne było jego wyłączenie i nawiązywanie komunikacji od nowa. W czasie testowania algorytmu okazywało się również, że jednak polecenia biblioteki NXT nie zawsze działają według naszych oczekiwań: |
| * funkcja odczytująca stan czujnika dotyku "nxt_touch(Value,force)" przez pewien czas zwracała wartości "181" i "1023" zamiast binarnych, |
| * przy użyciu funkcji obracającej robota "nxt_rotate(150,360)" realny kąt obrotu nie zgadzał się z żądanym, |
| * funkcja nxt_go_cm nie działała, gdy otrzymywała ujemny argument "Speed" - robot nie poruszał się do tyłu. Natomiast funkcja nxt_go reagowała prawidłowo. |
| |
=== Wnioski === | === Wnioski === |
| |
| Ułatwieniem w konstruowaniu algorytmu byłaby bardziej rozbudowana dokumentacja biblioteki NXT. |
| |