=== Laboratorium 3 === ---- === Prezentacja robota: === W tym tygodniu mięliśmy o wiele ułatwione zadanie. Nie musieliśmy sami budować robota, bo zrobili to koledzy z wcześniejszej grupy. Nam przypadło zadanie napisania algorytmów sterowania dla Gienia. Po wejściu do sali byliśmy pod wrażeniem tworów jakie zostawili nasi koledzy. Roboty wykonane zgodnie z instrukcjami producenta Lego robiły wrażenie swoim wyglądem. Trzeba przyznać że na samodzielne wymyślenie podobnych konstrukcji należało by poświęcić bardzo dużo czasu, a na to nie pozwalają jedynie półtoragodzinne zajęcia. Czas przy robotach płynie bardzo szybko - a strasznie dużo pomysłów przychodzi do głowy i niestety tylko nieliczne można przetestować. W tym tygodniu współpracowaliśmy razem z Gieniem, który przy pomocy kolegów zamienił się w dźwig. Bardzo ciekawie został wymyślony mechanizm poruszania ramieniem i zamykania chwytaka, co przez chwilę z zainteresowaniem analizowaliśmy. Dodatkowo Gieniu miał zamontowane dwa czujniki: czujnik światła i czujnik dotyku, które wykorzystaliśmy w naszych algorytmach. **Zdjęcia Gienia:** {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:gienek_-_dzwig_1.jpg}}{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:gienek_-_dzwig_2.jpg|}}{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:gienek_-_dzwig_3.jpg|}} ---- === Projektowanie algorytmów: === Nasze algorytmy budowaliśmy w oparciu o gotowce z pomocy dostarczonej z oprogramowaniem. Dodaliśmy także kilka naszych modyfikacji, które sprawiły że w naszej opinii algorytmy działały bardziej naturalnie. **Algorytm I** Pierwszy algorytm został napisany w celu przetestowania ruchu ramienia w obydwu kierunkach. Robot wysuwa ramię, następnie przekręca je w jedną stronę, po chwili przekręca je z powrotem i składa je do pozycji wyjściowej. Schemat algorytmu został przedstawiony niżej: {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:galg-1d.png|}} {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:alg-1.rbt|}} **Algorytm II** Zadaniem algorytmu jest przeniesienie piłki z jednego stojaka na drugi z założeniem że znajdują się one w odpowiedniej empirycznie wybranej odległości, które są w zasięgu ramienia robota. Ten algorytm został napisany zgodnie z instrukcją zamieszczoną w dokumentacji. Robot wysuwa ramię i zaciska chwytak. Jeżeli nie ma przedmiotu przycisk czujnika nie zostanie wciśnięty i robot wraca do pozycji wyjściowej. Jeżeli natomiast znajdzie przedmiot, przekręca ramię w kierunku drugiego stojaka i odkłada piłkę na miejsce. Algorytm działał bardzo dobrze, jednak nie działał tak jak oczekiwaliśmy dlatego dokonaliśmy pewnych poprawek. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:galg-2d.png|}} {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:alg-2.rbt|}} **Algorytm III** Zamieszczamy tutaj algorytm III, który jest poprawioną wersją algorytmu II. W poprzedniej wersji nie spodobało nam się to, że po zaciśnięciu chwytaka ramię pozostawało na tej samej wysokości i tylko przekręcało się w bok. Powodowało to że zaczepiało ono o stojak, na którym umieszczaliśmy piłki. Nasza modyfikacja objęła dźwignięcie ramienia do góry po złapaniu przedmiotu, przekręcenie i opuszczenie ramienia a następnie wypuszczenie przedmiotu. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:galg-3d.png|}} {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:alg-3.rbt|}} **Algorytm IV** Algorytm ten, również został napisany zgodnie z instrukcją zamieszczoną w dokumentacji. Tym razem wykorzystujemy czujnik natężenia światła. Zadaniem robota jest rozróżnienie, którą piłkę złapał. Jeżeli jest to piłka niebieska ma zostać na stojaku. Przenosimy jedynie piłkę czerwoną. Algorytm działał zgodnie z tym co zostało zaprogramowane. Robot przenosi piłkę czerwoną, a zostawia niebieską. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:galg-4d.png|}} {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:alg-4.rbt|}} **Algorytm V** Jest to podobna modyfikacja tym razem algorytmu IV. I tym razem ramię robota po zaciśnięciu się na piłce pozostawało na tej samej wysokości. Dodaliśmy podnoszenie i opuszczanie ramienia, przy przenoszeniu piłki. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:galg-5d.png|}} {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:alg-5.rbt|}} Widząc jak Gienio świetnie sobie radzi postanowiliśmy uwiecznić jego prace ;) \\ [[http://pl.youtube.com/watch?v=27lS8LX-vjs|Gienio lubi czerwony]] \\ [[http://pl.youtube.com/watch?v=CDOvcV2DQr4|Gienio nie lubi niebieskiego]] ---- === Integracja i testowanie: === Po napisaniu algorytmu przychodził czas na testowanie tego co stworzyliśmy. Testowaliśmy każdy algorytm dla różnych ustawień początkowych ramienia oraz różnych wysokości stojaków. Nie mięliśmy w tym tygodniu większych problemów, a te co napotkaliśmy znajdują się opisane niżej. ---- === Problemy: === * Mieliśmy problem ze stojakami na piłki. Te których opis budowy został zamieszczony w instrukcji były bardzo niestabilne i za wysokie tak że ramię robota nie mogło się swobodnie ruszać. Problem rozwiązaliśmy wykorzystując krótsze klocki z których były zbudowane stojaki. * Na początku pracy Gienia stwierdziliśmy że podczas ruchu ramienia coś jest nie tak gdyż było słychać dziwne odgłosy stukania i zgrzytania. Było to spowodowane zapewne niedokładnością wykonania Gienia przez kolegów z grupy poprzedniej. My postanowiliśmy oszczędzić Gieniowi cierpienia i lekko zmodyfikowaliśmy jego konstrukcję tak alby działał jak należy. ---- === Wnioski: === * Zestaw Lego Mindstorms daje bardzo duże możliwości budowy różnorakich robotów jak i ich programowanie. Każda grupa miała innego robota zbudowanego z tego samego zestawu. * Oprogramowanie mindstorms NXT daje duże możliwości programowania dość skomplikowanych algorytmów w bardzo prosty sposób. * Mimo niedoskonałości czujniki zarówno dotykowy jak i koloru są wystarczająco niezawodne. Spełniają swoje zadanie w 100% bez większych problemów. ---- === Propozycje rozszerzenia wiki: === * Proponujemy wzbogacić wiki o instrukcję budowy ciekawych robotów wymyślonych przez studentów. Zamieszczanie algorytmów, które nie są standardowymi propozycjami producenta.