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

Budowa autonomicznego systemu wizyjnego robota Sumo z CmuCam2 i ARM7

czaina 29 Kwi 2006 13:31 9023 26
  • #1 2573600
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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.
  • #2 2573795
    wlamywacz2004
    Poziom 17  
    Posty: 279
    Pomógł: 10
    Ocena: 1
    Możesz napisać co już macie? Jakieś testy robiliście?
  • #3 2573945
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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.
  • #4 2573959
    wlamywacz2004
    Poziom 17  
    Posty: 279
    Pomógł: 10
    Ocena: 1
    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 2574217
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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 2574604
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    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 2575076
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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.
    Załączniki:
    • Budowa autonomicznego systemu wizyjnego robota Sumo z CmuCam2 i ARM7 4_.jpg (63.93 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Budowa autonomicznego systemu wizyjnego robota Sumo z CmuCam2 i ARM7 Plik08.jpg (51.43 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #8 2581221
    zholka
    Poziom 12  
    Posty: 47
    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 2581586
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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 2586100
    Paweł Es.
    VIP Zasłużony dla elektroda
    Posty: 6981
    Pomógł: 1236
    Ocena: 693
    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 2588744
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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 2606869
    zholka
    Poziom 12  
    Posty: 47
    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 2607080
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    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 2607682
    adammruk
    Poziom 16  
    Posty: 264
    Pomógł: 6
    Ocena: 2
    Jak podłączyłeś kamerkę do atmegi?Jakiś schemacik by pomógł i jaki program załadowany do mikrokontrolera?
  • #17 2623279
    zholka
    Poziom 12  
    Posty: 47
    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 2623641
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    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 2625003
    zholka
    Poziom 12  
    Posty: 47
    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 2625721
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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 2639984
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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.
    Załączniki:
    • Budowa autonomicznego systemu wizyjnego robota Sumo z CmuCam2 i ARM7 robot.jpg (69.7 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Budowa autonomicznego systemu wizyjnego robota Sumo z CmuCam2 i ARM7 linia.jpg (7.69 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Budowa autonomicznego systemu wizyjnego robota Sumo z CmuCam2 i ARM7 laser_H.jpg (19.75 KB) Musisz być zalogowany, aby pobrać ten załącznik.
    • Budowa autonomicznego systemu wizyjnego robota Sumo z CmuCam2 i ARM7 laser_H_S.jpg (2.23 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #22 2690112
    Tawez
    Poziom 18  
    Posty: 265
    Pomógł: 19
    Ocena: 5
    sorry czaina, ze nie w 100% na temat,
    ale troche tu bylo o kamerkach.

    jakis czas temu znalazlem cos takiego:
    http://www.maritex.com.pl/offer.php?bnr=3&nr=9435&pid=8384&lang=PL

    troche to zblizone do kamer z telefonów SE 630 bodaj (z dokładnością do rozdzielczości.
    Cena nie jest dla amatora, ale jak się bawic profesionalnie to czemu nie...
  • #23 2691591
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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 2691999
    zholka
    Poziom 12  
    Posty: 47
    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 2692082
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    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 2692577
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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 3354383
    czaina
    Poziom 14  
    Posty: 89
    Pomógł: 2
    Ocena: 3
    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.
    Załączniki:
    • Praca Magisterska_.pdf (4 MB) Musisz być zalogowany, aby pobrać ten załącznik.

Podsumowanie tematu

✨ Projekt autonomicznego systemu wizyjnego robota Sumo opiera się na kamerze CmuCam2 i procesorze ARM7. Celem jest wykrywanie przeciwnika o nieznanym kolorze i kształcie na ringu oraz orientacja robota względem linii krańcowej. Wstępna filtracja obrazu musi być dostosowana do specyfiki kamery, a do analizy obrazu stosowano m.in. metodę K-means, jednak jej szybkość była niewystarczająca. Poszukiwano szybkich algorytmów wykrywania krawędzi oraz rozważano wykorzystanie kamery ADNS-1610 z myszek optycznych do detekcji ruchu zamiast koloru. CmuCam2 oferuje wyjście równoległe i sterowanie I2C, umożliwiając dostęp do różnych formatów obrazu (CCIR601, CCIR656, YCrCb, RGB). Prędkość analizy obrazu na poziomie 1 klatki na sekundę była celem minimalnym. Dyskutowano także o alternatywnych kamerach, np. GameBoy Camera, MCA-25, czy kamery z telefonów Siemens C65 i C3088, z uwzględnieniem ograniczeń rozdzielczości i formatu JPEG. Problemy z wydajnością na procesorach ARM7 i AVR, zwłaszcza brak sprzętowego dzielenia i obsługi zmiennoprzecinkowej, wymagały optymalizacji kodu, m.in. przez zastąpienie dzielenia tablicami. W końcowej fazie projektu zastosowano analizę obrazu w przestrzeni HSV do wykrywania linii ringu i przeciwnika, wykorzystując filtrację barwy i nasycenia. System osiągnął prędkość analizy do 5 klatek na sekundę, jednak brak buforowania obrazu i mechanicznej przesłony kamery ograniczał zastosowanie w walce. Zalecane są dalsze prace nad balansem bieli, jasnością oraz poprawą sprzętową i programową systemu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA