Skocz do zawartości

Linefollower z kamerką


Pomocna odpowiedź

Tak tylko tu chodzi o to by to dzialalo bez jakichs mega osiagow. W zasadzie nie patrzylem na te plytke, popatrze i moze cos z tego wyjdzie. W sumie drozsza wiele nie jest

Co do czasu przetwarzania, to na razie uruchomiłem kod przeniesiony z PC, bez jakiejkolwiek optymalizacji. Jestem chwilowo na krótkim urlopie, więc do tematu wrócę od przyszłego tygodnia. Ale o ile pamiętam przetwarzanie jak opisane na początku, czyli pobranie obrazu, zamiana na grayscale, filtr i przeliczanie perspektywy, zajmuje jakieś 200-250ms. Pewnie można byłoby sporo zejść z czasem, ale zakładam, że w przypadku linefollowera, trzeba będzie użyć innych algorytmów. Co do micormouse, nadal liczę, że opencv może dać radę 🙂 Jak nie, to zostanie procek nvidii - tylko żeby ta płytka była mniejsza...

Wystarczy zmniejszyć rozdzielczość o połowę (a w pionie pewnie spokojnie można więcej, bo większość obrazu nie obejmuje trasy) i czas spadnie liniowo, więc przy 1/4 rozdzielczości masz już tylko ok. 50ms co zaczyna być przyzwoitym rezultatem ( resztę "dorobisz" innymi metodami - obraz ma w końcu tylko dać informacje o drodze, a nie na bieżąco wprowadzać korekcję)

Rozdzielczosc juz jest zmniejszona. Zaczynalem od 640x480, ale rezultaty byly bardzo marne. Pewnie 160x120 bedzie wstarczajace. Jest jeszcze jedna mozliwosc przyspieszenia obliczen. Kamerke mozna przelaczyc z trybu RGB na YUV, wtedy odchodzi przeliczanie na skale szarosci. Do tego linefollower nie wymaga analizy calego obrazu. Ogolnie jestem optymista co do mozliwosci uzycia kamery, ale zobaczymy co z tego wyjdzie.

Nie potrzebujesz nawet tego zmieniać, możesz po prostu brać tylko kanał G z kamery i też powinno być ok na czarno-białym tle 🙂

Z drugiej strony dla np. line-followera nie wiem czy jest sens przeliczania perspektywy dla całego obrazu. Wystarczy wiedzieć gdzie jest droga na obrazie i przeliczyć tylko ją wg. wzoru na perspektywę na odpowiednie odległości. Szkoda tracić czasu z przeliczaniem całego obrazu (chyba, że masz do tego GPU i zrobi to praktycznie za darmo).

Ciekawy pomysł z wykorzystaniem jednego kanału. Jakoś zafiksowałem się na poziomy jasności. A niestety nie wszystkie kamerki obsługują tryb YUV - chyba ze 3 kupiłem zanim udało mi się trafić na odpowiednią. W sumie czarna trasa na białym tle powinna być widoczna na dowolnym kanale.

Z perspektywą to myślałem bardziej o micromouse, w przypadku linefollowera, chyba będę używał innych opcji. Nawet z opencv raczej zrezygnuję, albo wykorzystam mnimalnie.

  • 2 tygodnie później...

Do podobnych wniosków doszedłem odnośnie kamerki i linuxa. W przypadku linefollowera nie ma sensu ani czasu na OpenCV i skomplikowane przetwarzanie. Zamiast tego będzie odczyt wybranych punktów i traktowanie ich jako odczytów trasy z wyprzedzeniem.

Za to nadal liczę na zastosowanie OpenCV w micromouse.

Co do prac, to aktualnie zajęłem się "mechaniką" - do prototypowania potrzebuję kamerki zamocowanej na korpusie robota i zdjęć "realnej" trasy. Postanowiłem na początek wykorzystać gotowe komponenty - robot 3pi będzie działał jako "niskopoziomowy" linefollower, nad nim (dosłownie) chcę zamocować płytkę BeagleBone z linuxem oraz podłączoną kamerką. W pierwszej kolejności wykorzystam dwa niezależne procesory (atmega na 3pi oraz cortex-a8 na bb), ale później spróbuję zrezygnować z atmegi i zostawić tylko arm-a.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...