Popularny post wn2001 Napisano Marzec 25, 2021 Popularny post Udostępnij Napisano Marzec 25, 2021 Robot "Kopernik" to projekt robota-asystenta targowego 😉 Robot powstawał dla i we współpracy z moim Technikum Łączności, z Zespołu Szkół Łączności im. M. Kopernika w Poznaniu. Podstawowym celem było (z mojej strony) stworzenie platformy sprzętowej opartej o RaspberryPi, która umożliwi prostą "rozmowę" - w przyszłości, kiedy drzwi otwarte/targi edukacyjne będą mogły odbywać się już normalnie, platforma ma stanowić urozmaicenie tego typu imprez i stanowić stoiskowe "eye-catcher" 🙂 Worklog Pozwolę sobie nie opisywać początkowych założeń, ścieżki rozwoju itd.. - kwestie te aktualizowałem "na bieżąco" w worklog'u (link poniżej), a tutaj przedstawię jedynie efekt końcowy 🙂 Konstrukcja mechaniczna Zagadnienie chyba najlepiej wytłumaczą zdjęcia (na części z nich robot nie ma osłon - chodzi oczywiście o pokazanie podzespołów wewnątrz konstrukcji); nie ma też w sumie wielkiej filozofii - stelaż v-slot, profile 20x20 (jednym z założeń robota miała być możliwość łatwej rozbudowy i zmian), w odpowiednich miejscach wstawione poprzeczki celem montażu wszystkich elementów. W podstawie znajdują się koła meblowe, całość (z wyjątkiem strony dolnej i tyłu) jest zabudowana plexiglassem i polipropylenem, wcześniej odpowiednio dociętym/nawierconym. Oprócz konstrukcji nośnej, stelaż pełni też funkcję "szafy", do której schować mogłem wszystkie moduły i podzespoły (o których za chwilę). Jest też pneumatyka - robot miał mieć możliwość wykonywania jakiś prostych ruchów, dlatego są dwie "dłonie" zawieszone wahliwie na łożysku poruszane siłownikami pneumatycznymi (takie odniesienie do zawodu "technik automatyk" - miałem zadbać też o to, aby robot nawiązywał do oferty edukacyjnej Szkoły 😉). Jeśli chodzi o wysokość całkowitą, jest to około 800mm: Głowa Jeśli chodzi o głowę, jest ona zamocowana na silniku krokowym z drukowaną 3D przekładnią planetarną. "Twarz" stanowi dysk polipropylenu, znajdują się na niej dwa microserwa jako "brwi" - SG-90; "oczy" - pierścienie WS2812B z dwoma kamerami RaspberryPi Camera; "nos" - czujnik Sharpa i "usta" - głośnik (aktualnie niepodłączony, jego funkcję pełnią dwa głośniki umieszczone przy podstawie). Całość (chodzi o głowę) ma średnicę 200mm, a jest zwieńczona aluminiową półkulą. Ponownie moduł głowy najlepiej zilustrują zdjęcia 😉 Elektronika i oprogramowanie W kwestii elektroniki, "sercem" czy też modułem nadrzędnym jest RaspberryPi 3B+ - to na nim uruchomiony jest główny program, który "czeka" na moment, kiedy ktoś przyłoży rękę pod czujnik Sharp'a - wówczas pobrana zostaje próbka dźwiękowa, która zostaje przekazana do modułu Python SpeechRecognition - wykorzystuję default'owe API od Google (to darmowe, które nie wymaga rejestracji - https://pypi.org/project/SpeechRecognition/ oraz https://realpython.com/python-speech-recognition/ ). Na ten moment dostępnych jest dwanaście fraz, każda licząca dwa słowa - typu "oferta edukacyjna", "termin rekrutacji" czy "aktualna godzina" - kiedy otrzymam w zwrocie to, co rozpoznał moduł SpeechRecognizer, obliczam https://pl.wikipedia.org/wiki/Odległość_Levenshteina - dzięki temu mogę stwierdzić, która fraza jest najbardziej zbliżona do wyniku detekcji mowy. Oczywiście jest to rozwiązanie silnie nieoptymalne, ale całkiem skuteczne - nie ukrywam bowiem, że moja implementacja rozpoznawania mowy jest daleka od idealnej 😉 Jeśli fraza wymaga odpowiedzi, wywołuję polecenie espeak, który syntetyzuje odpowiedź. Jest też opcja przewidziana dla frazy "aktualna godzina" - wówczas osobny podprogram pobiera czas systemowy i syntetyzuje odpowiedź (na filmie poniżej było już po północy 😉) oraz "widoczny kolor" - aby zademonstrować jakoś możliwość wykorzystania kamery, osobny podprogram może zrobić zdjęcie, obliczyć wartości kanałów R,G,B i stwierdzić, czy pokazany przez mnie przedmiot (na przykład kartka papieru) jest czerwona, zielona czy niebieska. Jeśli zaś chodzi o warstwę sprzętową - w robocie znajdują się w sumie cztery płytki Arduino, które: a) pierwsze Arduino Nano - sterowanie matrycą LED 8x32, jest to zapętlone wyświetlanie napisów typu "Cześć, jestem <<Kopernik>>, opowiem Ci o ZSŁ..." czy animacji pulsu serca oraz losowego szumu - wykorzystałem przykład z dedykowanej temu modułowi biblioteki; b) drugie Arduino Nano - sterowanie diodami LED WS2812B - jest to płytka uniwersalna z dwoma rzędami złącz ARK - pozwala na sterowanie trzech zestawów takich LED'ów (2x pierścienie - oczy i pasek "w korpusie"), ma też optoizolowane wejścia - trzy, Raspberry podając kombinację trzech bitów może sterować efektami świetlnymi na osiem różnych sposobów; c) trzecie Arduino Nano - sterowanie drukarką termiczną (o tym za chwilę); d) Arduino Uno z shieldem "Sensor Shield" - komunikuje się z RPi po USB, przez UART - to Arduino obsługuje Sharp'a jako urządzenie wejściowe, jeśli chodzi o urządzenia wyjściowe - steruje przekaźnikami (elektrozawór dłoni i elektromagnesy), szyją - silnikiem krokowym, brzęczykiem czy serwami 😉 Uprzedzając pytania - oczywiście można było zmniejszyć liczbę Arduino i wykorzystać je optymalniej, ale prosze pamiętać, że konstrukcja miała pozostać rozwojowa - stąd budowa modułowa i "rozbicie" funkcjonalności na kilka płytek Arduino (inną kwestią jest popularność Arduino w środowisku szkolnym (znacznie większa niż STM32) oraz fakt, że jednoczesne sterowanie WS2812B i serwami z jednego Arduino wymaga pewnych sztuczek 😉). Jeśli chodzi o zasilacze, w sumie jest ich cztery - trzy 12Vdc i jeden 5V dla RPi? Dlaczego tak dużo? Znów możliwość rozwoju - ponadto wolałem oddzielić od siebie zasilanie drukarki termicznej, logiki i elementów wykonawczych (miałem pewne problemy z zakłóceniami elektromagnetycznymi). Oczywiście właściwe napięcia uzyskuję później za pomocą przetwornic step-down. Drukarka termiczna Chciałbym jeszcze zwrócić uwagę na moduł drukarki termicznej - na odpowiednią komendę RPi wyzwala za pomocą impulsu Arduino Nano sterujące drukarką termiczną i rozpoczyna się proces drukowania ulotki zawierającej informacje o szkole, zawodach, kod QR z adresem WWW naszej szkoły - takie "zaproszenie" do zabrania 😉 Jest zamocowana "w korpusie", ale tutaj również najlepiej załączę kilka zdjęć: Szczegóły Myślę, że omówiłem wszystkie najważniejsze aspekty projektu - pozwolę sobie na dołączenie jeszcze kilku zdjęć 😉 Zapraszam za zadawania pytań i/lub konstruktywnej krytyki 😉 Film Podziękowania Szczególnie podziękować muszę: a) firmie Nettigo, która pomogła mi nabyć w preferencyjnej cenie drukarkę termiczną z akcesoriami - dziękuję 😉 b) Igus Polska za udostępnienie jako sample przegubów widełkowych do siłowników pneumatycznych; c) mojej Szkole, Zespołowi Szkół Łączności im. M. Kopernika w Poznaniu, za wsparcie merytoryczno-finansowe; d) Kolegom z Forum, szczególnie Koledze @ethanak za wskazówki w sprawie syntezy mowy; e) Kolegom z Szkoły, którzy doradzali mi w kwestii design'u; a szczególnie @k_ijada za pomoc w opracowaniu dokumentacji - ponieważ to projekt szkolny, potrzebne były schematy, opisy itd... dla osób, które w przyszłości "zaopiekują się" projektem 🙂 Co dalej? Robot jest już w Szkole, teraz trafił "pod skrzydła" Kolegi-informatyka, który zajmie się "lepszym" rozpoznawaniem mowy - w planach jest rozszerzenie bazy pytań i możliwość "domyślenia się", o co chodzi autorowi pytania. Następnie ma być rozwijany przez innych chętnych uczniów, a możliwości jest bardzo dużo - od zmiany dłoni na proste manipulatory z większą liczbą stopni swobody z "ciekawszymi" chwytakami, przez dodanie OpenCV i skorzystanie z kamer obecnych "w głowie", po dodanie monitora/ekranu wyświetlającego tekstowo to, co mówi robot. Z swojej części projektu jestem zadowolony, myślę, że nie wyszła ona najgorzej - jest to już coś, co można gdzieś ewentualnie zaprezentować, a jednocześnie zostawiłem "otwartą furtkę" do dalszego rozwoju/poprawek 🙂 Pozdrawiam Wiktor Nowacki 11 Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Marzec 25, 2021 Udostępnij Marzec 25, 2021 @wn2001 gratuluję (kolejnego) ciekawego projektu! Wpis został właśnie zaakceptowany i jest już widoczny publicznie 🚀 1 Link do komentarza Share on other sites More sharing options...
wn2001 Marzec 26, 2021 Autor tematu Udostępnij Marzec 26, 2021 @Treker Dziękuję zarówno za pozytywną opinię, jak i za natychmiastową akceptację tematu 😉 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »