Przeszukaj forum
Pokazywanie wyników dla tagów 'Animatronika'.
Znaleziono 6 wyników
-
Animatronika Kolejny krasnolud do kolekcji
ethanak opublikował temat w Projekty - DIY w budowie (worklogi)
Mocne postanowienie: na podstawie doświadczeń z lalkami zrobić coś, co pozbawione jest błędów poprzednich konstrukcji 🙂 Robot początkowo miał być czarownicą, ale okazało się, że dzieci w przedszkolu negatywnie reagują na postacie tego typu (młodsze się wręcz boją czarownicy czy czarodzieja), dlatego ma być to kolejny Krasnolud. Tym razem nie Tolkienowski mieszkaniec podziemi, a sympatyczny Krasnal mieszkający w lesie, z ładną czerwona czapeczką i miłym dla oka szlafroczkiem. Ponieważ sprawę podwozia mam na razie nie do końca rozwiązaną, postanowiłem, że będzie to stary Krasnolud, jeżdżący w fotelu na kółkach. Takie rozwiązanie zwalnia mnie z konieczności ukrywania kół napędowych, a jednocześnie pozwala na użycie większych i tańszych silników (NEMA 17, kupione po 7 PLN na Allegro). Ponownie chcę użyć akumulatora Parkside (bardzo dobrze sprawdził się w poprzednim Krasnoludzie), tym razem nie kombinuję z EasyDriverami tylko wstawiłem stare dobre A4988. Zostawiam sobie jednak możliwość zastosowania TMC 2209 (o ile eksperyment pokaże, że detekcja zatrzymania silnika będzie działała poprawnie). Na razie mam złożone podwozie: Silniki które kupiłem miały założone zębatki na wałach, dlatego taka a nie inna konstrukcja kół napędowych. Teoretycznie mają półtora ampera na cewkę, na sterownikach ustawiłem na razie 0.7A a i tak są za mocne. Ale dokładniej będę mógł ustawić dopiero na zakończenie. I tu ciekawostka: koła wyposażone w łożyska 6mm miały być osadzone na wspólnej osi. Niestety, okazało się że gwintowany (podobno M6) pręt który mam ma jakieś 5.4mm średnicy i nie bardzo chciał współpracować z łożyskami. Użyłem pojedynczych śrub wymontowanych ze starej kanapy (jak dobrze sobie zostawić takie drobiazgi). A co z resztą? Głowę mam w połowie gotową. Dzisiaj powinny przyjść serwa HD1440A (zależy mi zarówno na wymiarach, jak i najmniejszym możliwym poborze prądu). W sumie jest tu pięć serw: po jednym HD1370A umieszczonych wewnątrz gałki ocznej, jedno do pionowego wspólnego ruchu oczu, jedno do skłonu głowy (uczciwe cięgło a nie jakieś wydumane zębatki) i jedno do obrotu (tym razem przekładnia zębata 1:2, sprawdziła się bardzo dobrze w poprzednich konstrukcjach). Jak tylko uda mi się zamontować serwa wrzucę jakąś ładną fotkę. Ręce - a właściwie ręka, bo tylko prawa ma być w pełni animowana. Zrobiłem bardzo ambitne założenie sześciu stopni swobody, zobaczymy co z tego wyjdzie. Serwa do napędu ręki mam. Kombinuję jeszcze z jakimś wyhamowaniem oscylacji na głównym serwie barkowym, być może uda mi się to osiągnąć programowo tylko musiałbym dodać jakieś sprzężenie zwrotne... no cóż, zobaczymy co z tego wyjdzie. Jeśli nic, zawsze mogę skorzystać ze sprawdzonego rozwiązania (ograniczenie prędkości ruchu serwa). No i oczywiście "drobiazgi": żyroskop/akcelerometr, kamera (do patrzenia na twarz rozmówcy), czujnik odległości (tym razem nie tylko do wykrywania przeszkód ale również do ustalania zbieżności oczu), syntezator mowy i takie tam różności. Zdalne sterowanie na razie poprzez UDP (ESP32 pracujący w trybie AP_STA, czyli z możliwością zarówno podłączenia do domowej sieci WiFi jak i do pracującego w trybie STA sterownika). Pozwala mi to na odłożenie zaprojektowania sterownika na sam koniec i sterowanie na razie prostą aplikacją na pececie. No cóż - sam jestem ciekaw co mi z tego wyjdzie 🙂 -
Ech, miało być dużo wcześniej... Niestety okazało się, że co prawda pandemia zmusiła mnie (a właściwie nas, bo moją kochaną też) do siedzenia w domu, ale dodała mi (nam) tyle roboty, że nie bardzo miałem czas na ukończenie projektu. W każdym razie mam zaszczyt wreszcie przedstawić dyplomowaną wiedźmę, pannę (z gatunku tych starszych) Wolhę Nikołajewnę Androinę (dla znajomych Wonia, dla dalszych znajomych mlle Wonia). I od razu wyjaśnienie: tak, mimo wyglądu jest to skończony projekt. Podobnie jak Maestro Zitaurus, Wonia to konstrukcja lalki. Wszelkie włosy, ubrania to zupełnie inna historia: po pierwsze lalkę można ubrać i ucharakteryzować różnie; raz może być złą czarownicą - innym razem dobrą babcią... po drugie pracownie krawieckie są na razie niedostępne i nic nie zapowiada, aby w najbliższej przyszłości coś się zmieniło. Ale zacznę od początku. Wspomniany już Ziutek co prawda sprawdził się na scenie, ale kilka "drobiazgów" znakomicie utrudniało animację. Mechaniczny (bezpośredni) napęd głowy nie pozwolił na wygodne umieszczenie joysticka, a umieszczenie przycisku sterowania dłonią na rękojeści czempuritu bardzo skutecznie uniemożliwiło animację obu rąk jednocześnie. Konstrukcja dłoni też pozostawiała wiele do życzenia - umieszczenie serwomechanizmu w przedramieniu co prawda pozwoliło na zastosowanie typowego SG90, ale przeniesienie napędu na palce było zbyt skomplikowane. Postanowiłem więc skonstruować następną jawajkę - tym razem pozbawioną tych wad. Na pierwszy ogień poszła konstrukcja dłoni. Kiedyś kupiłem na próbę subminiaturowe serwa PowerHD 1370A - okazało się, że świetnie nadają się do tego typu konstrukcji. Są ciche, pobierają niewiele prądu, a rachityczny moment nie przeszkadza przy pracy praktycznie bez obciążenia (dłonie i oczy). Poza tym niewielkie wymiary pozwoliły na umieszczenie serwa bezpośrednio w dłoni i osadzenie palców bezpośrednio na orczyku serwa. Większy problem miałem z opracowaniem napędu głowy. Tym razem postanowiłem, że napęd będzie całkowicie elektryczny i sterowany wyłącznie joystickiem. Dodatkowo chciałem spróbować typowej dla animatroniki konstrukcji umożliwiającej przechyły głowy nie tylko w przód, ale również na boki. Niestety - narzucające się rozwiązanie z przegubami kulowymi (takimi jak stosowanie w drążkach kierowniczych pojazdów RC) było niemożliwe do zrealizowania; dostępne w handlu były po prostu za duże, a samodzielne ich wykonanie w domowych warunkach nie wchodziło w grę. Zrobiłem kilka prób, ale okazało się, że w wykonanych na drukarce przegubach luzy są zbyt duże, aby umożliwić jakikolwiek sensowny ruch - szczególnie w lalce, która wierci się i skacze na wszystkie strony. Już miałem zrezygnować z przechyłów na boki i zastosować sprawdzony sposób z przechyłem tylko w przód... ale w międzyczasie kupiłem zupełnie w innym celu komplet różnych sprężynek. Spróbowałem więc rozwiązania, gdzie sprężyna ściąga głowę do neutralnego położenia, a serwomechanizmy pracują jedynie w trybie pociągania za drążek. I to mnie uratowało - luzy są skutecznie kasowane przez sprężynę, a za napęd mogły posłużyć takie same serwa, jak w dłoniach. Obrót głowy zrealizowałem za pomocą jeszcze jednego takiego samego serwa przekładni zębatej. Jako że podstawowe sprawy z mechaniki miałem już rozwiązane, przyszła kolej na elektronikę. Tym razem lalka powinna działać w dwóch trybach: pierwszy to bezpośrednie sterowanie za pomocą joysticka i przełączników na rękojeści lalki, drugi to typowy w konstrukcjach Hensona sposób animacji przez dwie osoby: pierwsza robi to bezpośrednio w typowy dla jawajki sposób, druga (pomocnik) zdalnie steruje głową i zamykaniem dłoni. Jako głowny kontroler posłużył mi Arduino Pro Mini sterujący bezpośrednio serwami, do komunikacji ze zdalnym manipulatorem użyłem modułów nRF24L01+. Rękojeść jest tym razem pionowa, wewnątrz ukryte są Arduino, transceiver i przetwornica zasilająca elektronikę. Również w rękojeści znajduje się joystick sterujący głową, klawisze dłoni oraz przełącznik sterowania oczami. Klawisze dłoni mają różną wysokość ułatwiającą oddzielne manipulowanie dłońmi jednym palcem, przełącznik oczu został umieszczony tak, aby małym palcem można było bez problemu skierować wzrok lalki w odpowiednią stronę. Rękojeść jest dopasowana do konkretnej osoby - stąd widoczne na filmie trudności w animacji (film nagrywałem sam, a rozstaw joysticka i przycisków po prostu nie pasuje do mojej dłoni). Ponieważ musiałem zrealizować sterowanie trzema serwami za pomocą pojedynczego dwuwymiarowego joysticka, musiałem użyć pewnego tricku. Przesunięcie joysticka w dół powoduje skłon główy do przodu, przesunięcie na boki obrót, przy czym pochylenie głowy na bok realizowane jest przez jednoczesne przesunięcie joysticka w bok i w dół. Co prawda przy takim sterowaniu nie jest możliwe pochylenie głowy na bok bez obrócenia jej, ale taki taki efekt można uzyskać poprzez zaangażowanie drugiego animatora-pomocnika (zdalne sterowanie pozwala na dowolne ustawienie głowy). I tu ciekawostka. Któryś z kolei raz składając rękojeść omyłkowo przekręciłem joystick o 90°. I to był strzał w dziesiątkę: przy takim układzie można osiągnąć dużo większą precyzję w sterowaniu głową. Kontrola ruchu kciuka w linii prostopadłej do palców (a więc równoległej do osi rękojeści) jest dokładniejsza, a ta dokładność jest potrzebna przede wszystkim przy obrocie głowy. No i oczywiście musiałem popełnić jeden błąd - zasilanie. Początkowo zakładałem akumulator LiPo 2000 mAh i moduł przetwornicy MT3608. Wszystko pięknie działało dopóki nie poskładałem tego do kupy... okazało się, że zestaw akumulator-przetwornica nie wyrabia się szczególnie przy starcie urządzenia. Co prawda układ bardzo ładbnie startował przy odłączonych serwach, ich podłączenie już po starcie umożliwiało dalszą pracę ale i tak Arduino działał niestabilnie, a przy uruchomieniu wszystkich serw układ potrafił się zresetować. Wybrałem więc rozwiązanie najprostsze: zastosowałem dwie przetwornice (oddzielna na elektronikę, oddzielna na serwa) i największy akumulator LiPo z oferty Botlandu. Ustawienie drugiej przetwornicy na 6V pomogło przy okazji serwomechanizmom. Na załączonych zdjęciach widoczne są obie przetwornice - jedna w rękojeści do zasilania elektroniki, druga z tyłu lalki pod akumulatorem (do serw). Teraz przyszła kolej na sterownik dla pomocnika. W teorii urządzenie jest proste - Arduino, transceiver (tu użyłem wersji z anteną) kilka klawiszy, joystick... no i właśnie na joysticku się zaciąłem. Próbowałem różnych mocowań potencjometrów, ale urządzenie wychodziło mi jakieś wielkie i nieporęczne, poza tym operowanie czymś takim było piekielnie niewygodne. Chciałem sobie uprościć robotę, kupić zwykły joystick analogowy od peceta i na nim zamontować trzeci potencjometr - niestety, nie mogłem trafić na żadną sensowną ofertę w sieci. W końcu gdzieś na Thingiverse znalazłem szkic podobnej konstrukcji, no i po paru godzinach spędzonych nad OpenSCAD-em miałem gotowy projekt: Ostatecznie całość wygląda tak jak poniżej na zdjęciu. A, i jak zwykle jakiś błąd musiałem popełnić. Skorzystałem tu z gotowej obudowy Kradexu, wymierzyłem, znalazłem akumulator który się tam mieści i... zamawiając go w Botlandzie kliknąłem na sąsiedni link. Stąd takie dziwne umieszczenie akumulatora na zewnątrz - po prostu ten model nie zmieścił się w obudowie 🙂 I tyle miałem przed pandemią. Co więc tak opóźniło opublikowanie projektu? Otóż zarówno w lalce, jak i w sterowniku zrezygnowałem z wbudowania ładowarki. Ponieważ oba akumulatory mają identyczne złącza JST, postanowiłem zrobić uniwersalną ładowarkę z możliwością przełączania prądu ładowania. Ustrojstwo niesamowicie proste: w zwykłym module TP4056 usunąłem rezystor 1.2k i w miejsce tego podłączyłem drabinkę z kilku rezystorów oraz przełącznik obrotowy, a do wyjścia podłączyłem gniazdo JST. Niestety, przed pandemią nie zdążyłem zmontować ładowarki, a nie mogłem przecież opisać niekompletnego urządzenia! Jeśli kogoś to interesuje, zamieszczam kody lalki i sterownika: lalka.zip O ile kod lalki jest dość typowy, to w kodzie sterownika zastosowałem pewien trick którego nie widziałem na razie w żadnych konstrukcjach - diodę sygnalizującą połączenie radiowe z lalką. Może się komuś przyda... Schematów nie zamieszczam, bo w rzeczywistości oba urządzenia (sterownik i lalka) to płytka Arduino z podłączonymi do odpowiednich pinów transceiverem, przyciskami, diodami i tak dalej, a cała pinologia jest zamieszczona w źródłach. Na koniec wyjaśnienie - skąd akurat takie imię? Miłośnicy fantasy pewnie już wiedzą o kogo chodzi, ale na wszelki wypadek podaję link do książki 🙂
-
Już słyszę głosy: O, staremu ethanakowi coś się chyba pokręciło... Post jest o jakimś Kedrigernie w dziale DIY - a na zdjęciu mamy coś przypominającego robota z dumnym napisem "Ciapek"... Spieszę z wyjaśnieniami. To nie pomyłka. Post jest na temat serwera mowy Kedrigern, a Ciapek to żaden robot. Po prostu dość trudno zrobić zdjęcie programu, poza tym wypadałoby raczej pokazać ów program w działaniu - a ten wymaga jednak czegoś co będzie gadać (czyli jakiejś bardziej fikuśnej obudowy na głośnik). A ponieważ ostatnio zapatrzyłem się w rysunki Daniela Mroza... cóż, Ciapek z ludzkimi dłońmi, stopami i uszkami wyszedł tak jak wyszedł 🙂 Zacznę możę od opisu elektroniki (jako że jest to najprostsze, a użytkownik może sobie ją skomponować z zupełnie innych elementów). Sercem całego układu jest Raspberry Pi. Można zastosować dowolny model (chociaż ze starymi, krótkimi GPIO mogą być lekkie problemy), ja użyłem w swoim egzemplarzu Raspberry Pi Zero W. Oprócz tego potzebny jest jakikolwiek układ odtwarzania dźwięku. "Duże" (pełnpowymiarowe) malinki jak popularny 3B+ mają już wyprowadzone wyjście audio, potrzebny jest tylko jakiś niewielki wzmacniacz. Dla wersji Zero potrzebny jest jednak układ zewnętrzny. Prawdopodobnie doskonale spisałby się opisywany ostatnio moduł z wyjściem audio do Raspberry Pi Zero, ja zastosowałem jednak moduł i2s. Jest on dość wygodny w użyciu jako że zawiera w sobie wzmacniacz mono o całkiem sporej (do 3 W) mocy, poza tym początkujący elektronicy nie muszą się martwić o jakieś dziwne masy audio, filtrowane zasilania i tym podobne dziwactwa interesujące tylko "analogowców" - moduł podłącza się pięcioma przewodami do malinki, z drugiej strony dwoma do głośnika i już gra 🙂 Ponieważ nasz "robocik" musi potrafić poruszać ustami, zastosowałem najprostsze (i najprawdopodobniej najtańsze) rozwiązanie - czyli matrycę LED 8x8 ze sterownikiem, na której rysowane będą kształty ust. Od razu uprzedzę pytanie: owszem, próbowałem zrobić bardziej skomplikowany mechanizm używający serw. Niestety - oprócz trudności mechanicznych (te są do przezwyciężenia) natrafiłem na rzecz, której nie da się przeskoczyć: prędkość serwa. Typowe serwo potrzebuje 0.1 sekundy na przekręcenie orczyka o 60° - a nawet zakładając, że owe 60° wystarczy (w co osobiście wątpię), jest to co najmniej dwa razy za wolno (przy czym owe "dwa" mogłoby się w rzeczywistych układach rozrosnąć do trzech czy czterech). Będę jeszcze próbować rozwiązania z solenoidami - jeśli mi się uda to opublikuję wyniki. Ale może w międzyczasie ktoś inny napisze moduł "solenoid"? Zresztą - chciałem, aby każdy mógł sobie w domu wypróbować Kedrigerna ponosząc jak najmniejsze koszty, a opisywany układ można (mając RPi z wyjściem audio) zmontować kosztem klikunastu złotych (matryca) bez żadnych płytek - po prostu łącząc matrycę przewodami z GPIO malinki. Jako głośnika użyłem leżącego gdzieś w szufladzie zakurzonego głośniczka od starego telefonu z sekretarką, pasować jednak będzie dowolny pod warunkiem dopasowania mocy głośnika do posiadanego wzmacniacza. I to cała wielce skomplikowana elektronika. Jak widać na zdjęciu - nie ma tam nic skomplikowanego. Przejdę więc do opisu programu. Kilka lat temu udało mi się zmusić Mbrolę do w miarę prawidłowego gadania po polsku (do tego stopnia, że można ją było wykorzystać np. do tworzenia audiobooków). System TTS Milena (tak się nazywa ten "zmuszacz" do Mbroli - czyli bardziej fachowo NLP) bardzo dobrze sprawdził się na pecetowym Linuksie, wersja na Windows była raczej ciekawostką ale również działała - postanowiłem więc przystosować ją do malinki. Po przezwyciężeniu pewnych trudności z kompilacją (np. "char" dla architerktury Intel to w GCC domyślnie signed, w ARM z jakichś przyczyn unsigned) okazało się, że co prawda Milena działa, ale "rozruch" ma straszliwie powolny. Nic dziwnego - pliki tekstowe słowników wymowy i translacji fonetycznej muszą być kompilowane przy załadowaniu programu, a malinka ze swoją wolniutką kartą pamięci i nieszczególnie silnym procesorkiem potrzebuje zbyt dużo czasu, zanim wydobędzie z siebie jakieś zdanie. Postanowiłem więc zrobić inaczej: serwer wczytuje wszystkie pliki raz przy starcie systemu, a prosty program klienta przekazuje mu tylko treść komunikatów. Takie rozwiązanie ma również inne zalety: uruchomiony na sockecie TCP serwer może być na zupełnie innej fizycznej maszynie niż klient. I w ten sposób powstał program Kedrigern (nazwany na cześć pewnego czarodzieja, który postanowił odczarować księżniczkę z zaklęcia odbierającego głos). Jak mi to wyszło - oceńcie sami. Oto filmik ukazujący Kedrigerna w działaniu: Nie będę tu rozpisywał się o wszystkich zasadach działania i możliwościach Kedrigerna i Mileny (to w końcu ma byc post na forum a nie książka z dokumentacją), zacznę więc od instalacji Kedrigerna na malince. Wszystkie konieczne komponenty (z wyjątkiem głosu pl1) są w załączonym pliku tgz. Rozpakujmy go w dowolnym katalogu (np. w głównym katalogu użytkownika malinki) i instalujemy mbrolę wraz z polskim głosem: sudo dpkg -i mbrola3.0.1h_armhf.deb sudo apt install mbrola-pl1 Teraz możemy zainstalować Milenę. I tu uwaga: jeśli ktoś miał starszą wersję Mileny niż 0.2.92 musi ją przeinstalować na tę właśnie wersję - inaczej nie będzie działać moduł ruchu ust Kedrigerna! sudo dpkg -i milena*.deb Po zainstalowaniu wszystkiego powinno działać już polecenie milena_say, czyli musimy wypróbować: milena_say dzień dobry kolego I znów uwaga: jeśli wyjściem audio jest HDMI, polecenie może nie działać prawidłowo! Należy spróbować dodać parametr -d opóżniający generację mowy do czasu "załapania" HDMI, czyli najprościej: milena_say -d 2000 dzień dobry kolego Niestety, przy użyciu wyjścia HDMI mogą pojawić się problemy z późniejszym działaniem Kedrigerna, ale po pierwsze nie jest to miejsce na omawianie problemów z audio, po drugie wcale nie czuję się mistrzem w tym zakresie i prawdopodobnie ktoś tu wie lepiej ode mnie jak tym problemom zaradzić. W każdym razie mając uruchomiona Milenę i Mbrolę możemy przystąpić do instalacji Kedrigerna. Zaczynamy od instalacji serwera, czyli sudo dpkg -i kedrigern_0.2.0-1_armhf.deb Jeśli mamy podłąćzoną matrycę LED (8x8, MAX7219) możemy użyć jej jako wyświetlacz ust: sudo dpkg -i kedrigern-matrix_0.2.0-1_armhf.deb No i oczywiście coś co pozwoli nam korzystać z serwera, czyli: sudo dpkg -i libkedrigern_0.1.2-1_armhf.deb Teraz możemy sprawdzić, co potrafi nasz serwer: kedrigern -h lub (jeśli mamy zainstalowany moduł matrix) kedrigern -M matrix -h W odpowiedzi dostaniemy wykaz opcji, z którymi możemy uruchomić serwer. Aby je przetestować, należy otworzyć drugi terminal; w pierwszym uruchamiamy serwer poleceniem "kedrigern" z różnymi opcjami, w drugim testujemy poleceniem kdr-say. Po ustaleniu opcji należy zedytować plik /etc/default/kedrigern i w nim ustawić domyślne parametry. Po przetestowaniu poleceniem kedrigern -C /etc/default/kedrigern możemy już uruchomić nasz serwer w tle: sudo systemctl start kedrigern Jeśli chcemy, aby serwer startował od razu przy starcie systemu, należy wydać polecenie: sudo systemctl enable kedrigern Do komunikacji z serwerem służą polecenia kdr-say, kdr-stop i kdr-speaking. Moduł matrix pozwala na wyświetlanie ust zsynchronizowane z głosem syntezatora. Oto przykładowe obrazy ust dla różnych fonemów: Fonem A Fonem I Fonem O Fonem U Fonemy M, P i B Wybrałem do pokazania kilka najbardziej charakterystycznych kształtów. Jeśli komuś nie odpowiadają stworzone przeze mnie kształty może w prosty sposób dorobić własne lub poprawić moje na bazie pliku /usr/share/kedrigern/demo.shape i podłączyć go do Kedrigerna, np. za pomocą opcji "-m matrix:shape" lub wprowadzając odpowiednie zmiany w pliku konfiguracyjnym. Protokół komunikacyjny jest bardzo prosty. Nie wnikając w szczegóły - załączony moduł w Pythonie (działa w wersji 2 i 3 Pythona) pozwala na sterowanie serwerem, a jednocześnie stanowi przykład sposobu komunikacji. I to wszystko... A nie, nie wszystko. Bo zaraz ktoś powie że to tylko zabawka, że komu potrzebne gadające roboty... Przede wszystkim: Kedrigern może generować komunikaty diagnostyczne w czasie testowania/programowania robota. Jakie to ma znacze nie nie muszę chyba mówić nikomu, kto choć raz ustawiał np. regulatory silników czy zakres ruchu serw w warunkach polowych. Poza robotyką może być bardzo dobrym rozwiązaniem do urządzeń typu headless - ja np. stosuję podobne (poprzednika Kedrigerna) rozwiązanie do obsługi sterownika pieca CO (podanie np. godzin nieobecności w mieszkaniu) czy jako wygodnego interfejsu do wpisywania wyników pomiaru ciśnienia krwi i poziomu cukru z małej przenośnej klawiaturki. A to już nie są zabawki 😉 A w ogóle przypominam, że Roomba też gada (tyle że Ciapek ładniej) 🙂 Zdaję sobie sprawę z tego, że opis jest bardzo pobieżny. Z chęcią odpowiem na wszystkie pytania - o ile kogoś to będzie interesować... W każdym razie wypróbowanie Kedrigerna nawet bez modułu ust posiadacza RPi z wyjściem audio nic nie kosztuje, a może się przyda? Kody źródłowe Mileny i Kedrigerna są dostępne na stronie http://milena.polip.com A, i ostatnie wyjaśnienie: Ciapek to mały troll, wychowanek czarodzieja Kedrigerna w książce Johna Morressy'ego "Głos dla księżniczki". Nawet trochę podobny 🙂 Przy okazji: @Treker, czemu pliki zip są cacy a tgz są be? kedrigern.zip pykedrigern.zip
- 20 odpowiedzi
-
- 13
-
- Animatronika
- Raspberry Pi
- (i 1 więcej)
-
Dawno, dawno temu, kiedy Internet jeszcze raczkował... Miałem niesamowite szczęście — zostaliśmy zaproszeni do zwiedzenia Studia Hensona. My — to znaczy cały zespół pewnego teatru. Łazilismy po tym studio, nasi artyści rozmawiali z ichniejszymi artystami... a ja się nudziłem jak mops. Na szczęście Cheryl Henson to zauważyła, i po mojej informacji że jestem technikiem a nie aktorem — zaprowadziła mnie do pracowni. Dużo mógłbym na tem temat mówić (nie wiem czy mi wolno, ale technologie chyba nie są już tajemnicą), w każdym razie szczękę z podłogi zbierałem jakiś tydzień. Kermit na selsynach (kto pamięta co to?), kostium misia (tego z reklamy Coli) nafaszerowany elektroniką chyba bardziej niż skafander Armstronga, tajemniczy proces tworzenia skóry Piggy czy czterdziestocalowy kineskopowy monitor w montażowni... Wtedy postanowiłem sobie, że też muszę zrobić lalkę. Może nie jestem mistrzem w konstrukcji lalek, ale coś na ten temat wiem... Problem był prosty: o ile lalki Hensona przeznaczone są do filmu (czyli trzy osoby animujące Kermita, akumulatory wystarczające na kilka minut i zasada "czego nie widzi kamera tego nie ma") — o tyle ja chciałem zrobić lalkę teatralną. Dla niezorientowanych mam proste porównanie. Lalka Hensona jest jak wyścigowy bolid, który zasuwa najszybciej jak może (ale co okrążenie trzeba mu wymienić opony razem z kołami, zatankować, najlepiej zrobić pełny przegląd a do jazdy potrzebna jest kilkuosobowa ekipa). Lalka teatralna przypomina bardziej terenówkę — wjedzie wszędzie, tankuje się raz na jakiś czas jeśli gdzieś w pobliżu jest stacja benzynowa, przegląd się robi raz przed wyjazdem, a do prowadzenia jest potrzebny kierowca sztuk jeden. A jednak postanowiłem, że coś tam podpatrzę z Hensona, coś z typowych teatralnych lalek, i może coś wyjdzie. Wybór padł na jawajkę z dwóch powodów: po pierwsze jest stosunkowo prosta w konstrukcji, po drugie osoba która miała ową lalkę animować specjalizuje się właśnie w jawajce. Od razu uprzedzam ewentualne pretensje i aluzje do worklogów: moim celem było zrobienie pełnej konstrukcji i sprawdzenie, czy animacja jest w ogóle możliwa. Ubranie i makijaż to inna sprawa, muszę wybrać czy będę płacić, czy nauczę się szyć (to drugie chyba bardziej mi odpowiada) czy w ogóle zostawię lalkę taką jaka jest na pamiątkę i wezmę się za następną; w każdym razie projekt jest z mojej strony skończony. Zacząłem od założeń. Przede wszystkim postanowiłem trochę zmienić zasady ruchu głowy. W najprostszej jawajce głowa jest nieruchoma. Dodatkowe możliwości to ruch obrotowy, ew. możliwość skłonu. O ile z ruchem obrotowym nie ma problemu, o tyle różne mechanizmy przenoszące napęd na głowę bywają chimeryczne i awaryjne (a to zerwie się gumka prostująca głowę, a to coś stanie się z linką). Dodatkowo aby zmusić lalkę do skłonu głowy potrzebna jest stosunkowo duża siła. Tak więc naturalne mi się wydało zastąpienie takiego mechanizmu elektronicznym. Chciałem również wyposażyć lalkę w możliwości w jawajkach rzadko spotykane: możliwość poruszania oczami oraz przynajmniej jedna chwytna ręka. Tu też z uwagi na samą konstrukcję jawajki i sposób animacji nie jest możliwe zrobienie tego poprzez czysto mechaniczne rozwiązania. I tak mam zaszczyt przedstawić: Maestro Zittaurus, mistrza obojga magii, dla znajomych Ziutek (dla dalszych znajomych pan Ziutek). "Kręgosłup" lalki (zastępujący tradycyjny kij) został wykonany z dwóch rurek: wewnętrzna grubościenna rurka wodociągowa PCW 17mm przenosi ruch obrotowy na głowę, a jej sztywność wystarczy aby się nie uginała w czasie poruszania lalką. Zewnętrzna to zwykła cienkościenna rurka instalacyjna, na której spoczywa ciężar głowy i do której mocowane są ramiona. Głowę zaprojektowałem w programie FaceGen 3d Print (bardzo dobrze działa pod Wine) jako solid model i OpenSCAD-em wyciąłem w niej miejsca na oczy oraz mechanizmy napędowe.Przewody do serw biegną wewnątrz rurki. Użyłem tu zwykłych serw micro TowerPro SG90 przede wszystkim ze względu na ich popularność (a poza tym kilka ich miałem). Niestety — z kilku przyczyn nie było to dobry wybór, ale o tym później. Trochę problemu sprawił mi mechanizm dłoni. Nawet najmniejsze dostępne serwa są za wielkie, aby umieścić je wewnątrz dłoni. Tym samym umieszczając serwo w przedramieniu musiałem zmienić tradycyjny sposób mocowania dłoni (sznurek) na jakiś sztywny. Myślałem na początku o czymś w rodzaju bowdena, ale w mońcu wpadłem na pomysł zastosowania podwójnego przegubu kulowego. Kule zostały wydrukowane, łączący je pręt to ucięty kawałek śruby M4 przewiercony wzdłuż wiertłem 1.8 mm. Przycisk wyzwalający zamknięcie dłoni został umieszczony w rękojeści czempuritu. Początkowo projektowałem sterowanie proporcjonalne — ale szybko zdałem sobie sprawę, że nie ma to żadnego sensu: układ dłoni animatora na rękojeściach nie pozwala na tego typu sterowanie, dużo lepszym rozwiązaniem jest po prostu przycisk, po którego naciśnięciu zmienia się stan dłoni (zamknięta/otwarta). W rękojeści została umieszczona cała elektronika: akumulator 18650 2600 mAh, ładowarka z zabezpieczeniem, przetwornica MT 3608 oraz Arduino Pro Mini. Do sterowania ruchami głowy i oczu służy płaski joystick oraz pierścień (żółty na zdjęciu) do obracania głową na boki. Joystick został umieszczony zgodnie z życzeniem animatorki — tak jest jej najwygodniej operować. Do kontroli stanu akumulatora słuzy dioda — jeśli zaczyna migać, warto rozejrzeć się za jakąś ładowarką. Nie zamieszczam schematu — w końcu to trywialne podłączenie joysticka, przycisku i trzech serw do małego Arduino. Kod jest bardzo prosty, od typowego różni się wyłącznie klasą MyServo automatycznie odłączającą serwomechanizm jeśli nie jest używany przez co najmniej sekundę: #include <Servo.h> class MyServo: public Servo { public: MyServo(int pin); void writePos(int pos); void heartbeat(void); private: bool rlyAttached; int lastPosition; int servoPin; uint32_t lastMillis; }; MyServo::MyServo(int pin) { servoPin = pin; rlyAttached = 0; lastPosition = -1; } void MyServo:: writePos(int pos) { pos = constrain(pos, 0, 180); if (pos != lastPosition) { if (!rlyAttached) { rlyAttached = true; attach(servoPin); } write(pos); lastPosition = pos; lastMillis = millis(); return; } heartbeat(); } void MyServo:: heartbeat(void) { if (rlyAttached && millis() - lastMillis > 1000UL) { detach(); rlyAttached = 0; } } #define OCZY_PIN A1 #define GLOWA_PIN A0 #define REKA_PIN A2 #define VOLT_PIN A3 #define OCZY_SRV 11 #define GLOWA_SRV 10 #define REKA_SRV 12 #define LED_PIN 13 MyServo reka(REKA_SRV), glowa(GLOWA_SRV), oczy(OCZY_SRV); #define MINVOLT 675 #define MAXVOLT 775 void setup() { reka.writePos(90); oczy.writePos(90); glowa.writePos(180); pinMode(LED_PIN, OUTPUT); pinMode(REKA_PIN, INPUT_PULLUP); } uint32_t handStateChanged; bool handState; int handLevel = 180; int headLevel = 180; int eyesLevel = 90; #define OKO_BL 500 #define OKO_BU 550 #define OKO_LL 250 #define OKO_LU 810 void getInput(void) { int v_oko = analogRead(OCZY_PIN); int v_glowa = analogRead(GLOWA_PIN); int v_volt = analogRead(VOLT_PIN); bool v_reka = digitalRead(REKA_PIN); v_volt = constrain(v_volt, MINVOLT, MAXVOLT); v_volt = map(v_volt, MINVOLT, MAXVOLT, 100, 1000); digitalWrite(LED_PIN, (millis() % 1000) < v_volt); v_glowa = constrain(v_glowa, 220,490); v_glowa = map(v_glowa, 490,220,180,0); if (v_glowa == 180 || v_glowa == 0 || abs(v_glowa - headLevel) >10) { headLevel=v_glowa; } v_oko = constrain(v_oko, OKO_LL, OKO_LU); if (v_oko < OKO_BL) v_oko = map(v_oko,OKO_LL, OKO_BL,0,90); else if (v_oko > OKO_BU) v_oko = map(v_oko,OKO_BU, OKO_LU,90,180); else v_oko = 90; if (v_oko == 0 || v_oko == 180 || v_oko == 90 || abs(v_oko - eyesLevel) >= 6) { eyesLevel = v_oko; } if (v_reka == handState) return; if (millis() - handStateChanged < 200UL) return; handState = v_reka; handStateChanged = millis(); if (!handState) { handLevel=handLevel?0:180; } } void loop() { getInput(); reka.writePos(map(handLevel,0,180,0,90)); glowa.writePos(headLevel); oczy.writePos(180-eyesLevel); } Ziutek wyszedł mi całkiem nieźle (tzn. realizuje wszystko co założyłem), a teraz kolej na możliwe poprawki: W rękojeści powinien się znaleźć wyłącznie stosunkowo ciężki akumulator wraz z ładowarką. Arduino i przetwornicę należałoby podwiesić do rurki na wysokości tułowia lalki. W tym przypadku nie wchodzi już w grę przeprowadzenie przewodów wewnątrz rurki, ale rozwiązanie tego nie powinno być problemem. Dodatkowo należałoby wyprowadzić na jakimś gnieździe interfejs UART. Przycisk sterujący otwarciem/zamknięciem dłoni powinien być zdublowany na rękojeści. Sterowanie ruchami głowy powinno być możliwe za pomocą jednego palca. W ten sposób uzyskam pewniejszy chwyt rękojeści i możliwość łatwiejszego operowania manipulatorami oczu i dłoni. Sama rękojeść powinna być dopasowana do dłoni konkretnego animatora. No i oczywiście należy zastosować inne serwa; jakie — o to już będę pytał we właściwym dziale. W razie pytań jestem do dyspozycji.
-
Hej! Właśnie zaczynam nowy projekt (lalka). Poprzedni się sprawdził, ale niektórzy twierdzą że serwa chodzą za głośno - więc chciałbym w drugim użyć czegoś cichszego. Do napędu oczu i dłoni znalazłem (zupełnie przypadkiem) HD-1370A - mały (zmieści się w dłoni lalki), cichy, pobiera niewiele prądu, ogólnie cud i miód. Gorzej z napędem głowy - co prawda mam trzy takie serwa ale obawiam się, że stosunkowo duża głowa będzie zbyt masywna i przy gwałtowniejszych ruchach lalki albo się przekręci (serwo jest odłączone w trakcie pracy z lalką z wyjątkiem konieczności ruchu), albo połamie dość rachityczny w sumie mechanizm. I teraz pytanie: czym zastąpić użyte wcześniej SG-90? Serwo musi być: Podobne rozmiarami do SG90 (idealnie by było aby było mechanicznie kompatybilne - mógłbym zmienić napędy w Ziutku, ale nie jest to konieczne); Ciche (im cichsze tym lepiej); Dostępne bez problemu (Botland, Allegro) z jakieś uczciwe pieniądze. Nie musi być ani specjalnie szybkie, ani specjalnie mocne. Sposób mocowania w linku wyżej. Pytanie kierują do kogoś kto zna te serwa, nie potrzebuję teorii tylko konkretnego modelu (nie stać mnie na próbowanie wszystkich możliwych). Ktoś coś?
-
(...)Kwiat z wielkim łoskotem otworzył się i w środku, na zielonym dnie kielicha, gdzie zwykle mieści się słupek kwiatowy, stała sobie prześliczna mała dziewczynka. Nazwali ją Calineczką(...). Witam. Mam bojowe zadanie - zrobić kwiatek, w którym mieszka Calineczka. W sumie nic skomplikowanego - jakieś serwo, które otwiera i zamyka płatki... Tyle że musiałem sobie życie skomplikować i wymyśliłem, że będą dwa niezależne serwa, jedno do dwóch przednich płatków, drugie do trzech tylnych. No i mam problem: nie bardzo mogę sobie wyobrazić mechanizm, który w miarę równo będzie za pomocą pojedynczego serwa otwierać i zamykać dwa czy trzy płatki jednocześnie... bo pojedynczo albo wszystkie na raz to proste. Nierówno też (takie coś już zrobiłem i wstyd pokazać jak to działa). Ma ktoś jakiś pomysł? Na wszelki wypadek podaję podstawowe wymiary: doniczka ma średnicę na górze 12 cm, Calineczka ma ok.12 cm wysokości - przy czym wolałbym doniczki nie zmieniać bo bardzo ładnie wchodzi do środka cała elektronika i akumulator.