logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Kinect tank- autonomiczny robot wykonany w technologii druku 3d

szymon.rychu 25 Lut 2017 21:37 11004 10
  • Cześć!
    Korzystając z okazji (i konkursu) chciałem Wam opisać konstrukcję robota, nad którym pracuję od 2 lat (w chwilach wolnych).

    Założenia projektu są proste:
    Robot, który będzie w stanie samodzielnie przejechać z punktu A do B na podstawie obrazu z kamery (lub kamery 3d).
    Jest to "duchowy spadkobierca" mojego projektu inżynierskiego- robota który podążał za tagami 2d na podstawie obrazu z kamery telefonu z Androidem.

    Przez ostatnie 2 lata powstały 3 konstrukcje:

    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Proof of concept- robot wyposażony w raspbery pi, kamerkę zasilany z baterii AAA. Jak widać, nie wygląda najładniej, ale spełnił założenia.
    Dało się sterować robotem z telefonu z Androidem z zainstalowaną aplikacją mobilną. No i przede wszystkim była to moja pierwsza konstrukcja wykonana w technice druku 3d.
    Aplikacja napisana na telefon wysyłała komendy poprzed ZeroMQ. W robocie, na Raspberry-pi zainstalowany był skrypt napisany w pythonie odbierający komendy i przesyłający je poprzez port szeregowy do kompatybilnego z Arduino Trinket-PRO od Adafruit.

    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Druga wersja robota odziedziczyła po pierwszym większość elektroniki, tj: mostki H oraz jedną z dwóch raspberrek.
    Czemu dwie?
    Koncepcja ewoluowała i polegała na wykorzystaniu dwóch par raspberry-pi+dedykowana kamera i wyciąganiu głębi ze stereoskopowego obrazu.
    Chciałem także obraz przetwarzać bezpośrednio na robocie. Do tego chciałem, aby raspberrki w tamdemie były repeaterem wifi, tj jedna z nich łączyłaby się do access pointa, przekazywała połączenie przez ethernet do drugiej, która wystawiała własną sieć.
    O ile udało stworzyć rzeczoną sieć, o tyle samo przetwarzanie stereoskopowego obrazu (w dobrej jakości) tylko na mikrokomputerkach była zbyt trudna.
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Próbowałem także przesyłać obraz do odpowiednio mocno komputera, ale dopiero po zrezygnowaniu z łączenia komputerków w sieć, udało mi się zniwelować różnice opóźnień spowodowane niesymetryczną ilością komputerów w obu połączeniach (początkowo obraz z lewej kamery przechodził przez jedno raspberry pi, obraz z prawej przechodził przez dwie).
    Zaimplementowałem dwie różne metody wyciągania głębi z obrazu:
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Po skalibrowaniu obrazów z kamer, tak aby zniwelować różnice w geometrii kamer, szukałem par feature-pointów o tych samych współrzędnych Y. Różnica osi X pozwalała dość dokładnie określić odległość kamer od punktu w przestrzeni.
    Problemem jednak okazała się regularność występowania feature pointów, oraz zależność ilości feature pointów od 'ciekawości obrazu' (na białej ścianie nie dało się znaleźć praktycznie żadnego, a na obrazie wypełnionym załóżmy trawą, było ich aż nadto).
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d (przykład z google'a- niestety nie mam zdjęcia)
    Drugie podejście zakładało wykorzystanie mechanizmów wbudowanych w OpenCV- tak zwanej disparity-map. Ale i to podejście okazało się zawodne. Nakład mocy obliczeniowej był (względnie) duży, a jakość nadal pozostawiała wiele do życzenia. Nie ma także dobrego sposobu, żeby odczytać dokładną odległość w dobrej rozdzielczości.
    Sam układ zasilania nie wykorzystywał już 6 paluszków, ale akumulator 2s 7.2v.

    Trzecia (aktualna) wersja powstała po zaprezentowaniu w pracy drugiej. Mikrosilniczki pololu, mimo że wystarczające do poruszania konstrukcją nie dość, że strasznie się grzały, do tego hałasowały. Przez to wszystko czołg brzmiał bardziej jak tania chińska zabawka, niż jak poważna konstrukcja, którą chciałbym się chwalić w internecie.
    Z tego powodu "poszedłem" na (największe jak do tej pory) zakupy do Botland'u. 16V/9A podwójny mostek H, para silników 37Dx70L 12V 1,19Nm każdy, do tego zasilanie z jednego z największych pakietów 3s 11,1V dostępnych wtedy w sklepie.
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    W międzyczasie także pracowałem nad nową ramą do robota, której proces drukowania także został mocno poprawiony.
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d Kinect tank- autonomiczny robot wykonany w technologii druku 3d

    Po zebraniu wszystkiego do kupy i zrezygnowaniu z stereoskopowej kamery, rozwiązaniu problemów z wyważeniem robota, powtała taka konstrukcja:
    Filmik na instagramie z działającym robotem
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    Kinect tank- autonomiczny robot wykonany w technologii druku 3d
    W miejsce kamer wstawiony został sensor Kinect (który jak się okazało kosztuje tyle co jedna dedykowana raspberry pi kamerka). Okazało się także, że Kinecta można bardzo bardzo odchudzić- pozbawiłem go mikrofonów kierunkowych, obudowy, aktywnego chłodzenia, diody, silnika sterującego pochyleniem.
    Sam obraz odczytywany jest przez (jedno) raspberry pi i wystawiany przez skrypt napisany w pythonie z wykorzystaniem frameworku o nazwie flask. Zrezygnowałem także z ZeroMQ na rzecz prostego RESTowego API. Nie ma także żadnej aplikacji na telefon z Androidem- napisałem prosty frontend w java-scripcie, który pozwala na sterowanie robotem.
    Trinket został zastąpiony przez Arduino PRO mega mający o wiele więcej wyjść. Robot został wyposażony w moduł IMU, oraz moduł GPS.
    Do konfiguracji linuksa wykorzystuję Ansible, które jest odpowiedzialne za instalacje zależności, serwisów, update'owanie kodu arduino oraz pilnowanie, żeby wszystko było w porządku.

    Praca nad konstrukcją ciągle jeszcze nie jest zakończona, ale źródła ciągle są aktualizowane. Od czasu do czasu zdarza mi się przecholować z dokładaniem ficzerów do konstrukcji, albo po prostu zatnę się w jakimś momencie z powodu jakiegoś problemu i odechciewa mi się rozbudowywać konstrukcję na tydzień lub 2 (aktualnie tak mam).
    Główne repozytorium znajduje się na moim githubie: https://github.com/szymonrychu/kinect_tank

    Konstrukcji ciąle brakuje:
    * czytania enkoderów- ich ogromna rozdzielczość powoduje, że przerwania w Arduino występują o wiele za szybko. Chcę użyć przerzudników D, żeby sobie nieco ułatwić (odchudzić procedury przerwań, podzielić ich ilość w czasie przez 4).
    * Zaimplementowanie PID'a na podstawie zliczonych przerwań
    * Zaimplementowanie PID'a do sterowania pochyleniem kinecta
    * Implementacja vSLAM'a - robot ma być "świadomy" swojej pozycji w przestrzeni
    * Implementacja omijania przeszkód, dodanie sterowania siecią neuronową

    Z chęcią odpowiem na pytania apropos robota.
    Pozdrawiam!

    PS. wiem wiem- elektroda jest forum o elektronice, a ja moją składam z brzydko połączonych modułów. Praca ciągle trwa..

    Fajne? Ranking DIY
    O autorze
    szymon.rychu
    Poziom 10  
    Offline 
    szymon.rychu napisał 5 postów o ocenie 30. Mieszka w mieście Luzino. Jest z nami od 2009 roku.
  • #2 16308896
    marnowak
    Poziom 15  
    Posty: 302
    Pomógł: 1
    Ocena: 3
    Hej.

    Ciekawi mnie jak gąsienice wykonałeś(te białe z góry). Elementy mechaniczne projektowane w SolidWorks i drukowane na drukarce 3D, czy są to elementy ogólnodostępne skądś?
  • #3 16308995
    szymon.rychu
    Poziom 10  
    Posty: 5
    Ocena: 30
    Cały projekty jest autorski. Niestety projektowałem wszystko w sketchup 3d i przez to nie znam żadnego CADa dobrze.
    Na dniach wrzucę projekt na githuba (uważam mechanikę za ukonczoną).
    Jak w końcu mi się zechce, poeksportuję wszystko do obj/stl, żeby ulatwic druk i modowanie innym.
    Warto też dodac, że przód robota projektowałem z myślą o 'pluginach' i poukrywałem zaczepy pozwalające na późniejsze rozszerzanie możliwości robota :)
    Apropos aktualnych gąsienic: nie widziałem, żeby ktokolwiek do tej pory stworzył gąsienice w oparciu o mechanizmy zębatki okrągłej i wzdłużnej (nie wiem jak się to fachowo nazywa - po angielsku 'rack' i 'pinion'). Dzięki temu nie musiałem stosować naciągaczy do gąsienic (nigdy nie ma sytuacji, żeby zęby gąsienic/koła napędowego były za krótkie) :)
  • #4 16309171
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2807
    Ja chciałbym zobaczyć filmik z jazdy.
  • #5 16310043
    Pablo2015
    Poziom 18  
    Posty: 468
    Pomógł: 6
    Ocena: 42
    szymon.rychu napisał:
    Apropos aktualnych gąsienic: nie widziałem, żeby ktokolwiek do tej pory stworzył gąsienice w oparciu o mechanizmy zębatki okrągłej i wzdłużnej (nie wiem jak się to fachowo nazywa - po angielsku 'rack' i 'pinion'). Dzięki temu nie musiałem stosować naciągaczy do gąsienic (nigdy nie ma sytuacji, żeby zęby gąsienic/koła napędowego były za krótkie)


    Kompletnie nie rozumiem o co Ci chodzi. W chyba każdym czołgu masz taki napęd jaki zastosowałeś+ napinacze o których dalej.

    Elementy mechaniczne w napędzie to koło zębate i zębatka- czyli listwa zębata zapętlona w formie gąsienicy.
    Prawie każdy nazywa to źle. W rowerze też nie ma zębatki tylko koło łańcuchowe.

    Naciąg stosowany jest z powodu aktywnego zawieszenia czołgu- koła mogą się przemieszczać dostosowując się do terenu. Przemieszczanie się kół wymaga "zmieniania" się długości gąsienicy, aby była cały czas odpowiednio napięta. Oczywiście zmienianie długości gąsienicy nie jest realizowane dosłownie z powodu stopnia skomplikowania. Lepiej dać napinacz i o x dłuższą gąsienice, jak to się zresztą powszechnie stosuje.
    Twoje zawieszenie natomiast może pracować tylko w zakresie luzu na gąsienicy, co jest oczywiście błędem konstrukcyjnym.

    Starałem się aby komentarz miał wydźwięk konstruktywnej krytyki. Pozdrawiam
  • #6 16310541
    szymon.rychu
    Poziom 10  
    Posty: 5
    Ocena: 30
    Pablo2015 napisał:
    Kompletnie nie rozumiem o co Ci chodzi. W chyba każdym czołgu masz taki napęd jaki zastosowałeś+ napinacze o których dalej.

    Dzięki!
    Prawda- w rzeczywistości tak to jest realizowane.
    Chodziło mi po prostu, że nikt nie wpadł na to, żeby zaprojektować i wydrukować to w ten sposób :) Nie znalazłem takiego projektu nigdzie na necie ;)

    Freddy napisał:
    Ja chciałbym zobaczyć filmik z jazdy.

    Będzie wieczorem :)
    Teaser jest na instagramie: https://www.instagram.com/p/BPBEIrKlwUW/
  • #7 16313026
    Konto nie istnieje
    Poziom 1  
  • #8 16314639
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2807
    szymon.rychu napisał:
    Freddy napisał:
    Ja chciałbym zobaczyć filmik z jazdy.
    Będzie wieczorem
    Którym wieczorem?
  • #9 16314656
    Konto nie istnieje
    Poziom 1  
  • #10 16314686
    Freddy
    Poziom 43  
    Posty: 19997
    Pomógł: 1394
    Ocena: 2807
    Erbit napisał:
    Byłym wieczorem - post #6
    Oczekiwałem, że będzie na forum, a nie na zewnętrznym linku. :)
  • #11 16315381
    *zaba*
    Poziom 13  
    Posty: 139
    Ocena: 5
    A ja mam pytanie dotyczące druku 3d na jakiej maszynie to drukowałeś czy to jest jakaś fabryczna drukarka czy sam składałeś ?

Podsumowanie tematu

✨ Użytkownik opisuje projekt autonomicznego robota, który potrafi poruszać się samodzielnie na podstawie obrazu z kamery. Robot, będący kontynuacją wcześniejszego projektu, został zaprojektowany w programie SketchUp 3D i wykonany w technologii druku 3D. W ciągu dwóch lat powstały trzy wersje robota, w tym prototyp z Raspberry Pi i kamerą. Użytkownik planuje udostępnić projekt na GitHubie, aby umożliwić innym modyfikacje. W dyskusji poruszono również kwestie dotyczące mechaniki gąsienic, ich napędu oraz wyzwań związanych z konstrukcją. Użytkownicy wyrazili zainteresowanie filmem z jazdy robota oraz pytali o szczegóły dotyczące użytej drukarki 3D.
Wygenerowane przez model językowy.
REKLAMA