|
|
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-09a [2009/01/31 20:35] jsi08 |
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090121-09a [2019/06/27 15:50] |
==== Sprawozdanie z laboratorium nr 5 ===== | |
---- | |
| |
| |
Data wykonania: **21.01.2009, godz. 9.30** | |
| |
Autorzy: **Damian Dudziński, Maciej Fabia, Szymon Frenkel** | |
| |
---- | |
| |
=== Realizacja === | |
| |
Zastaliśmy już złożonego robota "Franek", | |
| |
korzystał on z dwóch sensorów: | |
* czujnika sonarowego, | |
* czujnika dotyku; | |
| |
zatem mogliśmy od razu przystąpić do realizacji algorytmu. | |
| |
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. | |
| |
<code prolog> | |
:- consult('plnxt.pl'). | |
| |
start:- | |
nxt_open, | |
krecenie, | |
trigger_create(_,pushed,[nxt_stop,nxt_close]). | |
| |
krecenie :- | |
nxt_rotate(150,360), | |
sleep(1), % Chwila przerwy | |
trigger_create(_,przeszkoda,wypychanie). | |
| |
wypychanie :- | |
nxt_stop, | |
nxt_go_cm(300,40), | |
sleep(10), | |
nxt_go_cm(-300,40), | |
sleep(10). | |
trigger_create(_,_,krecenie). | |
| |
% Sprawdzenie, czy znaleziono przeszkodę | |
przeszkoda :- | |
nxt_ultrasonic(Value,force), | |
Value < 20. | |
| |
% Sprawdzenie, czy sensor dotyku jest wciśnięty. | |
pushed :- | |
nxt_touch(Value,force), | |
Value=1. | |
| |
:- start. | |
</code> | |
{{: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" - Franek nie poruszał się do tyłu. Natomiast funkcja nxt_go reagowała prawidłowo. | |
| |
=== Wnioski === | |
| |
Ułatwieniem w konstruowaniu algorytmu byłaby bardziej rozbudowana dokumentacja biblioteki NXT. | |
| |