Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Computer ControlsComputer Controls
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Kinect tank- autonomiczny robot wykonany w technologii druku 3d

szymon.rychu 25 Feb 2017 21:37 10593 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..

    Cool! Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    szymon.rychu
    Level 10  
    Offline 
    szymon.rychu wrote 5 posts with rating 30, helped 0 times. Live in city Luzino. Been with us since 2009 year.
  • Computer ControlsComputer Controls
  • #2
    marnowak
    Level 15  
    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ś?
  • Computer ControlsComputer Controls
  • #3
    szymon.rychu
    Level 10  
    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) :)
  • #5
    Pablo2015
    Level 18  
    szymon.rychu wrote:
    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
    szymon.rychu
    Level 10  
    Pablo2015 wrote:
    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 wrote:
    Ja chciałbym zobaczyć filmik z jazdy.

    Będzie wieczorem :)
    Teaser jest na instagramie: https://www.instagram.com/p/BPBEIrKlwUW/
  • #7
    Erbit
    Level 39  
    Pablo2015 wrote:
    ...
    Naciąg stosowany jest z powodu aktywnego zawieszenia czołgu ...


    Kolega autor mógł nie zarejestrować tego problemu gdyż w skali w jakiej wykonał swój pojazd zmniejszona jest masa pojazdu i siły naciągu gąsienic. Innymi słowy, gdy gąsienica naciągnie się do granic możliwości to nic się nie wydarzy bo materiał wytrzyma takie naciągniecie spowodowane niewielką masą pojazdu.

    W przypadku pojazdu "normalnej wielkości" problem ten od razu by był zauważony. Mogło by dojść do zerwania gąsienic lub do zniekształcenia osi albo przynajmniej zwiększonych oporów na łożyskach osi, etc.
  • #8
    Freddy
    Level 43  
    szymon.rychu wrote:
    Freddy napisał:
    Ja chciałbym zobaczyć filmik z jazdy.
    Będzie wieczorem
    Którym wieczorem?
  • #9
    Erbit
    Level 39  
    Freddy wrote:
    szymon.rychu wrote:
    Freddy napisał:
    Ja chciałbym zobaczyć filmik z jazdy.
    Będzie wieczorem
    Którym wieczorem?


    Byłym wieczorem - post #6
  • #10
    Freddy
    Level 43  
    Erbit wrote:
    Byłym wieczorem - post #6
    Oczekiwałem, że będzie na forum, a nie na zewnętrznym linku. :)
  • #11
    *zaba*
    Level 13  
    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ś ?