Skocz do zawartości
Elvis

Autonomiczny robot z układem wizyjnym

Pomocna odpowiedź

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Artykuł został ukończony, więc podbijam, aby inni widzieli dodaną część.

Elvis, dobra robota 😉

Może teraz, więcej początkujących zrozumie na co się porywa.

Udostępnij ten post


Link to post
Share on other sites

Wielkie brawa za chęci i za samo wykonanie 😉

Udostępnij ten post


Link to post
Share on other sites

probowales z innymi formatami wideo niz mjpg?

Udostępnij ten post


Link to post
Share on other sites

Fajna konstrukcja, jakby udało sie zrobić algorytm poprawnie wykrywający plamę światła, co jest jednak trudniejsze imo niż wykrycie linii. W ogóle to jak to obecnie sprawdzasz, liczysz jasność kawałka jako sumę wartości pikseli w RGB? Czy wykrywasz plamę analizując krawędzie?

Udostępnij ten post


Link to post
Share on other sites

Próbowałem zmusić kamerkę do generowania strumienia we wszystkich możliwych formatach - RGB, YUV, GRAY itd. Niestety zawsze wysyłany jest JPEG. Wydaje mi się, że to efekt wykorzystania pierwszej lepszej (najtańszej) kamerki jaką mieli w sklepie. Na przyszłość trzeba wybrać kamerkę, która:

1) obsługuje nieskompresowane dane

2) są do niej moduły v4l

Co do wykrywania to liczę jasność 3 obszarów - po lewej, środek i po prawej. Następnie robot stara się skierować w tę stronę, gdzie jest najjaśniej.

W teorii i na testowych obrazach wszystko działało pięknie, natomiast sam robot zachowywał się bardzo kiepsko.

Zamiast jechać do światła wolał np. telewizor w sąsiednim pokoju.

Lepiej byłoby wykrywać coś bardziej charakterystycznego - np. plamkę lasera. Niestety nie mam takiego, ale pewnie dałoby dużo lepsze efekty. Najpierw filtr na kolor czerwony, później wyszukiwanie.

Ogólnie temat jest dość trudny, najlepiej byłoby przekompilować OpenCV na ARM i zacząć zabawę z algorytmem.

Udostępnij ten post


Link to post
Share on other sites

Czyli rozumiem, że robot ma w polu widzenia nie tylko podłogę. W takim wypadku liczenie jasności raczej musi być zawodne, bo tło może być jaśniejsze w różnych miejscach, nawet bez dodatkowego oświetlenia. A może gdyby napisać algorytm, który wykrywa równy wzrost jasności w R, G i B, i obszar ograniczony w ten sposób traktuje jako plamę światła? Zapobiegło by to wykryciu jako obszaru jaśniejszego obiektu RGB(255, 255, 0) od RGB(0, 0, 255), mimo iż te obszary nie są od siebie jaśniejsze, tylko w innych kolorach.

Udostępnij ten post


Link to post
Share on other sites

Na razie największym problemem jest dekodowanie jpeg-ów. Powoduje bardzo duże opóźnienia.

Dzisiaj kupiłem inną kamerkę. Na pudełku ma napisane, że obsługuje RGB24. Co ciekawe wcale nie obsługuje...

Zamiast tego przesyła YUYV. Rozpoznawanie jasności powinno być więc łatwiejsze niż w RGB.

A co najważniejsze obraz nie jest skompresowany.

Tylko te ilości danych do przetworzenia... Bufor obrazu dla 640x480 to 600kB. Obraz pobieram w 320x240, ale to nadal 150kB na ramkę.

Udostępnij ten post


Link to post
Share on other sites

Elvis, Jaka to kamerka? Mógłbyś wrzucić przykładowy filmik nagrany tą kamerką. Dokładniej chodzi mi o to jak wyjdą poruszające się obiekty z różną prędością w różnym świetke. Machanie ręką przed kamerą z różną prędkością w różnym świetle wystarczy.

Pytam, bo za miesiąc z hakiem zaczynam budowę robota z dwiema kamerami jako jednymi sensorami (PC na pokładzie bo obliczeń bedzie sporo), a nadal nie mam wybranej kamery. Rozważałem Logitech C200.

Udostępnij ten post


Link to post
Share on other sites

Logitech-a nie polecam. Mam chyba właśnie C200 - na obudowie nie ma symbolu, ale kupowałem najtańszą.

Główna wada to przesyłanie tylko i wyłącznie w formacie JPEG. Dekodowanie tego zajmuje wieki.

Zaraz dopiszę do artykułu rezultat testu innej kamerki - jest dużo lepiej.

Udostępnij ten post


Link to post
Share on other sites

Kolejna aktualizacja w pierwszym poście.

Udostępnij ten post


Link to post
Share on other sites

Hmm, przejrzałem sobie na wiki opis tego YUV, jeśli dobrze rozumiem, to chcąc mieć obraz czarno-biały (światłolub/linefollower) wystarczy tylko sobie wyciągnąć Y? I jesteśmy wtedy pozbawieni obliczania jasności na podstawie RGB. Ale rozumiem, że art miał być jak najbardziej uniwersalny, dlatego postanowiłeś przekonwertować to na bitmapę. No a platformy rzeczywiście szkoda, bo takie jeździdełko zawsze się przydaje, serwa nie są całe? bo wyglądają na zdjęciach jak by tylko plastik przytopiło.

Udostępnij ten post


Link to post
Share on other sites

Wydaje mi się, że wyciągnięcie samego Y nie wystarczy. Niektóre przedmioty są przecież bez oświetlenia jaśniejsze niż inne, a robot ma podążać za światłem, a nie jasnymi przedmiotami. Trzeba jeszcze jakoś z innych składowych wyciągnąć informacje, czy to jasna plama na podłodze, czy inny obiekt.

Udostępnij ten post


Link to post
Share on other sites

No szkoda platformy. Dobrze, że większego pożaru nie było. Tak to jest z LiPo - lekkie, wydajne ale niebezpieczne.

Moim zdaniem z YUV można zrobić więcej niż z RGB, więc nawet lepiej ze kamerka daje YUV a nie RGB.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...