Laboratorium Inteligentnych Maszyn i Systemów Wydział Elektryczny Politechniki Warszawskiej

Podobne dokumenty
PRACA DYPLOMOWA MAGISTERSKA

Wyświetlanie informacji o stanie połączeń

Stworzenie prototypu robota, pomagającego ludziom w codziennym życiu

Zasady przygotowania rowerowego toru przeszkód

Laboratorium Inteligentnych Maszyn i Systemów Wydział Elektryczny Politechniki Warszawskiej

Zasady przygotowania konkurencji Turystyczny rower przeprowadzanej w ramach OMTTK PTTK

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego PROGRAM SZKOLENIA

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Wprowadzenie do mobilnych robotów

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

dr inż. Tomasz Krzeszowski

Bogusław Rymut

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Zastosowania Robotów Mobilnych

Układ kierowniczy. Potrzebę stosowania układu kierowniczego ze zwrotnicami przedstawia poniższy rysunek:

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych

Laboratorium Podstaw Robotyki I Ćwiczenie Khepera dwukołowy robot mobilny

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Część 4 życie programu

13. WYZNACZANIE CHARAKTERYSTYK ORAZ PRZEŁOŻENIA UKŁADU KIEROWNICZEGO

Pobieranie argumentów wiersza polecenia

Wymagania dla lądowisk szpitalnych oddziałów ratunkowych

INSTRUKCJE REPETYCYJNE PĘTLE

lider projektu: finansowanie:

Tabela nr 4 kryteria wykonania zadań egzaminacyjnych na placu manewrowym

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

PROCEDURA UZYSKANIA KARTY ROWEROWEJ w Publicznej Szkole Podstawowej w Wirze

Wskaźniki. Informatyka

WYMAGANIA DLA LĄDOWISK SZPITALNYCH ODDZIAŁÓW RATUNKOWYCH

SYSTEMY CZASU RZECZYWISTEGO STEROWNIK WIND. Dokumentacja projektu. Danilo Lakovic. Joanna Duda. Piotr Leżoń. Mateusz Pytel

KONKURENCJA TEORETYCZNA TESTY

ZASTOSOWANIE ROBOTÓW MOBILNYCH W SYMULACYJNYM BADANIU CZASU EWAKUACJI

1. INSTRUKCJA OBSŁUGI WYŚWIETLACZA LCD C600E USB

Instrukcje sterujące. Programowanie Proceduralne 1

Rekurencja. Przygotowała: Agnieszka Reiter

Wstęp do Programowania, laboratorium 02

Algorytmy z powrotami. Algorytm minimax

WYDZIAŁ ELEKTROTECHNIKI I AUTOMATYKI KATEDRA AUTOMATYKI. Robot do pokrycia powierzchni terenu

Katedra Metrologii i Systemów Diagnostycznych Laboratorium Metrologii II. 2013/14. Grupa: Nr. Ćwicz.

Zakład Teorii Maszyn i Układów Mechatronicznych. LABORATORIUM Podstaw Mechatroniki. Sensory odległości

Laboratorium 5: Tablice. Wyszukiwanie binarne

Laboratorium Komputerowe Systemy Pomiarowe

1. INSTRUKCJA OBSŁUGI WYŚWIETLACZA LCD C600E USB

Pętla for. Wynik działania programu:

Instrukcja do ćwiczeń

INSTRUKCJE REPETYCYJNE PĘTLE

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

aktywując tryb ECO. Ponowne naciśnięcie sprzęgła uruchomi silnik w sposób automatyczny

WARIATOR WYPRZEDZENIA ZAPŁONU WARIATOR USTAWIENIA

ITINERER informacje CZYM JEST ITINERER?

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wyświetlacz BAFANG C961 oferuje szeroki zakres funkcji zapewniających komfort użytkowania

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Lokalizacja robota Lego Mindstorms NXT przy użyciu odometrii

Język C zajęcia nr 5

Weryfikacja własności ruchowych układów nieholonomicznych na przykładzie robota mobilnego Pioneer 3-DX 1

1. Informacje ogólne. 2. Dane techniczne/ montaż. 2.1 Urządzenie spełnia normy europejskie EN oraz EN (dyrektywa niskonapięciowa).

WISPER 706 Alpino WISPER 806 Alpino

System sterowania robota mobilnego z modułem rozpoznawania mowy

1. O INSTRUKCJI OBSŁUGI. 2. WYGLĄD I ROZMIAR Materiał oraz kolor

Ćwiczenie 1 Galeria zdjęć

Projektowanie systemów zrobotyzowanych

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

WYZNACZANIE DŁUGOŚCI FALI ŚWIETLNEJ ZA POMOCĄ SIATKI DYFRAKCYJNEJ

Argumenty wywołania programu, operacje na plikach

lider projektu: finansowanie:

Podstawy Programowania Podstawowa składnia języka C++

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

INSTRUKCJA MONTAŻU i OBSŁUGI. ASYMETRYCZNY CZUJNIK PARKOWANIA RS-4B-OC ( wersja: tył, cztery sensory, buzzer, wejście/wyjście AV)

Testy opracowują Komitety Organizacyjne danego etapu Turnieju.

Instrukcja instalacji. Czujnik CO₂ Polski

POKL /10

Start maszyny Włączenie zasilania lub zwolnienie guzika Bezpieczeństwa ZEROWANIE. [Prędkości maksymalne]

I - Microsoft Visual Studio C++

Podstawy Programowania C++

INSTRUKCJA SYGNALIZACJA WAHADŁOWA. Rys. 1. Sygnalizacja wahadłowa. Sygnalizacja wahadłowa I /6

Reflektory: sprawdzanie ustawienia, ewentualna regulacja

do instrukcja while (wyrażenie);

Rysunek 1. Bieg po kopercie. Pomiar Wykonuje się dwie próby - liczy się czas lepszy. Czas mierzy się z dokładności do 0,1 sekundy.

Rysowanie punktów na powierzchni graficznej

Podstawy programowania w języku C i C++

1 Podstawy c++ w pigułce.

Komputer rowerowy z GPS GB-580P Szybki start

Precyzyjny siew z użyciem nawigacji

Wyznaczanie prędkości dźwięku w powietrzu

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Kinematyka robotów mobilnych

Statyczna próba rozciągania - Adam Zaborski

SPIS TREŚCI WPROWADZENIE... 9

Wyposażenie Samolotu

Mechanika Robotów. Wojciech Lisowski. 5 Planowanie trajektorii ruchu efektora w przestrzeni roboczej

Procedura uzyskania karty rowerowej przez uczniów Zespołu Szkolno-Przedszkolnego w Kamieniu Krajeńskim

Wyznaczanie trójkątów widoczności na skrzyżowaniu dwóch dróg

Badanie ruchu złożenia

Programowanie Proceduralne

Transkrypt:

Damian Nowak Łukasz Dadlez (zespół nr 6) 25.11.2011r. Laboratorium Inteligentnych Maszyn i Systemów Wydział Elektryczny Politechniki Warszawskiej Sterowanie zaawansowanym autonomicznym robotem mobilnym (Pioneer) Sprawozdanie

Przebieg c wiczenia Częśd pierwsza Podstawowym zadaniem w pierwszej części dwiczenia było zapoznanie się z obsługą i właściwościami jezdnymi robota, jego zdolnością do wykrywania przeszkód oraz dokładnością nawigacji odometrycznej. Robota wyposażono w 16 sonarów zamontowanych dookoła niego, z czego do testów zaprogramowano obsługę tylko przedniej części. Testowano reakcję robota na odczyty z sonarów dla różnych przeszkód ścian, narożników, plecaków, nóg od krzeseł, prostych i pochyłych nóg od stołu, własnych kooczyn itp. Dla odległości większej od 20cm, która jest minimalnym zasięgiem czujników, reagował on prawidłowo na każdą przeszkodę, problem sprawiały mu tylko przeszkody pochyłe w postaci przekrzywionych plecaków, niektórych nóg od stołu oraz poprzeczki stołów i krzeseł umieszczone na wysokości mniejszej niż sonary. Reakcja na dodatkowe czujniki w postaci przełączników w zderzakach była nieprawidłowa pomimo najechania zderzakiem na przeszkodę, robot cały czas na nią napierał, czasami robił to skokowo. W celu zbadania dokładności nawigacji odometrycznej, wykorzystano zmodyfikowany tzw. test kwadratu wykonany dla kierunku jazdy zgodnego oraz przeciwnego do kierunku ruchu wskazówek zegara. Ustawiono robota w miejscu oznaczonym na ziemi, wyzerowano w programie położenie robota (X 0 = 0, Y 0 = 0, Θ 0 = 0) i przejechano nim dookoła sali, wracając do punktu wyjścia.

Jazda po linii prostej, zgodnie z ruchem wskazówek zegara Jazda slalomem, zgodnie z ruchem wskazówek zegara

Jazda po linii prostej, w kierunku przeciwnym do ruchu wskazówek zegara Jazda slalomem, w kierunku przeciwnym do ruchu wskazówek zegara

