Często zadawane pytania#
Jakie są różnice między CMUcam1 a CMUcam2?#
Wprowadzenie#
CMUcam2 zawiera całą funkcjonalność CMUcam1 w ulepszonej formie i wiele więcej. Poniżej pokrótce opisujemy nową funkcjonalność i różnice. Możesz również zajrzeć do odpowiedzi na pytanie, jak zdecydować, czy kupić CMUcam1 czy CMUcam2.
Przegląd sprzętu#
Istnieją dwie główne różnice sprzętowe, które są ważne: CMUcam2 używa innego procesora niż CMUcam1, a CMUcam2 zawiera układ bufora klatki, podczas gdy CMUcam1 nie.
CMUcam2 używa procesora SX52, a CMUcam1 używa procesora SX28, oba z serii procesorów SX firmy Ubicom. W obu przypadkach procesor pracuje z częstotliwością 75 MHz, więc nie ma różnicy w szybkości procesora ani mocy obliczeniowej. Zaletami procesora SX52 są to, że ma więcej pamięci RAM (262 wobec 136 bajtów), więcej pamięci ROM (4096 wobec 2048 słów) i więcej pinów I/O. Więcej pamięci RAM i ROM oznaczało, że mogliśmy napisać bardziej złożony kod, co pozwoliło nam włączyć więcej funkcjonalności do CMUcam2. Większa liczba pinów I/O oznaczała, że zostało nam więcej pinów na inne funkcje – jak więcej serw, więcej zworek konfiguracyjnych itp.
Dużą różnicą między tymi dwoma systemami jest to, że CMUcam2 zawiera układ bufora klatki AL422B firmy AverLogic, a CMUcam1 nie. Pozwala to sprzętowi CMUcam2 szybko przechwycić pojedynczą kompletną klatkę i zapisać ją w pamięci bufora klatki. Ma to szereg zalet:
Bardziej złożone przetwarzanie. W CMUcam1 procesor musiał przetwarzać strumień danych pikseli w locie, w miarę jak był on wysyłany przez moduł kamery. Ta konstrukcja pomogła zmniejszyć złożoność i koszt sprzętu systemu. Ograniczała jednak złożoność przetwarzania, ponieważ musiało być ono wykonywane w czasie rzeczywistym pomiędzy pikselami lub pomiędzy wierszami obrazu. Ponieważ procesor w CMUcam2 uzyskuje dostęp do danych pikseli z bufora klatki we własnym tempie, może wykonywać bardziej złożone przetwarzanie na piksel.
Szybsze przetwarzanie. Odwrotną stroną braku konieczności utrzymywania synchronizacji ze strumieniem pikseli modułu kamery jest to, że procesor nie musi czekać na moduł kamery, gdy potrzebuje danych pikseli. Wyeliminowanie tego czasu oczekiwania oznacza, że procesor CMUcam2 może faktycznie przetworzyć klatkę szybciej niż CMUcam1, mimo że procesor nie jest bardziej wydajny.
Wiele operacji na klatkę. Ponieważ obraz przechowywany w buforze klatki nie zmienia się, CMUcam2 może wykonać wiele operacji na pojedynczej klatce. Na przykład można wykryć ruch, obliczyć statystyki obszaru i śledzić wiele kolorów - wszystko na jednej klatce.
Lepsze zrzuty klatek. Ponieważ CMUcam1 musiał synchronizować przesyłane dane zrzutu klatki ze strumieniem danych modułu kamery, mógł wysyłać tylko jedną kolumnę danych na klatkę kamery. Oznaczało to, że różne części obrazu były rejestrowane w różnych momentach, więc szybko poruszające się obiekty były rozmazywane w zrzutach klatek CMUcam1. Ponieważ CMUcam2 przesyła obraz ze stałych danych w buforze klatki, nie stanowi to już problemu.
Lepsza obsługa niższych szybkości transmisji. Posiadanie bufora klatki oznacza również, że taktowanie danych przesyłanych przez CMUcam2 może być całkowicie oddzielone od taktowania danych odczytywanych z modułu kamery. Oznacza to, że dane CMUcam2 ze zrzutów klatek i trybów linii bitmapowej nie zmieniają się, gdy zmienia się szybkość transmisji komunikacji; CMUcam2 przekaże procesorowi hosta te same dane klatki lub bitmapy niezależnie od szybkości transmisji. Jednak liczba klatek przetwarzanych na sekundę może się nadal zmieniać przy niższych szybkościach transmisji, ponieważ musi ostatecznie zakończyć wysyłanie wszystkich danych z jednej klatki, zanim będzie można przetworzyć następne.
Lepsze działanie modułu kamery. Aby procesor w CMUcam1 mógł pozostać zsynchronizowany ze strumieniem danych z modułu kamery, częstotliwość klatek modułu kamery trzeba było spowolnić do 17 kl./s. Bufor klatki, którego używa CMUcam2, pozwala nam obsługiwać moduł kamery z pełną szybkością klatek. Jedną z zalet tego rozwiązania jest to, że automatyczna regulacja ekspozycji i balansu bieli kamery może działać szybciej, ponieważ może dokonać tylko jednej regulacji na klatkę, a teraz jest więcej klatek na sekundę. Drugą zaletą jest to, że czarno-białe analogowe wyjście wideo (które działa tylko wtedy, gdy moduł pracuje z pełną częstotliwością klatek) może być używane, podczas gdy CMUcam2 przetwarza dane obrazu, co nie było możliwe w przypadku CMUcam1.
Przegląd funkcjonalności#
CMUcam2 implementuje całą funkcjonalność CMUcam1, a także dodaje wiele nowej funkcjonalności. Poniżej znajduje się podsumowanie.
Śledzenie kolorów. CMUcam2 implementuje śledzenie kolorów tak samo jak CMUcam1. Podobnie jak w CMUcam1, zaimplementowano opcjonalny tryb linii bitmapowej, który przesyła bitmapę śledzonych pikseli. Wprowadzono również pewne ulepszenia. Istnieje nowy opcjonalny tryb linii, który dostarcza statystyki śledzonych pikseli dla każdego wiersza, w tym średnie, minimalne i maksymalne pozycje śledzonych pikseli. Jest to bardzo przydatne do podążania za linią. Istnieje również nowy opcjonalny tryb, w którym interpretacja granic śledzenia może zostać odwrócona. W tym trybie piksele poza granicami śledzenia są uważane za „dobre”. Jest to przydatne do śledzenia obiektu na jednorodnym tle – pomyśl o efektach specjalnych z niebieskim ekranem. Jest to również przydatne do wykrywania krawędzi, gdy włączone jest różnicowanie pikseli (opisane poniżej). Ulepszono również opcję filtrowania szumów, aby umożliwić regulację stopnia filtrowania w sytuacjach z dużym szumem.
Statystyki obrazu. CMUcam2 implementuje obliczanie statystyk średniej i wariancji obszarów obrazu tak samo jak CMUcam1. Podobnie jak w CMUcam1, zaimplementowano opcjonalny tryb linii, który przesyła średnią każdej linii obrazu. Istnieje również nowy, ulepszony tryb linii, który opcjonalnie zawiera informacje o wariancji dla każdej linii z osobna.
Wykrywanie ruchu. Całkowicie nowe w CMUcam2 są polecenia wykrywania ruchu (różnicowania klatek). Poleceń tych można używać, aby polecić CMUam2 przechwycenie wersji bieżącego obrazu w niskiej rozdzielczości i ciągłe porównywanie jej z nowo napływającymi obrazami. Pakiety z CMUcam2 zgłaszają, czy jakakolwiek część obrazu zmienia się bardziej niż o określoną wartość, co potencjalnie wskazywałoby na ruch. Pakiety te mogą opisywać środek ciężkości i zasięg zmienionych bloków obrazu lub dostarczać bitmapę wskazującą, które bloki obrazu uległy zmianie. Ten tryb można również połączyć z różnicowaniem pikseli (opisanym poniżej), aby uczynić wykrywanie ruchu bardziej odpornym na zmiany oświetlenia.
Histogramowanie. Całkowicie nowe w CMUcam2 są polecenia obliczania histogramu. Poleceń tych można używać do przechwytywania jednowymiarowego histogramu pojedynczego kanału koloru o rozdzielczości do 28 przedziałów (bins). Histogramy dostarczają przydatnych informacji, które podsumowują wygląd obrazu. Przy dodatkowym oprogramowaniu na procesorze hosta informacje te mogą pomóc w wykrywaniu przeszkód, konkretnych obiektów lub lokalizacji.
Okienkowanie obrazu. CMUcam2 implementuje możliwość ograniczenia przetwarzania do małego obszaru (podokna) pełnego obrazu, tak samo jak CMUcam1. W CMUcam2 funkcja ta jest jeszcze bardziej przydatna, ponieważ można jej użyć do dokładnego zbadania podokien pojedynczego obrazu przechowywanego w buforze klatki. Ponadto zmniejszenie pionowego rozmiaru okna można wykorzystać do znacznego zwiększenia liczby klatek przetwarzanych na sekundę poprzez znaczne zmniejszenie liczby pikseli, które muszą być przetworzone przez CMUcam2.
Dostosowywanie pakietów wyjściowych. CMUcam2 implementuje znacznie bardziej elastyczne dostosowywanie pakietów niż CMUcam1. Istnieją polecenia, które pozwalają użytkownikowi dostosować każdy pakiet generowany przez każde polecenie tak, aby zwracał tylko wartości potrzebne do konkretnej aplikacji. W wielu sytuacjach może to znacznie zmniejszyć ilość danych przesyłanych do procesora hosta i przez niego przetwarzanych.
Różnicowanie pikseli. Całkowicie nowy w CMUcam2 jest opcjonalny tryb różnicowania pikseli. W trybie różnicowania pikseli piksele są wstępnie przetwarzane, zanim zostaną przekazane do reszty kodu CMUcam2. Ten etap wstępnego przetwarzania wysyła do reszty kodu nowe wartości pikseli, które są różnicą między bieżącą wartością piksela a poprzednią. Zasadniczo powoduje to odfiltrowanie wszystkiego z wyjątkiem pionowych krawędzi w obrazie. Jest to bardzo potężna operacja, która przy dodatkowym oprogramowaniu na procesorze hosta może pomóc w wykrywaniu przeszkód i podążaniu za linią.
Zmniejszanie próbkowania (Down Sampling). Całkowicie nowy w CMUcam2 jest opcjonalny tryb zmniejszania próbkowania. W trybie zmniejszania próbkowania oprogramowanie CMUcam2 redukuje rozdzielczość obrazu z kamery przed jego przetworzeniem. Zaletą tego jest to, że jest znacznie mniej pikseli do przetworzenia i przesłania. Ponieważ odbywa się to w oprogramowaniu, zmniejszanie próbkowania powoduje tylko bardzo niewielki wzrost szybkości przetwarzania. Główną korzyścią jest zmniejszenie ilości przesyłanych danych. W przypadku zrzuconej klatki obrazu zmniejszanie próbkowania może z łatwością zredukować rozmiar danych, a tym samym skrócić czas transmisji o czynnik 2, 4 lub więcej. Podobnie, gdy używane są tryby linii bitmapowej, rozmiar obrazu bitmapowego może być znacznie zmniejszony, co zmniejsza ilość danych, które procesor hosta musi odebrać i przetworzyć.
Sterowanie serwem. Oryginalny CMUcam1 obsługiwał tylko jedno serwo, a serwo to działało poprawnie tylko przy określonych szybkościach transmisji i gdy CMUcam1 był w trybie strumieniowym. CMUcam2 obsługuje do pięciu serw. Kod kontrolera serwa w CMUcam2 jest zaimplementowany jako proces działający w tle, dzięki czemu wyjścia serw zawsze pozostają stabilne i można go używać tak, jak każdego innego kontrolera serw. Dodatkowo CMUcam2 można skonfigurować tak, aby automatycznie sterował serwami obrotu (pan) i pochylenia (tilt). W tym trybie CMUcam2 będzie aktualizować pozycje serw za każdym razem, gdy otrzyma polecenie obliczenia danych śledzenia kolorów.
Oszczędzanie energii. Całkowicie nowe w CMUcam2 są tryby oszczędzania energii. W niektórych zastosowaniach CMUcam2 nie musi w sposób ciągły przetwarzać danych obrazu. W takich przypadkach można polecić CMUcam2 przejście w różne tryby wyłączenia zasilania (lub uśpienia). Gdy CMUcam2 znajduje się w jednym z tych trybów, nie są wykonywane żadne polecenia śledzenia ani sterowania serwem. Wysłanie prostego polecenia szeregowego wybudza kamerę w ciągu kilku milisekund.
Jaka jest różnica między używaniem modułu OV6620 a OV7620 z CMUcam2?#
Wprowadzenie#
Pod względem możliwości czujnik OV7620 jest czujnikiem o wyższej rozdzielczości (664x492 surowych lokalizacji czujnika) niż czujnik OV6620 (356x292 surowych lokalizacji czujnika). Ale fakt ten ma bardzo niewiele wspólnego z kwestiami, które pojawiają się przy rozważaniu, który z tych czujników najlepiej pasuje do Twojego zastosowania CMUcam2. Poniżej znajduje się lista kwestii do rozważenia.
Rozdzielczość#
Chociaż prawdą jest, że czujnik OV7620 jest czujnikiem o wyższej rozdzielczości niż OV6620, ze względu na stały rozmiar pamięci bufora klatki CMUcam2, CMUcam2 obsługuje tylko jedną rozdzielczość 160x239 dla czujnika OV7620. CMUcam2 obsługuje tryb niskiej rozdzielczości 88x143 i tryb wysokiej rozdzielczości 176x255 dla czujnika OV6620. Więc używając OV6620 w trybie wysokiej rozdzielczości można faktycznie osiągnąć działanie w wyższej rozdzielczości niż tryb pojedynczej rozdzielczości dostępny dla czujnika OV7620.
Częstotliwość klatek#
Kolejną kwestią związaną z rozdzielczością jest maksymalna częstotliwość klatek podczas ciągłego przetwarzania strumienia obrazów. Im niższa rozdzielczość, tym mniej pikseli wymaga przetworzenia i tym wyższa jest osiągalna częstotliwość klatek. Chociaż wzrost częstotliwości klatek można osiągnąć poprzez zmianę współczynnika zmniejszania próbkowania i rozmiaru okna wirtualnego, faktyczna liczba pikseli wysyłanych przez czujnik ma znacznie większy wpływ. Z tego powodu CMUcam2 może osiągnąć znacznie wyższą częstotliwość klatek, gdy OV6620 działa w trybie niskiej rozdzielczości, niż w trybie pojedynczej rozdzielczości dostępnym dla OV7620.
Analogowe wyjście wideo#
Kolejną różnicą między tymi dwoma czujnikami jest format analogowego wyjścia wideo obu czujników. Czujnik OV6620 wysyła sygnał w analogowym formacie PAL, a czujnik OV7620 w analogowym formacie NTSC. W obu przypadkach sygnał wyjściowy jest czarno-biały.
Ważne jest, aby zauważyć, że w większości zastosowań CMUcam2 wyjście analogowe nie będzie używane. W typowym zastosowaniu wyniki przetwarzania obrazu lub surowe piksele są przesyłane cyfrowo przez port szeregowy do komputera hosta lub mikrokontrolera, więc nie stanowi to problemu. Jednak jeśli ważne jest wideo czarno-białe na żywo, możesz chcieć wziąć pod uwagę format analogowego wyjścia wideo.
Podsumowanie#
Zalecamy, aby moduł OV6620 był najlepszym wyborem dla niemal wszystkich zastosowań, zwłaszcza biorąc pod uwagę jego niższy koszt i szybszy czas przetwarzania osiągalny z tym modułem. W rzadkich zastosowaniach, w których wymagane jest monochromatyczne analogowe wyjście wideo NTSC, możesz rozważyć OV7620.
Czy są jakieś znane problemy z obecnymi wydaniami firmware CMUcam2?#
Tak. W wydaniu 1.00 polecenie „RM” (Raw Mode) nie działało poprawnie. Wydanie 1.01 rozwiązuje ten problem.
Firmware w CMUcam2 można aktualizować, ale do tego potrzebny jest programator SX-Key (lub kompatybilny). Pliki „hex” z obrazami ROM są dostępne na stronie Pliki do pobrania.