Elektroda.pl
Elektroda.pl
X
OptexOptex
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Filtr kalmana - system wizji

01 Mar 2011 00:10 2091 4
  • Poziom 12  
    Witam,

    chciałem skonsultować pewną kwestię. Tworzę system wizyjny, który ma umożliwiać sterowanie małymi mobilnymi robotami. Kamera "patrząca" z góry na kolorowe roboty dokonuje akwizycji obrazu, program za pomocą analizy koloru markerów, które są na robotach zwraca ich położenie (X, Y) oraz kąt kierunku jazdy. Kąt ten jednak drga, co związane jest z szumami kamery i tego nie uniknę. Słyszałem, że takie drgania można wyeliminować za pomocą filtra Kalmana. Czy do tego wystarczą dane o tymże właśnie kącie i położeniu z klatek aktualnej i poprzednich? Do przetwarzania obrazu używam OpenCV. Szukałem na necie w tym temacie, ale matematyka jest nie raz przygniatająca.. jeśli mielibyście jakieś uwagi co do implementacji lub posiadali jakieś materiały wrzućcie coś proszę..

    Pozdrawiam, galsan
  • OptexOptex
  • Poziom 31  
    Napisz coś więcej.
    Jak wyznaczasz kierunek, statycznie (położenie kątowe markera) czy dynamicznie (z różnych czasowo klatek)?
    Jaka jest rozdzielczość kamery, jaki dokładnie model, producent?
    W jaki sposób są przechwytywane klatki?
    Jak duże jest pole działania robotów?
    Ja swego czasu zajmowałem się się wizyjnymi systemami sortowania różnych producentów. Serwisowałem i również programowałem własne rozwiązania.
    Może coś podpowiem.
    Możesz wrzucić przykładową klatkę z kamery?
  • OptexOptex
  • Poziom 12  
    Klatki z kamery niestety nie jestem w stanie teraz wrzucić, gdyż do robotów mam dostęp tylko w laboratorium uczelni.

    Na grzebiecie małego robota (jeżdżąca kostka 7x7x7 cm) jest dwukolorowy marker. Kwadraciki leżą na przeciwko siebie po skosie. Położenie i kierunek wyznaczam w każdej klatce. Wykrywam dwa te markery, wyznaczam za ich pomocą środek robota (czyli aktualne położenie x, y) oraz kąt nachylenia do osi X.
    Klatki przechwytywane są za pomocą webcam`a Logitech 9000 PRO. Rozdzielczość to 320x240. Testowałem też dużo na rozdzielczości VGA, ale dwukrotnie mniejsza okazała się lepsza - większa stabilność wykrywanych markerów no i oczywiście mniejszy czas trwania algorytmu (do 10ms).
    Pole działania robotów to boisko ok. 2.8m x 2.1 m. To są robociki, które mają grać w piłkę nożną.
    Czytałem też, że do mojego zastosowania używany jest rozszerzony filtr Kalmana (EKF). Póki co walczę z matematyką.. OpenCV posiada klasę Kalman, ale niestety nie EKF.. podają w dokumentacji że do EKF wystarczy "tylko" odpowiednio przeliczyć control_matrix i update_matrix.. tylko w jaki sposób to już nie wiem. Wiem natomiast, że chodzi o linearyzację modelu, gdyż mój model jest podobno nieliniowy, a klasa Kalman w openCV operować może tylko na modelu liniowym.
    Mogę wysłać dokument którym się sugeruję i który opisuję w zasadzie to co pytasz, bo mam dokładnie to samo zastosowanie co w pdf`ie który zamieszczam poniżej:

    http://dl.dropbox.com/u/11606057/Papers_AUTOMATIKA.pdf
  • Poziom 31  
    Opis EKF jest w tym PDF-ie. Trzeba "tylko" przełożyć na C.
    Ja bym podszedł do tematu trochę inaczej.
    Po pierwsze, przy tej rozdzielczości obrazu ilość pikseli do analizy kierunku jest zbyt mała. W przytoczonym przykładzie (PDF) boisko jest mniejsze i rozdzielczość kamery większa, kamera szybsza (standard IEEE-1394). Kamera Logitech 9000 PRO ma teoretycznie rozdzielczość 2Mpix. Nie wiem, czy przy tej rozdzielczości jest jeszcze sensowna ilość klatek/s?
    Proponuję przemyśleć (nie twierdzę, że mam rację) następujące tematy:
    - obraz o wyższej rozdzielczości (można analizować co któryś piksel i co którąś linię, dokładna analiza tylko dla ustalenia kierunku),
    - ewentualnie zastosować kamerę IP (np. Vivotek 2Mpix, gdyby Logitech nie wyrabiał z kl/s przy dużej rozdzielczości
    - dla zwiększenia szybkości obróbki danych zastosować obraz czarno-biały

    Ostatni pomysł wymaga komentarza. Pozornie wydaje się bez sensu.
    Taki trik stosuje się w szybkich systemach sortowania. Obraz B/W wymaga krótszego czasu obróbki, plik jest mniejszy (1 bajt na piksel), obraz ostrzejszy.
    Rozpoznawanie kolorów na obrazie jest możliwe stosując odpowiednie, sterowane komputerowo kolorowe oświetlenie (odbicie lub pochłanianie kolorowego światła, barwy dopełniające).
    Podaję to jako ciekawostkę, mecz robotów z dyskotekowym oświetleniem
    chyba jednak nie jest dobrym pomysłem.

    - dynamiczne określanie kierunku (dwie sąsiednie pozycje w ruchu wyznaczają kierunek), może jako funkcja pomocnicza
  • Poziom 10  
    Witam,
    jestem bardzo zainteresowany Twoim tematem. Pracuję nad czymś podobnym. Jeśli chciałbyś się skontaktować moglibyśmy porozmawiać.