Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

wzrok robota, analiza obrazu - skomplikowany projekt

allberciq 08 Jan 2010 14:16 2904 4
Optex
  • #1
    allberciq
    Level 13  
    Tytułem wstępu..
    Od dłuższego czasu noszę się z zamiarem wykonania jeździdełka.
    Założenia wydawać by się mogły proste, ot ma się ono bezkolizyjnie przemieszczać po domu, być może po ogrodzie. Na późniejszych etapach pomyślę o konkretnym zastosowaniu dla niego. Puki co, ma wiedzieć gdzie jest i potrafić się przemieścić we wskazane miejsce.. no dobra ma widzieć gdzie trzymam piwo i umieć mi go przywieść:)
    Obecnie z braku czasu na majsterkowanie w warsztacie(małe dzieci, które to bardzo chcą mi pomóc) oraz brak źródła finansowania na nie tanią mechanikę, postanowiłem się zająć innym problemem, jakim jest wzrok robota.

    Jak że ambitnie podchodzę do projektu, nie chciał bym, aby było to tylko różnego rodzaju czujniki, które tylko ratują owe stworzenie przed kolizją ze ścianą, te z pewnością będą, ale jako zabezpieczenie gdy podstawowy system orientacji zawiedzie.

    Uniknąć bym chciał przykręcenia kółek do komputera, bo to takie mało estetyczne, ale czy mi się to uda to wyjdzie w praniu. Preferuje rozwiązanie z użyciem mikroprocesorów.

    Obecnie jestem na etapie przeczesywania internetu w poszukiwaniu materiałów. Projekt z pewnością jest ambitny, ale nie niemożliwy.

    Przejdźmy do meritum...
    Robot(bo wydaje mi się że efekt docelowy zasłuży na taką nazwę, w przeciwieństwie do zdalnie sterowanych pojazdów jakich to miliony się pojawia w sieci) ma zostać wyposażony w kamerę, oraz system do analizy obrazów.
    Obecnym moim celem jest stworzenie algorytmu, który z obrazu z kamery wyizoluje przestrzeń w ramach której może się bezkolizyjnie przemieścić.
    Pierwszym moim pytaniem do Was jest prośba o podanie modelu kamery, która się do tego celu nada. Im człowiek więcej czyta w tym temacie tym mniej wie. Ludzie stosują różne kamery, lecz też efekt jest różny...
    Moje wymagania:
    - Rozdzielczość na tyle duża aby było możliwe coś z obrazu odczytać, jednak na tyle mała aby sobie z tym poradził "przeciętny" mikroprocesor. Myślę że w grę wchodzi coś podobnego do rozdzielczości systemu PAL, albo i mniej.
    - Bezpośredni dostęp do matrycy. Możliwość pozyskania obrazu jak i RBG, tak i luminacji i chrominacji.
    - Właściwie to zastanawiam się czy kolory są mi potrzebne...?
    - Auto fokus
    - ... Tutaj zostawiam miejsce na wymagania, jakie zasugerujecie, aby ta kamera spełniała. Z pewnością ktoś kto już bawił się obróbką obrazu coś podsunie - liczę na Was.

    Przedstawię jeszcze moją koncepcje rozwiązania, aby było jasne o co chodzi, oraz jeżeli się okażę że brnę w ślepą uliczkę, ktoś bardziej obeznany mnie uświadomił i zatrzymał, albo nakierował na właściwą drogę.

    Otóż obraz z kamery będzie kierowany na szereg filtrów. Każdy filtr będzie realizowany przez oddzielny mikroprocesor. Obraz będzie przetwarzany w locie. Po odebraniu 3 linii z kamery, można rozpocząć przetwarzanie(filtrowanie) obrazu. Gdy procesor będzie filtrował niższe linie, te pierwsze można już wysyłać dalej i poddać filtracji na następnym kroku.
    Filtracja ma na celu wyszukanie krawędzi oraz od szumienie obrazu.
    Gdy obraz przejdzie wszystkie filtry, zostanie przeanalizowany pod kątem przydatności do dalszej obróbki, tutaj zostanie sprawdzone czy krawędzie są na tyle ciągłe aby coś z nich wyczytać, oraz czy nie jest za bardzo zaszumiony. W przypadku stwierdzenia nieczytelności, do filtrów zostaną wysłane sygnały, korygujące parametry filtracji. Na tym etapie może być pomocna sieć neuronowa, oraz sygnały z zewnętrznych czujników, jak choćby oświetlenia czy rodzaju podłoża...
    Po takim procesie powinienem uzyskać obraz zdatny do dalszej obróbki, jaką będzie wektoryzacja, ale to już później...
    Równolegle do filtrowania opisanego powyżej, obraz trafi na inny zestaw filtrów, mający na celu wyizolowanie śladów lasera - linia/linie pionowe, albo nawet siatka, rzutowane w obszar znajdujący się bezpośrednio przed jeździdełkiem. Laser(y) będzie się znajdował pod pewnym kontem względem kamery. Po wyizolowaniu tych śladów zostanie zbadana ciągłość tych linii, da to informacje o rodzaju podłoża, a w zasadzie jego "płaskości". Można będzie wyeliminować krawędzie np dywanu/płytek/paneli/progów itp.
    Powyższe dwa obrazy spotkają się w procesorze mającym na celu wyznaczenie przestrzeni, po której będzie się można bezpiecznie przemieszczać.

    Uf. Puki co to tyle...
    Takie moje życzenie(marzenie) noworoczne.
    Problem jest skomplikowany, jednakże jak się zacznie go rozbierać na kawałki wydaje się realny.
    Jeszcze parę słów na temat moich aspiracji.. Wykonałem już kilka jeździdełek i innych stworów z pogranicza mechaniki i elektroniki, jednak trudno by było nazwać je robotami. Programowanie nie jest mi obce, jak i to PCtowe, tak jak i mikroprocesory, w tym drugim przypadku kontakt miałem tylko z AVR. Nie widzę jednak przeszkód abym zapoznał się z innymi, poleconymi jednostkami.
    Budżet obecnie dość ubogi - stąd też zainteresowanie tworzeniem części inteligenci a nie skomplikowanej mechaniki.
    Z wykonaniem całości nie będę się spieszył, czasu do emerytury jeszcze sporo, jednakże nie chciał bym odkładać projektu w nieskończoność.

    Słowem podsumowania:
    Proszę o wskazanie kamery, która sprosta moim oczekiwaniom. Tak abym nie musiał wyważać otwartych drzwi i niepotrzebnie brnąć w koszty.
    Proszę o konstruktywną krytykę moich rozważań na temat całości układu.
    Z racji ogromu informacji w internecie, proszę również o podanie materiałów poruszających tą tematykę. Osobiście wyczytałem już dużo, lecz dalej czuje niedosyt informacji. Preferowany język polski, lecz i z angielskim nie będzie problemu.

    Pozdrawiam
    Rafał
  • Optex
  • #2
    MirekCz
    Level 35  
    Proponuje zacząć zabawę z tym co najłatwiej dostępne.
    Dobry webcam do komputera i tyle. Cały soft pisz na PC, a jak napiszesz coś fajnego to zawsze można kupić jakąś płytkę VIA pico-itx czy coś podobnego i projekt na tym odpalić.
    Na początek kilka metrów kabla USB i można spokojnie po pomieszczeniu się poruszać beż żadnego robota czy platformy jezdnej - po prostu trzymać kamerę w ręku i patrzec co komputer zaproponuje w odpowiedzi na obraz.
  • Optex
  • #3
    zerpo
    Level 22  
    Możesz zainteresować się zagadnieniem pod tytułem SLAM (simultaneous localization and mapping). Polega to na tym, że z obrazu wyodrębniane są charakterystyczne punkty (jakieś krawędzie, itp.). Po zabraniu kilku takich jest możliwość tworzenia mapy i jednoczesnej lokalizacji w niej. Najlepiej obrazuje to przykład:

    Na Youtube jest więcej tego, znacznie więcej. Lokalizację w ten sposób można realizować nie tylko za pomocą kamer, ale także czujników odległości (ale tych bardziej precyzyjnych - np. laserowych).

    Do przetwarzania obrazu może Ci nie starczyć mikroprocesor. To są ogromne ilości informacji, których przetwarzanie w locie wymaga wykonania bardzo wielu instrukcji.
    Może lepiej więc skłonić się tutaj w kierunku FPGA. Matryce te są bardzo powszechnie stosowane w rozwiązaniach przetwarzania obrazu. O ile wiem, to sprawdzają się także w realizacji sieci neuronowych.

    Co do kamery, to zainteresuj się pewnymi artykułami z Elektroniki Praktycznej, w numerach 11/2009 i 12/2009 rozpoczął się cykl dot. interfejsowania kamery z uC. Myślę, że może Tobie to bardzo pomóc, zwłaszcza, że opisane jest tam, jak się dobrać do obrazu z poziomu uC.

    Pozdrawiam i życzę powodzenia!
  • #4
    farmazon3000
    Level 15  
    jeśli masz zamiar robić to w pojedynkę to masz problem :)

    podłączanie kamery do mikrokontrolera nie ma większego sensu - jeśli nawet uda ci się to zrobić to zajmie ci tyle czasu że się zniechęcisz do całej reszty (no chyba że będziesz miał jakąś fajną kamerę, np. http://www.sparkfun.com/commerce/product_info.php?products_id=9334)

    jedynym słusznym rozwiązaniem dla hobbisty jest PC + kamerka internetowa + OpenCV : całość jest prosta i daje właściwie nieograniczone możliwości w dziedzinie rozpoznawania obrazów ... jeśli nie chcesz PC to użyj starego laptopa za 200 zł (kombinowanie z VIA pico-itx jest torchę ryzykowne ... i drogie)