Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Robot Line Follower na Raspberry Pi + kamerka

Piroman1024 13 Nov 2017 13:07 3510 8
Wago
  • Witam!
    Jakiś czas temu popełniłem robota typu Line Follower, zdaję sobie sprawę że takich konstrukcji jest multum ale ten akurat bazuje na analizie obrazu wideo z kamerki.
    Robot posiada prostą konstrukcję, mianowicie podstawę stanowi sklejka 6mm, na której umieszczone są powerbank oraz dwa silniki z przekładniami stanowiące napęd, na powerbanku zaś umieściłem raspberryPi z kamerką.
    Całość skleiłem klejem z pistoletu oraz połączyłem opaskami zaciskowymi :D
    Co tu dużo mówić, na zamieszczonych zdjęciach wszystko widać:
    Robot Line Follower na Raspberry Pi + kamerka
    Robot Line Follower na Raspberry Pi + kamerka
    Robot Line Follower na Raspberry Pi + kamerka
    Robot Line Follower na Raspberry Pi + kamerka
    W projekcie wykorzystałem Raspberry Pi 3B, kamerkę PiCamera, sterownik dwóch silników oraz powerbank jako zasilanie całego układu. Nie będe rysował schematu gdzyż połączenie jest trywialnie proste.
    Algorytm wykorzystany w projekcie działa następująco:
    1.Akwizycja obrazu
    2.Przycięcie kadru
    3.Konwersja kadru do odcieni szarości
    4.Konwersja kadru z użyciem algorytmu Gaussian Blur
    5.Konwersja kadru do obrazu czarno białego z użyciem tzw.wyzwalania(tresholding)
    6.Inwersja kadru
    7.Szukanie największego konturu w kadrze
    -Jeżeli kontur jest z lewej strony uruchom prawy silnik
    -Jeżeli kontur jest z prawej strony uruchom lewy silnik inaczej jedź prosto
    8.Leć do punktu pierfszego :D

    Program napisałem w Pythonie z użyciem biblioteki OpenCV.
    Myślę że każdy z tymi informacja przy odrobinie wysiłku będzie w stanie zbudować takiego robota.
    Jeździ toto tak:










    Pozdrawiam
    Grzesiek

    Cool? Ranking DIY
    Do you have a problem with Raspberry? Ask question. Visit our forum Raspberry.
    About Author
    Piroman1024
    Level 17  
    Offline 
    Piroman1024 wrote 171 posts with rating 17, helped 18 times. Been with us since 2004 year.
  • Wago
  • #2
    szymon122
    Level 38  
    Piroman1024 wrote:
    4.Konwersja kadru z użyciem algorytmu Gaussian Blur
    5.Konwersja kadru do obrazu czarno białego z użyciem tzw.wyzwalania(tresholding)
    6.Inwersja kadru

    Mogę prosić o omówienie tych trzech kroków? Najlepiej z przykładową klatką przed krokiem 4, po nim, po kroku 5 i 6.

    Jakie jest użycie zasobów RPi w trakcie analizy obrazu? Czy RPi zero będzie wystarczające do tego celu? Czy kamera usb również się sprawdzi w tym celu?
    Powiedz coś więcej na temat sterownika silników.
  • #3
    Piroman1024
    Level 17  
    szymon122 wrote:
    Piroman1024 wrote:
    4.Konwersja kadru z użyciem algorytmu Gaussian Blur
    5.Konwersja kadru do obrazu czarno białego z użyciem tzw.wyzwalania(tresholding)
    6.Inwersja kadru

    Mogę prosić o omówienie tych trzech kroków? Najlepiej z przykładową klatką przed krokiem 4, po nim, po kroku 5 i 6.

    Jakie jest użycie zasobów RPi w trakcie analizy obrazu? Czy RPi zero będzie wystarczające do tego celu? Czy kamera usb również się sprawdzi w tym celu?
    Powiedz coś więcej na temat sterownika silników.


    Czołem!
    Nie ma co tu omawiać, każdy z tych kroków to oddzielna instrukcja biblioteki OpenCV, tylko parametry trzeba odpowiednie podać.
    Na zamieszczonym obrazku widać te klatki o które prosiłeś(są po kolei).
    Robot Line Follower na Raspberry Pi + kamerka

    Zużycie procesora to jakieś 4-7% więc być może raspberry Pi Zero wystarczy.
    Testowałem kamerkę USB ale w moim mniemaniu była zbyt wolna.
    Sterownik silników to jakiś kupiony na Allegro noname, miał jeden parametr podany - prąd do 0.8A na silnik.

    Pozdrawiam
    Grzesiek
  • Wago
  • #6
    karol9966
    Level 10  
    Masz rację, że robotów typu line follower jest bardzo dużo, tylko, że ogólny poziom tychże robotów jest bardzo niski. Od kilku lat stoi to w miejscu, konstrukcje są kopiowane jeden od drugiego, żadna nie wnosi nic nowego. Podobnie jest z Twoją konstrukcją. Robota line follower bazującego na odczytach z kamery widziałem już kilkanaście lat temu i jeździł podobnie jak Twój teraz. Mówisz, że RPI Zero do tego celu wystarczy, jednocześnie pisząc, że zużywa 4-7% sprzętu. Jeżeli jeździ tak jak jeździ, zużywa niecałe 10% procesora i Ty mówisz, że RPI Zero wystarczy, no to gdzieś tu jest jakiś błąd, bo jeździ fatalnie, nie ma co się oszukiwać. Przysiądź do tego porządniej, pomyśl jak to zrobić lepiej, zrób konstrukcję dorównującą chociaż robotom bazującym na transoptorach odbiciowych i wtedy pochwal się. Kamera w line followerze to duży potencjał, bo moglibyśmy przewidywać trasę i przez to lepiej na nią reagować. W wersji, którą wrzuciłeś nie widzę nic ciekawego a ni odkrywczego ot kolejny line follower z kamerą, który kompletnie sobie z tą linią nie radzi. :)
  • #7
    Piroman1024
    Level 17  
    Dzięki za konstruktywne uwagi!
    karol9966 wrote:
    Mówisz, że RPI Zero do tego celu wystarczy, jednocześnie pisząc, że zużywa 4-7% sprzętu. Jeżeli jeździ tak jak jeździ, zużywa niecałe 10% procesora i Ty mówisz, że RPI Zero wystarczy, no to gdzieś tu jest jakiś błąd, bo jeździ fatalnie, nie ma co się oszukiwać.


    Nie sprawdzałem tego empirycznie ale Rpi Zeroz z moim programem, wedle moich szacunków powinno wystarczyć aby robot zasuwał tak samo prędko. A że porusza się powoli według Ciebie to już inna historia..

    karol9966 wrote:
    Przysiądź do tego porządniej, pomyśl jak to zrobić lepiej, zrób konstrukcję dorównującą chociaż robotom bazującym na transoptorach odbiciowych i wtedy pochwal się.


    Tak się składa że skleciłem wcześniej LineFollowera na transoptorach odbiciowych i jak na prowizoryczny napęd zasuwał dosyć szybko, mógłby o wiele szybciej ale zmajstrowałem go w trzy godzinki...



    Przydałby się żeby nie wlókł za sobą ciężkiej baterii i więcej transoptorów by się przydało ale zrobiony był z części które były po ręką.
    Robot z PICamerką, a tym bardziej z kamerką na USB ze względu na ich dużą bezwładność nigdy nie będzie zasuwał tak szybko jak na transoptorach odbiciowych, nie masz pojęcia o czym mówisz.


    karol9966 wrote:
    Kamera w line followerze to duży potencjał, bo moglibyśmy przewidywać trasę i przez to lepiej na nią reagować. W wersji, którą wrzuciłeś nie widzę nic ciekawego a ni odkrywczego ot kolejny line follower z kamerą, który kompletnie sobie z tą linią nie radzi. :)


    Mój robot odbiera dane z kamerki z maksymalną jej prędkością to jest 60klatek/s i zużywa przy tym zaledwie 7% mocy procesora , próbowałem robić znany myk z drugim wątkiem obsługującym wyłącznie kamerkę i wówczas niby osiągałem ponad 100klatek/s ale robot najzwyczajniej gubił się, te dane były poprostu przekłamane.
    Na prędkość robota mają wpływ takie czynniki jak kontrast pomiędzy kolorem lini po której jeździ a tłem - mój jeździ po kolorowych panelach i to jest problematyczne, na białym tle mógłby zasuwać znacznie szybciej(próbowałem).
    Drugim problemem jest bezwładność samego robota, jest dosyć ciężki z powodu ciężkiego powebanku ale tylko takie powerbanki mają wyjście 2.1A ,a tyle potrzeba by zasilić Rpi 3B oraz silniki napędowe.
    Trzeci czynnik to napęd, zastosowałem pierwsze z brzegu koła z przekładniami jakie miałem pod ręką i na nich szybko się nie pojedzie(zbyt duża przekładnia) - nadają się bardziej do dźwigania ciężkich konstrukcji , a moja jest ciężka.
    Jest też pewien problem z drganiem kamerki oraz ze zmiennymi warunkami oświetleniowymi które w jakimś stopniu i tak mój program kompensuje.
    Zgodzę się z tym że mojego robota można przyspieszyć ale nie lepszym kodem ,a w/w sposobami.
  • #8
    wesoly wymiatacz
    Level 10  
    Gratuluję udanej konstrukcji. Ja line follower'a na RPi widzę po raz pierwszy. Pomysł z kamerką jest bardzo ciekawy i w dalszym rozwoju daje wiele możliwości. Nie myślałeś nad redukcją wagi tegoż robota, np. zastąpienie sklejki czymś lżejszym?