Zanotowano następujące wartości: Kierunek ruchu (widok z góry) Zgodnie z ruchem wskazówek zegara Przeciwnie do ruchu wskazówek zegara Rodzaj jazdy Po linii prostej Slalomem Po linii prostej Slalomem Wartości sczytane po powrocie robota do punktu początkowego X K = 567 Y K = 220 Θ K = -10,5 X K = 1809 Y K = 650 Θ K = -29,4 X K = 68 Y K = 81 Θ K = 4 X K = 1 Y K = 103 Θ K = 2,5

Częśd druga Zadaniem drugiej części dwiczenia było testowanie nawigacji robota z wykorzystaniem odczytu sygnałów z sonarów i mapy otoczenia przy pomocy programu Mobile Eyes. Prób samolokalizacji robota na mapie dokonano w czterech etapach: 1) w programie zaznaczono położenie i orientację początkową możliwie mocno zbliżone do rzeczywistych robot po kilku ruchach aktualizował swoją pozycję zmniejszając obszar chmury do jednego, dwóch lub trzech punktów położonych blisko siebie, ruch po sali był dobrze przekazywany na obraz mapy; Prawidłowo odczytana lokalizacja robota w zaledwie kilku szybkich ruchach

2) w programie zaznaczono położenie robota możliwie mocno zbliżone do rzeczywistego, natomiast podano orientację zmienioną o 90 o i 180 o względem rzeczywistej o ile przy kącie 90 o robot po pewnym czasie był w stanie się zlokalizowad, to 180 o już nie zawsze; Błędnie odczytane położenie przy orientacji o 180 o zmienionej względem rzeczywistej

3) w programie zaznaczono orientację zgodną z rzeczywistą, ale zmieniono położenie dla punktów położonych w obszarze chmury, robot bez większych problemów znajdował swoje rzeczywiste położenie, natomiast dla punktów rozmieszczonych na obszarze całej sali raz mu się to udawało, a raz nie; Widoczna początkowa chmura, na obszarze której robot najszybciej się lokalizował 4) przy wprowadzaniu błędnego położenia i orientacji, zachowanie robota było zróżnicowane zwykle im podawane wartości bardziej odpowiadały rzeczywistemu położeniu i orientacji, tym robot rzadziej się mylił i lokalizował w mniejszej ilości ruchów. Dodatkowo, robot częściej lokalizował się na mapie, gdy znajdował się w korytarzu z lewej strony sali (patrząc od strony wejścia) niż będąc po stronie lewej. Problemy sprawiało mu też położenie rzeczywiste w pobliżu studentów i orientacja przodem do wnętrza narożników sali.

Ostatnia próba dotyczyła obserwacji robota po prawidłowym zlokalizowaniu, poruszającego się na zasadzie wyznaczania punktów docelowych na mapie. Testowano zachowanie robota w przypadku pojawienia się przeszkód nie oznaczonych na mapie (wysuniętych krzeseł, nóg, plecaków itp.). Przy zachowaniu minimalnego prześwitu ok. 5 10cm z każdej strony robota (łączna szerokośd korytarza ok. 50cm), był on w stanie ominąd każdą przeszkodę. Jazda przez slalom ustawionych prostopadle do stołów krzeseł czasami sprawiała trudności, robot radził sobie przy większych prześwitach między krzesłami:

Natomiast po ustawieniu krzeseł pod kątem 45 o, robot był już w stanie przejechad przez slalom niemal bezbłędnie:

Częśd trzecia Trzecim zadaniem dwiczenia było zmodyfikowanie kodu programu odpowiadającego zachowaniu robota. Efektem koocowym miał byd program umożliwiający jazdę z omijaniem przeszkód na drodze. Zrealizowany program spełnił założenia, testy pokazały, że działa prawidłowo. Wnioski Test kwadratu pokazał, że błędy w dokładności nawigacji odometrycznej są bardzo duże, zwłaszcza dla ruchu w kierunku zgodnym do ruchu wskazówek zegara. Dodatkowo, błędy były zdecydowanie większe podczas jazdy slalomem, niż podczas jazdy po linii prostej. Przyczyny takich różnic w błędach dla różnych kierunków jazdy, pokazują poniższe rysunki: a) ruch zgodny, b) ruch przeciwny do wskazówek zegara (w naszym przypadku błąd zwiększał się dla ruchu w kierunku zgodnym do ruchu wskazówek zegara, ale geneza błędu jest ta sama) Źródło: UMBmark: A Benchmark Test for Measuring Odometry Errors in Mobile Robots By Johann Borenstein and Liqiang Feng, The University of Michigan

