Popularny post Tymbark Napisano Lipiec 9, 2016 Popularny post Udostępnij Napisano Lipiec 9, 2016 Cześć 😉 Chciałbym podzielić się moim projektem, który już jakiś czas temu ukończyłem. Głównym założeniem było stworzenie robota, którego będzie można sterować ręcznie (myszką) lub sam będzie znajdował przedmiot do podniesienia za pomocą kamerki. Do obróbki obrazu wykorzystałem Matlaba oraz komunikację szeregową. Poniżej zamieszczam filmik prezentujący ogólną zasadę działania robota oraz demonstrujący jego możliwości, dostępne są napisy po polsku i angielsku: Zanim przejdziemy dalej - jeżeli uważasz, że ten robot to ciekawy projekt, proszę zostaw łapkę w górę pod filmikiem, biorę udział w konkursie orgznizowanym przez Matlaba, w którym 40% puli punktów pochodzi z wyświetleń i łapek w górę pod filmikiem konkursowym. Tryb ręczny Do obsłużenia myszki komputerowej wykorzystałem tę bibliotekę oraz ten schemat podłączenia. Całość jest całkiem prosta, jedynym kłopotem jest dostanie się do przewodów w kablu myszki, są strasznie cienkie i łatwo je uszkodzić. Tryb automatyczny Niestety - ten manipulator potrafi znaleźć przedmiot tylko jeżeli ten leży w jednym z trzech wcześniej zdefiniowanych miejsc. Może kiedyś przyjdzie czas na rozszerzoną wersję 😉 Jak już wspomniałem - do zadania obróbki obrazu z kamerki wykorzystałem Matlaba. Pierwszym komentarzem jest zazwyczaj zwrócenie uwagi na prostsze alternatywy, np. OpenCV, ale z Matlabem mam już jako takie doświadczenie, dobrze mi się w nim pracuje i chciałem nauczyć się czegoś nowego. Aby połączyć kamerkę internetową z Matlabem, musimy ściągnać specjalne rozszerzenie, w górnym pasku ikon klikamy Add-Ons, wybieramy Get Hardware Support Packages, wybieramy Install from Internet i szukamy USB Webcams. Na filmiku krok po kroku omówiłem co dzieje się w algorytmie obróbki obrazu, teraz chciałbym wspomnieć o kilku najważniejszych funkcjach, które wykorzystałem: snapshot - robi zdjęcie aktualnego kadru z kamerki rgb2gray - konwertuje obraz na odcienie szarości bwareaopen - usuwa zakłócenia z obrazu binarnego regionprops - mierzy naszą ostateczną białą plamę (taśmę), umożliwia wyznaczenie jej środka, który bezpośrednio przekłada się na położenie taśmy przed robotem. Pozostało przyporządkować wyznaczone położenie do jednego z trzech wcześniej zdefiniowanych i wysłać numer lokacji do Arduino za pomocą funkcji fprintf. MATLAB Support Package for Arduino Hardware Matlab posiada również specjalną paczkę umożliwiającą programowanie Arduino z poziomu Matlaba lub Simulinka. To całkiem ciekawa możliwość, mamy wtedy dostęp do podstawowych funkcji Arduino takich, jak digitalWrite czy analogRead oraz całego arsenału funkcji Matlaba. Niestety to rozwiązanie uniemożliwia w prosty sposób korzystanie z zewnętrznych bibliotek Arduino - dlatego zdecydowałem się na zwykłą komunikację szeregową. Niemniej jednak, ta nakładka jest bardzo ciekawa i chciałbym wspomnieć o jej przykładowym wykorzystaniu. Jakiś czas temu pracowałem nad regulatorem PID na wzmacniaczach operacyjnych. W domowych warunkach nie miałem pomysłu na obserwowanie odpowiedzi skokowej mojego układu. Z pomocą przyszło Arduino i Matlab wraz z omawianą paczką. Wystarczyło podłączyć interesujący mnie sygnał do wejścia analogowego Arduino oraz napisać kilka linijek kodu: a=arduino; i = 1; tic while (toc<10) b(i) = a.readVoltage(0); plot(b); drawnow; i=i+1; end Odpowiedź skokowa regulatora PID: Odpowiedź skokowa układu z wyraźnym przeregulowaniem: Zoptymalizowana odpowiedź skokowa układu: Oś poziomą można oczywiście zamienić na czas, a nie próbki, ale to nie było konieczne do stworzenia prostego narzędzia debugującego mój układ 🙂 Jeżeli masz jakiekolwiek pytania lub chciałbyś, abym coś lepiej wyjaśnił - zapytaj. Chętnie podzielę się zdobytym doświadczeniem. I pamiętaj o łapce w górę pod filmikiem! 😉 3 Cytuj Link do komentarza Share on other sites More sharing options...
Fajeczny Lipiec 16, 2016 Udostępnij Lipiec 16, 2016 Bardzo ciekawa koncepcja, gratuluję 🙂 Pytanie tylko, czy ten gwałtowny ruch w trybie automatycznym był zamierzony? Myślę, że spowolnienie go bardzo polepszyłoby wizerunek projektu 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Lukaszm Lipiec 16, 2016 Udostępnij Lipiec 16, 2016 Fajny projekt. Ale co do gwałtownych ruchów zgadzam się z Fajecznym, dodanie opcji kontroli prędkości ruchu byłoby super. Cytuj Link do komentarza Share on other sites More sharing options...
Tymbark Lipiec 16, 2016 Autor tematu Udostępnij Lipiec 16, 2016 Dzięki za feedback 😉 Faktycznie, sporo osób zwraca uwagę na to, jak robot rzuca się na taśmę, ale tym, na czym się skupiłem w tym projekcie była część Matlabowa, a ruch w trybie automatycznym to po prostu odtworzenie wbitej na sztywno trajektorii. Ale gdyby naszło mnie na powrót do tego robocika to wiem na czym się skupić 😉 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Fajeczny Lipiec 16, 2016 Udostępnij Lipiec 16, 2016 Tak jak myślałem 🙂 Możesz pokombinować z trajektoriami ruchu ramienia, np. może być trójpunktowa: robot dojeżdża nad obiekt, a później powoli do niego schodzi, ale to tylko jeden z wielu przykładów Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!