Elektroda.pl
Elektroda.pl
X

Search our partners

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

Autonomiczny system wizyjny robota mobilnego

czaina 29 Apr 2006 13:31 8915 26
Computer Controls
  • #1
    czaina
    Level 13  
    Skoro kilka osób się zainteresowało to napiszę parę słów.

    Mam zamiar w ramach pracy magisterskiej, wraz z kolegą, zbudować system wizyjny i napisać dla niego algorytm. Podstawowym zadaniem systemu będzie znalezienie na ringu Sumo przeciwnika o nie zdefiniowanym kolorze i kształcie. Do tego planujemy dodać orientowanie robota na podstawie położenia względem linii krańcowej.

    Tak, wiem że są gotowe algorytmy śledzenia obiektów. Najprostszy jest zrobiony dla kamery którą wybrałem czyli CmuCam2. Polega on na śledzeniu obiektu o z góry zadeklarowanym kolorze wyróżniającym się z tła. Ja chcę śledzić i atakować obiekty które są na ringu ale których nie zadeklarowałem wcześniej.

    Do tego zamierzamy trzymać się zasad Sumo, czyli robot będzie autonomiczny a cała elektronika będzie na jego pokładzie.

    Na razie czekam na kamerę i procesor ARM7. Niestety zamówiłem je drogą oficjalną przez Politechnikę więc czekam sobie od GRUDNIA.
  • Computer Controls
  • #2
    wlamywacz2004
    Level 17  
    Możesz napisać co już macie? Jakieś testy robiliście?
  • #3
    czaina
    Level 13  
    Mamy 29 kwietnia i od grudnia czekamy na kamerę i procesory.

    Udało mi się ustalić że wstępna filtracja obrazu musi być dostosowana do kamery. Każda z kamer cyfrowych nanosi swoje własne zakłócenia na obraz.

    Co do dalszej obróbki to udało mi się osiągnąć niezłe efekty z metodą K-means. Niestety kwatnyzacja robiona w ten sposób jest za wolna.

    Teraz szukam szybkich algorytmów wykrywania krawędzi. Może znasz jakieś fajny?

    Wczoraj i dzisiaj bawiłem się modułem ADNS-1610 (tańszy odpowiednik 2610). Na pewno używacie go często. Połowa z Was trzyma właśnie rękę na nim :D Jest to kamera o małej rozdzielczości używana w myszkach optycznych. Daje na wyjściu poza obrazem, informacje o przesunięciu kadru. Próbuję dostać się do algorytmu przez nią używanego by ustalić jak analizuje wektor ruchu. Może zamiast szukać wyróżniającego się obiektu na ringu mógłbym szukać ruchu.
  • Computer Controls
  • #4
    wlamywacz2004
    Level 17  
    A mógłbyś podać jakieś linki do stron dla początkujących kiedyś sie tym zainteresowałem ale oczywiście nic z tego nie wyszło.
  • #5
    czaina
    Level 13  
    Czemu nie:

    http://www.cs.cmu.edu/~cmucam/home.html

    http://serge.laforest.free.fr/robot/robot.htm

    http://roboter-teile.de/Shop/themes/kategorie/detail.php?artikelid=31#

    http://www.beyondlogic.org/imaging/camera1.htm

    http://pages.zoom.co.uk/andyc/camera.htm

    http://www.circuitcellar.com/avr2004/Second.html

    To tak po łebkach z zastosowań i sprzętu. Algorytmy piszę sam, trochę na podstawie zajęć z dr Skonecznym trochę na podstawie książek. Niestety w tej materii nie ma ścisłych reguł. Jak wspomniałem wcześniej filtry dostosowuje się do kamery i otoczenia podobnie algorytmy. Są gotowe algorytmy rozpoznawania liter ale są one zupełnie różne od tych które rozpoznają rysy twarzy itd. Ja ten temat lepiej zgłębie na pewno się podzielę spostrzeżeniami.
  • #6
    MirekCz
    Level 35  
    Czaina:nie wiem czy wybór cmucam jest dobry, chyba że chcesz przeprogramować znajdujący się tam procesor.
    Cmucam ma chyba tylko wyjście com, a to powoduje, że przesłanie obrazu na zewnątrz trwa b.długo.

    Najtańsza kamery (i do tego ze sprzętowym wykrywaniem krawędzi) znajdują się w modułach gameboy camera.. do dostania za kilka $ na ebayu, lub ~40zł na allego.
    Kamery są czarno-białe z rozdzielczością 128x128, do wymienionego zastosowania powinny pasować bardzo dobrze.

    Z chęcią poczytam o postępach prac...
  • #7
    czaina
    Level 13  
    Kamery z GameBoy'a nie oglądałem ale pomęczyłem kamery z różnych źródeł. Na ogół był problem z jakością lub interfacem. CmuCam2 w brew temu co piszesz ma wyjście równoległe 8 lub 16 bitowe i jest sterowana przez łącze I2C. Daje pełny dostęp do formatu w jakim jest obraz oglądany (CCIR601, CCIR656, ZV port, YCrCb 4:2:2, GRB 4:2:2, RGB) oraz kilka innych możliwości. Faktycznie istnieją kamery z wbudowanym śledzeniem ruchu. Na przykład wspomniana przeze mnie kamerka z myszki optycznej. Jednak ja potrzebuję mieć pełną władzę nad tym co się dzieje z obrazem. Ja ten algorytm ma napisać a nie kupić, praca magisterska ma być twórcza.

    Dalej, ta kamera ma rozdzielczość 356 x 292 i jest kolorowa. Co do samej prędkości ... jak mi się uda uzyskać szybkość analizy obrazu na poziomie 1 klatki na sekundę będę już zadowolony.

    Poniżej widać przykład takiej kwantyzacji do 4 kolorów.
    W dalszej pracy będę operował na obrazie zkwantowanym, który przez laików mylony jest z szarościowym. Jednak mam zamiar go pozyskać z obrazu RGB gdyż tak będzie mi łatwiej odseparować tło.
  • #8
    zholka
    Level 12  
    Witam,

    Ja tez powoli zaczynam sie bawic.

    Ale mnie bardziej insteresuja obrazy Stereo. - mozna z nich np wyciagnac odleglosc od obiektow.

    Polecam zerknac :
    http://avr.auctionant.de/avr-ip-webcam/

    Bo sie natknolem na ten ciekawy link. Ogolnie mozna zobie ustawiac rozdzielczosc, pracuja po RSie.

    Koszt od 9,9 do 15 zyli : )


    Tez bede chcial podpiac to do ARMA.
    Ale chcee sie pobawic stereowizja.

    POzdrawiam,
    ZH

    ZH
  • #9
    czaina
    Level 13  
    Nawet mam tą kamerę. Niestety wysyła ona pliki JPG i tylko w trybie podglądu dostałem BMP. Do moich celów więc się nie nadaje.
    Polecam ją jednak do zabawy i projektów w których obraz trzeba od razu do komputera przesłać.

    Co do stereowizji to dr Skoneczny na PW szuka chętnego na taki projekt. Ma już dwie wysokiej klasy kamery cyfrowe. Na moje nieszczęście obie ważą tyle co mój robot :D
  • #10
    Paweł Es.
    VIP Meritorious for electroda.pl
    A może to wykrywanie obiektu zrobicie używając czegoś podobnego do filtru TES (tłumienia ech stałych) używanego w technice radarowej, z wyniku filtrowania znikają obiekty poruszające się poniżej pewnej prędkości granicznej.
    Zakładając, że szukany obiekt porusza się szybciej od tła to powinien on pozostać po filtracji. Trzeba też jakoś kompensować ruch obrazu wywołany ruchem własnym kamery (i jej nośnika).
  • #11
    czaina
    Level 13  
    Fajny pomysł, ale chyba do innego projektu. Chociaż ... może pomyślę o tym w pierwszym etapie pracy systemu. Nie myślałem jeszcze za bardzo nad technikami identyfikacji celu. Wstępnie chciałem ustawić tak kamerę aby przeciwnik zawsze przecinał linię krańcową. W tym ustawieniu wystarczy znaleźć nieciągłość linii by zidentyfikować przeciwnika.

    Filtry o których piszesz (jest ich cała rodzina) są mi już znane. Mają one tylko jedną wadę. Wymagają przechowywania w pamięci co najmniej dwóch klatek. Oraz dokonywania operacji na raz na więcej niż jednej klatce... Chyba żebym zgodnie z jednym z moich założeń użył dwóch lub więcej procesorów obrabiających sekwencyjnie klatki.

    Ciekawy pomysł, jak wreszcie dostanę zamówione części sprawdzę to. W Matlabie taki filtr fajnie działał. W ramach zajęć usuwałem ruchome obiekty więc bez problemu teraz je wyeksponuje.
  • #12
    zholka
    Level 12  
    Mam takie szybkie pytanie do "czaina".

    bo faktycznie jezeli MCA 25 generuje obraz w postaci JPEG to troche bol.

    BMP w trybie podgladu jaka ma rodzielczosc ?


    Pozdrawiam
    ZH
  • #13
    McRancor
    VIP Meritorious for electroda.pl
    80*60 pikseli, 256 kolorów, teraz zaczynam się tym bawić i jak na proste śledzenie przedmiotów uważam że jest idealne, 4800bajtów na ramke obrazu, w kolorze RGB332 (bity na kolor) przesyłane szybko bo 460800baud i kamera rzuca jakieś 6kl/s jak dla Atmegi128 z zewnętrznym ramem w sam raz ;)
  • #14
    adammruk
    Level 16  
    Jak podłączyłeś kamerkę do atmegi?Jakiś schemacik by pomógł i jaki program załadowany do mikrokontrolera?
  • #17
    zholka
    Level 12  
    Szukalem na sieci ale nie znalazlem czegos na temat Procesora CTech o nazwie ARGUS CT100A1-BG. Ale informacji skapo na ten temat. Jest on zastosowany w MCA-25.

    Czy kos moze ma dostep do dokumentacji ?
    ew. Jaki sensor CCD znajduje sie w tej kamerce ?

    Bo wykorzystanie obrazow w Formacie Jpeg w malych kontrolerkach : ( Srednio widze, a potrzebna by byla nieco wieksza rodzielczosc noz 80x60


    Pozdrawiam,
    ZH
  • #18
    McRancor
    VIP Meritorious for electroda.pl
    Jeśli chcesz wykorzystać większy obraz, to pamiętaj że 8bitowy uC nie poradzi sobie z alokowaniem tego w adresowalnej pamięci, trzeba by stosować bankowanie, co mija się z celem bo prędkość jakiejkolwiek obróbki na tym będzie niewielka.

    Większe obrazy wymagałyby procesora 16/32 bitowego, a taki poradzi sobie z dekodowaniem Jpega.

    Procesor o którym piszesz to właśnie ARM7TDMI
  • #19
    zholka
    Level 12  
    Tak chce.

    Dokladnie chce podlaczyc 2 kamery do ARMa ATMELA (sa 2 seriale + DMA).

    Ale rodzielczosc 80x60 wydaje mi sie za mala, z drugiej strony przerabianie obrazu z JPEGA nie wydaje mi sie najlepszym rozwiazaniem.


    Dlatego Pytam czy ktos sie nie spotkal (nie posiada) moze jakis bardziej szczegolwowych informacje dot tych kamer, zeby wyciagnac obraz RAW o nieco wiekszej rodzielczosci.



    Pozdrawiam,
    ZH
  • #20
    czaina
    Level 13  
    A nie jest to przypadkiem OV7635? Wygląda całkiem podobnie i ma tyle samo nóżek. http://www.premier-electric.com/files/Ovt/ds_7135_7635.pdf

    Ja się z tą kamerą poddałem już dawno. Z mojej kamery mogę wyciągnąć wprost wszystkie dane łącznie z pełnym dostępem do matrycy. Jakby ktoś nie wiedział to informuje że kamery nie mają matrycy RGB tylko RGBG.
  • #21
    czaina
    Level 13  
    Mam już pierwsze wyniki pracy.

    Odkryłem że najlepszym formatem do analizy obrazów jest HSV. H - opisuje barwę, S - nasycenia a V to jasność.

    Miałem na potrzeby sumo znaleźć krawędź ringu. Otóż okazało się że wystarczy poszukać obiektu jaśniejszego niż ...
    Efektem takiej filtracji jest obrazek linia.jpg. Jak widać pierwszy jasny obiekt patrząc od dołu to linia. Prostokąt w rogu to fragment paska kontrolnego z gradientem szarości.

    Kolejnym etapem było znalezienie przeciwnika. Można za niego uznać przerwę w wykrytej wcześniej linii lub użyć innej metody. Na początek zastosowałem linijkę laserową. Obraz robot.jpg poddałem filtracji wycinającej fragment palety H. Efektem tego jest obraz laser_H.jpg. Na wyniku dokonałem filtracji składowej S aby wykluczyć obiekty o małym nasyceniu czerwieni - brązowe paski na ringu. Na zdjęciu laser_H_S.jpg jest właściwie tylko poszarpana linia lasera.

    Dodam na koniec że jest to efekt 2 godzin pracy nad filtrami z czego większość czasu spędziłem na pisaniu algorytmu filtracji a wartości parametrów dobierałem tak na oko.
  • #23
    czaina
    Level 13  
    Wielkie dzięki! Mam tą kamerę w domu od roku. Kupiłem na allegro jakiś czas temu za śmieszne pieniądze, ale z braku manuala leży sobie. Jest to kamera z telefonu Siemens C65.

    Co do ceny i samego zakupu. Ja już kupiłem kamery C3088, są one za jakieś 50 Euro. Teraz głowię się tylko nad optymalizacją algorytmu. Promotor przekonuje mnie do użycia CMVision, ja staram się coś sam napisać.
  • #24
    zholka
    Level 12  
    JA porponuje zobaczyc choc na openCV choc to ciezko bedzie przeportowac na inne platfomy niz X86.

    No i ciezkie bedzie bez floapointa. Z tego co sledze liste dyskusyja openCV to po przeporowaniu na jakiegos ARMa face detect dla przykladu z 0.2s na pececie zmienia sie w 25 sek. co jest czasem nie do przyjecia.


    Pozdrawiam,
  • #25
    MirekCz
    Level 35  
    Bo jak ktoś nie zna architektury ARMa to ma takie wyniki.
    Ja kiedyś optymalizowałem kod pewnych panów z indii... w godzine przyśpieszyłem go 50 razy =)

    Do 99% rzeczy floating point jest zbędny.. a ponieważ ARM nie ma sprzętowej obsługi tego, to wykonywanie operacji na liczbach zmiennoprzecinkowych jest około 10x wolniejsze niż fixedpoint math. Dlatego są takie wyniki.

    Czaina: Jak potrzebujesz pomocy z optymalizacją to wrzuć mi kod na emaila lub pw. Prawdopodobnie będę miał jakieś pomysły jak to przyśpieszyć.
  • #26
    czaina
    Level 13  
    Dziękuję za propozycję. Sam też się znam trochę na optymalizacji i z chęcią się nią bawię. Zresztą o czymś muszę w pracy magisterskiej napisać :D

    Co do architektury to są faktycznie z nią problemy. Podobnie jak AVR'y ARM'y nie mają wbudowanego dzielenia. Całe niezbędne dzielenie trzeba robić software'owo. Jest to spore utrudnienie i spowolnienie działania. Dla przykładu '51 dzieli w 4 taktach procesora, a ARM średnio w 91.

    W moim przypadku (zamiana RGB -> HSV) zastąpiłem dzielenie zmiennoprzecinkowe tablicą. Tablica co prawda zajmuje 64kB, ale zwiększyła kilkukrotnie prędkość. Teraz jeszcze próbujemy podłączyć pamięć DRAM (wyjętą z SIMM'a) do ARM'a, gdyż standardowa pamięć szeregowa jest za wolna.
  • #27
    czaina
    Level 13  
    Jestem właśnie po obronie i muszę przyznać iż projekt się całkiem udał. Ocena na dyplomie to 5 :D

    Udało mi się wykonać system który jest w stanie zrobić i przeanalizować nawet 5 zdjęć na sekundę. Oprócz wykrywania białej linii, zrobiłem również wykrywanie linii laserowej. Takie zestawienie powoduje iż zawsze da się wykryć przeciwnika na ringu sumo.

    Chętnym do kontynuacji polecam lekturę mojej pracy i uniknięcie błędów które popełniłem z kolegą. Przedewszystkim nie udało nam się zbuforować obrazu, a kamery z przesłoną mechaniczną nie zdobyliśmy. Jedna z tych dwóch poprawek jest niezbędna by użyć ten system w walce sumo. Warto też dopracować balans bieli i jasności, nam na to zabrakło już czasu.

    Pozdrawiam
    Marcin.
    Attachments: