- Wymagany sprzęt:
- Wymagania programowe:
- Konfigurowanie przetwarzania na Raspberry Pi:
- Schemat obwodu:
- Program śledzenia kulek Raspberry Pi:
- Działanie robota śledzącego piłki Raspberry Pi:
Dziedzina robotyki, sztucznej inteligencji i uczenia maszynowego szybko ewoluuje, co z pewnością zmieni styl życia ludzkości w najbliższej przyszłości. Uważa się, że roboty rozumieją świat rzeczywisty i wchodzą w interakcję z nim za pomocą czujników i przetwarzania uczenia maszynowego. Rozpoznawanie obrazu jest jednym z popularnych sposobów, w jaki uważa się, że roboty rozumieją obiekty, patrząc na rzeczywisty świat przez kamerę, tak jak my. W tym projekcie wykorzystajmy moc Raspberry Pi do zbudowania robota, który będzie mógł śledzić piłkę i podążać za nią, tak jak roboty grające w piłkę.
OpenCV to bardzo znane narzędzie open source, które jest używane do przetwarzania obrazu, ale w tym samouczku, aby uprościć sprawę, używamy IDE Processing. Ponieważ przetwarzanie dla ARM udostępniło również bibliotekę GPIO do przetwarzania, nie będziemy już musieli przełączać się między Pythonem a przetwarzaniem, aby pracować z Raspberry Pi. Brzmi fajnie, prawda? Więc zacznijmy.
Wymagany sprzęt:
- Raspberry Pi
- Moduł kamery z kablem taśmowym
- Podwozie robota
- Motoreduktory z kołem
- Sterownik silnika L293D
- Power bank lub inne przenośne źródło zasilania
Wymagania programowe:
- Monitor lub inny wyświetlacz dla Raspberry pi
- Klawiatura lub mysz dla Pi
- Przetwarzanie oprogramowania ARM
Uwaga: Podczas programowania konieczne jest podłączenie wyświetlacza do Pi przewodami, ponieważ tylko wtedy można oglądać wideo z kamery
Konfigurowanie przetwarzania na Raspberry Pi:
Jak wspomniano wcześniej, będziemy używać środowiska przetwarzania do programowania naszego Raspberry Pi, a nie domyślnego sposobu korzystania z Pythona. Więc wykonaj poniższe czynności:
Krok 1: - Podłącz Raspberry Pi do monitora, klawiatury i myszy i włącz je.
Krok 2: - Upewnij się, że Pi jest podłączone do aktywnego połączenia internetowego, ponieważ zamierzamy pobrać kilka rzeczy.
Krok 3: - Kliknij Processing ARM, aby pobrać IDE przetwarzania dla Raspberry Pi. Pobieranie będzie miało postać pliku ZIP.
Krok 4: - Po pobraniu wypakuj pliki z folderu ZIP w preferowanym katalogu. Właśnie rozpakowałem go na moim pulpicie.
Krok 5: - Teraz otwórz wyodrębniony folder i kliknij plik o nazwie przetwarzanie. Powinien otworzyć okno, jak pokazano poniżej.
Krok 6: - To jest środowisko, w którym będziemy wpisywać nasze kody. Dla osób, które znają Arduino, nie zdziw się, TAK IDE wygląda podobnie do Arduino, podobnie jak program.
Krok 7: - Potrzebujemy dwóch bibliotek, aby nasz program kulkowy działał, aby zainstalować, a następnie kliknij Szkic -> Importuj bibliotekę -> Dodaj bibliotekę . Otworzy się następujące okno dialogowe.
Krok 8: - Użyj lewego górnego pola tekstowego, aby wyszukać Raspberry Pi i naciśnij Enter, wynik wyszukiwania powinien wyglądać mniej więcej tak.
Krok 9: - Wyszukaj biblioteki o nazwach „GL Video” i „Sprzętowe I / O” i kliknij zainstaluj, aby je zainstalować. Upewnij się, że zainstalowałeś obie biblioteki.
Krok 10: - W oparciu o Twój Internet instalacja zajmie kilka minut. Po zakończeniu jesteśmy gotowi do przetwarzania oprogramowania.
Schemat obwodu:
Schemat obwodu tego projektu śledzenia piłki Raspberry Pi pokazano poniżej.
Jak widać, obwód obejmuje kamerę PI, moduł Motor Driver i parę silników podłączonych do Raspberry pi. Cały obwód jest zasilany przez mobilny bank energii (reprezentowany przez baterię AAA w obwodzie powyżej).
Ponieważ szczegóły pinów nie są wymienione w Raspberry Pi, musimy zweryfikować piny za pomocą poniższego obrazu
Do napędzania silników potrzebujemy czterech pinów (A, B, A, B). Te cztery piny są połączone odpowiednio z GPIO14,4,17 i 18. Pomarańczowy i biały przewód tworzą razem połączenie dla jednego silnika. Mamy więc dwie takie pary na dwa silniki.
Silniki są podłączone do modułu sterownika silnika L293D, jak pokazano na rysunku, a moduł sterownika jest zasilany z banku mocy. Upewnij się, że masa power banku jest połączona z masą Raspberry Pi, tylko wtedy Twoje połączenie będzie działać.
To jest to, że skończyliśmy z naszym połączeniem sprzętowym, wróćmy do naszego środowiska przetwarzania i zacznijmy programować, aby nauczyć naszego robota, jak śledzić piłkę.
Program śledzenia kulek Raspberry Pi:
Kompletny program tworzenie tego projektu jest podany na końcu tej strony, która bezpośrednio wykorzystać. Poniżej, poniżej, wyjaśniłem działanie kodu, abyś mógł go użyć do innych podobnych projektów.
Koncepcja programu jest bardzo prosta. Chociaż celem projektu jest śledzenie piłki, tak naprawdę nie zamierzamy tego robić. Po prostu zidentyfikujemy piłkę na podstawie jej koloru. Jak wszyscy wiemy, filmy to nic innego jak ciągłe klatki zdjęć. Więc robimy każde zdjęcie i dzielimy je na piksele. Następnie porównujemy kolor każdego piksela z kolorem piłki; jeśli zostanie znalezione dopasowanie, możemy powiedzieć, że znaleźliśmy piłkę. Dzięki tym informacjom możemy również określić położenie piłki (kolor piksela) na ekranie. Jeśli pozycja jest daleko na lewo, przesuwamy robota w prawo, jeśli pozycja jest bardzo na prawo, przesuwamy robota w lewo, tak aby pozycja piksela zawsze pozostawała na środku ekranu. Możesz obejrzeć film Daniela Shiffmana z Computer Vision, aby uzyskać wyraźny obraz.
Jak zawsze zaczynamy od zaimportowania dwóch pobranych bibliotek. Można to zrobić za pomocą następujących dwóch wierszy. Biblioteka sprzętowych I / O jest używana do uzyskania dostępu do pinów GPIO PI bezpośrednio ze środowiska przetwarzania, biblioteka glvideo jest używana do uzyskania dostępu do modułu kamery Raspberry Pi.
import processing.io. *; import gohai.glvideo. *;
W funkcji konfiguracji inicjalizujemy piny wyjściowe, aby sterować silnikiem, a także pobieramy wideo z kamery pi i zmieniamy je w oknie o rozmiarze 320 * 240.
void setup () {size (320, 240, P2D); video = nowy GLCapture (to); video.start (); trackColor = color (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Void draw jest jak nieskończonej pętli kod wewnątrz tej pętli będzie wykonanie jak długo program jest zakończony. Jeśli dostępne jest źródło kamery, odczytujemy wychodzące z niego wideo
void draw () {background (0); if (video.available ()) {video.read (); }}
Następnie zaczynamy dzielić klatkę wideo na piksele. Każdy piksel ma wartość czerwonego, zielonego i niebieskiego. Te wartości są przechowywane w zmiennej r1, g1 i b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Jaki jest aktualny kolor color currentColor = video.pixels; float r1 = red (currentColor); float g1 = green (currentColor); float b1 = blue (currentColor);
Aby początkowo wykryć kolor piłki, musimy kliknąć kolor. Po kliknięciu kolor piłki zostanie zapisany w zmiennej o nazwie trackColour .
void mousePressed () {// Zapisz kolor w miejscu kliknięcia myszą w zmiennej trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Kiedy już mamy kolor toru i aktualny kolor, musimy je porównać. W tym porównaniu używana jest funkcja dist. Sprawdza, jak blisko jest aktualny kolor do koloru toru.
float d = dist (r1, g1, b1, r2, g2, b2);
Wartość dist będzie zero na dokładne dopasowanie. Tak więc, jeśli wartość odległości jest mniejsza niż określona wartość (rekord świata), to zakładamy, że znaleźliśmy kolor ścieżki. Następnie uzyskujemy lokalizację tego piksela i przechowujemy go w zmiennej najbliższej X i najbliższej Y, aby znaleźć położenie piłki
if (d <worldRecord) {worldRecord = d; najbliższyX = x; najbliższyY = y; }
Rysujemy również elipsę wokół znalezionego koloru, aby wskazać, że kolor został znaleziony. Wartość pozycji jest również drukowana na konsoli, to bardzo pomoże podczas debugowania.
if (worldRecord <10) {// Narysuj okrąg na śledzonym wypełnieniu pikselowym (trackColor); strokeWeight (4,0); udar (0); elipsa (najbliższyX, najbliższyY, 16, 16); println (najbliższyX, najbliższyY);
Na koniec możemy porównać położenie najbliższego X i najbliższego Y i ustawić silniki w taki sposób, aby kolor docierał do środka ekranu. Poniższy kod służy do obracania robota w prawo, ponieważ stwierdzono, że pozycja X koloru znajduje się po lewej stronie ekranu (<140)
if (najbliższyX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); opóźnienie (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Skręć w prawo"); }
Podobnie możemy sprawdzić położenie X i Y, aby sterować silnikami w wymaganym kierunku. Jak zawsze możesz zapoznać się z całym programem na dole strony.
Działanie robota śledzącego piłki Raspberry Pi:
Kiedy już będziesz gotowy ze sprzętem i programem, czas na zabawę. Zanim przetestujemy naszego bota na ziemi, powinniśmy upewnić się, że wszystko działa poprawnie. Podłącz swoje Pi do monitora i uruchom kod przetwarzający. Powinieneś zobaczyć kanał wideo w małym oknie. Teraz umieść piłkę w ramie i kliknij ją, aby nauczyć robota, że powinien śledzić ten konkretny kolor. Teraz przesuń piłkę po ekranie, a powinieneś zauważyć obracające się koła.
Jeśli wszystko działa zgodnie z oczekiwaniami, wypuść bota na ziemię i zacznij się nim bawić. Upewnij się, że pomieszczenie jest równomiernie oświetlone, aby uzyskać najlepsze rezultaty. Pełne działanie projektu pokazano na poniższym filmie. Mam nadzieję, że zrozumiałeś projekt i podobało Ci się budowanie czegoś podobnego. Jeśli masz jakiekolwiek problemy, możesz je opublikować w sekcji komentarzy poniżej lub pomóc.