Skład zespołu:

  • Bartosz Beza
  • Wojciech Kucharski
  • Piotr Walat

1. Wstęp

  • Laboratorium miało na celu dalszą pracę z interfejsem programistycznym PLNXT oraz implementację wybranych algorytmów. Programy wykorzystywały mechanizmy wielowątkowości oraz tzw. 'trigerrów' (wyzwalaczy?).
  • Głównym zadaniem wykonywanym podczas laboratorium było zaimplementowanie algorytmu Sprzątacz opisanego w instrukcji do laboratorium.

2. Konstrukcja robota

  • Wykorzystanym robotem był robot Henio udostepniony w wariancie Quick start przez prowadzącego.
  • W trakcie przeprowadzanych testów dokonaliśmy kilku poprawek konstrukcji robota w tym w szczególności obniżenia sensora odległości.

W końcowej części laboratorium przeprowadziliśmy próby zainstalowania specjalnego „ramienia” służącego do przepychania przedmiotów, jednakże niestety z powodu braku czasu nie uruchomiliśmy robota w takiej postaci.

Modyfikacje

Wersja po przeróbkach

3. Opracowanie algorytmów

  • Naszym celem było napisanie programu sterującego w taki sposób robotem, aby ten „oczyszczał” teren o promieniu X wokół siebie z przedmiotów.
  • Implementacja algorytmu opierała się na poniższych krokach:
  1. rotacja robota o 360 stopni lub dopóki nie zostanie wykryta przeszkoda
  2. jeśli zostanie wykryta przeszkoda (trigger) robot porusza się X+d cm do przodu usuwając przeszkodę
  3. robot cofa się o X+d cm do tyłu wracając do poprzedniego położenia
  4. powrót to początku algorytmu (rotacja + detekcja)

sprzatacz.pl

:- consult('plnxt.pl').
 
start :-
    nxt_open,
    thread_create(rotate,_,[detached(true)]).
 
 
rotate :-
    nxt_rotate(150,360),
    trigger_create(_,obstacle,remove_obstacle).
obstacle :-
    nxt_ultrasonic(Value, force),
    Value < 15.
 
remove_obstacle :-
    nxt_stop,
    nxt_go_cm(200,15),
    nxt_rotate(300,180),
    nxt_go_cm(200,15),
    nxt_rotate(300,180),
    rotate.
 
stop :-
    trigger_killall,
    nxt_stop,
    nxt_close.

Za X przyjęto arbitralną wartość dostosowaną do warunków panujących na stole pod oknem (15).

4. Napotkane problemy

  • Niestety podczas cofania się robota napotkaliśmy problem. Wykonanie nxt_go_cm z ujemna wartoscia predkosci nie skutkowało zamierzonym rezultatem (program kończył działanie). Ze względu na presję czasu oraz wyczerpanie się teorii wyjaśniających problem zdecydowaliśmy się na zastosowanie nieco brzydkiego 'workaround'. Zamiast jazdy w tył dokonywany jest obrót o 180 st. jazda do przodu i ponowny obrót o 180 stopni. Dało to zadawalające rezultaty
  • Usuwanie niektórych przedmiotów o nieprzewidywalnej trajektorii ruchu (piłeczka) jest nieco problematyczne. Konieczne staje się zastosowanie specjalnego ramienia, lub bardziej złożonego zachowania - np. śledzenia obiektu. Robot dobrze radził sobie np. z pudełkami po kościach ram :-)

5. Co rozszerzyć w laboratorium?

  • Niestety brak czasu zmusza niekiedy do stosowania mało eleganckich rozwiązań i półśrodków
  • Więcej złożonych przykładów

5. Wnioski

  • Bardziej złożone problemy i algorytmy często wymagają przemyślnej konstrukcji robota, tak aby nie generować niepotrzebnych komplikacji.
  • nxt_go_cm(-200,15) sprawiało kłopoty… być może z naszej winy, aczkolwiek nie udało nam się rozwiązać tej kwestii
pl/dydaktyka/piw/2009/sprawozdania/piw20090429-08c.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0