Łatwo sobie wyobrazid, jak dodatkowo wpływał na taki test ruch slalomem zamiast po linii prostej każda zmiana kierunku generowała dodatkowy błąd. Należy również dodad, że testowana przez nas trasa nie miała kształtu kwadratu, a skręty nie zawsze odbywały się o 90 o, ze względu na różne przeszkody. Inne możliwe przyczyny tak dużych błędów, to: różnica między średnicami obu kół, dokładnośd pomiaru rozstawu kół, brak zbieżności kół, skooczona rozdzielczośd enkoderów, nierówna nawierzchnia, drobne przeszkody ( uskoki, pojedyncze drobiny piasku) na drodze, poślizg kół przy ruszaniu, obracaniu się, zatrzymywaniu, tarcie szerokich opon. Problemy samolokalizacji robota w drugiej części dwiczenia, były przede wszystkim spowodowane wpływem pojawienia się przeszkód nie ujętych na mapie (studenci, poprzesuwane krzesła), niejednoznaczności otrzymywanych danych (np. zbliżone odczyty z sonarów dla dwóch lub więcej miejsc w sali), niedokładności mapy otoczenia oraz krótkiego czasu trwania dwiczenia gdyby robot miał możliwośd sprawdzenia każdej możliwej pozycji, prawdopodobnie udałoby mu się prawidłowo zlokalizowad. Wpływ ustawienia krzeseł przy przejeździe przez tunel miał znaczenie ze względu na umiejętnośd wykrycia prześwitu między nogami krzesła przez robota. Gdy robot widział na zakrętach tylko jedną nogę (krzesła ustawione pod kątem), reagował prawidłowo. Dodatki Listing programu z części trzeciej: #include "Aria.h" #include "screen.h" ArRobot *robot; int nrsumy; int maks; void sonarprinter(void) { clrscr(); int i; int tablica[8]; int sumy[7]; gotoxy(0,0); for (i = 0; i < 8; i++){ if (robot->getsonarrange(i) <5000) { tablica[i] = robot->getsonarrange(i); else { tablica[i] = 0;

for (i=0; i<7; i++){ sumy[i]= tablica[i] + tablica[i+1]; for (i = 0; i<8;i++){ printf(" %4d", tablica[i]); printf("\n"); for (i = 0; i<7;i++){ printf(" %d", sumy[i]); printf("\n"); maks = 0; for (i = 0; i<7;i++){ if (sumy[i] >= maks){ maks = sumy[i]; nrsumy = i; printf(" %d\n",maks); printf(" %d\n",nrsumy); printf("\n\n\n\n\n\n\n"); fflush(stdout); int main(int argc, char **argv) { Aria::init(); ArArgumentParser parser(&argc, argv); ArSimpleConnector simpleconnector(&parser); robot = new ArRobot; ArKeyHandler keyhandler; Aria::setKeyHandler(&keyHandler); robot->attachkeyhandler(&keyhandler); // obsluga klawisza ESC ArGlobalFunctor sonarprintercb(&sonarprinter); // polaczenie z robotem /connection to the robot if (!simpleconnector.connectrobot(robot)) { printf("could not connect to robot... exiting\n"); Aria::exit(1); robot->runasync(true); //robot->addusertask("sonar printer", 50, &sonarprintercb); while(1){ // uruchomienie silnikow /starting engines robot->enablemotors(); //robot->move(300); //rusz 300 mm do przodu / move 300 mm forwards ////printf("ruszam"); //printf("moving"); //while (!robot->ismovedone() ); //robot->setdeltaheading(90); //obroc o 90 stopni / turn 90 degrees //while(!robot->isheadingdone()); sonarprinter();

switch (nrsumy){ case (0): robot->setdeltaheading(70); //obroc o 90 stopni / turn 90 degrees while(!robot->isheadingdone()); break; case(1): robot->setdeltaheading(40); //obroc o 90 stopni / turn 90 degrees while(!robot->isheadingdone()); break; case(2): robot->setdeltaheading(20); //obroc o 90 stopni / turn 90 degrees while(!robot->isheadingdone()); break; case(3): robot->setdeltaheading(00); //obroc o 90 stopni / turn 90 degrees while(!robot->isheadingdone()); break; case(4): robot->setdeltaheading(-20); //obroc o 90 stopni / turn 90 degrees while(!robot->isheadingdone()); break; case(5): robot->setdeltaheading(-40); //obroc o 90 stopni / turn 90 degrees while(!robot->isheadingdone()); break; case(6): robot->setdeltaheading(-70); //obroc o 90 stopni / turn 90 degrees while(!robot->isheadingdone()); break; if (maks>1000) { robot->move(100); //rusz 300 mm do przodu / move 300 mm forwards //printf("ruszam"); //printf("moving"); while (!robot->ismovedone() ); robot->unlock(); // wylaczenie robota /robot shutdown Aria::exit(); return 0;