Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Wprowadzenie
- Krok 2: Materiały i oprogramowanie użyte w tym projekcie
- Krok 3: Co robić?
- Krok 4: Schematy
- Krok 5: Jak to zrobić?
- Krok 6: Pseudo-kod
- Krok 7: Kod
- Krok 8: Linki zewnętrzne
Wideo: Robot śledzący piłkę: 8 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
W tym miejscu opowiem, jak zrobić robota śledzącego piłkę, który będzie identyfikował piłkę i podążał za nią. Jest to w zasadzie zautomatyzowana technika nadzoru, którą można wykorzystać we współczesnym świecie. Więc po prostu wskoczmy i zacznijmy budować…
UWAGA: To zadanie częściowe przesłane do Deakin University, School of IT, SIT-210 Embedded Systems Development
Kieszonkowe dzieci
www.hackster.io/junejarohan/ball-tracking-robot-7a9865
Krok 1: Wprowadzenie
Dzisiejszy nadzór ma poważną wadę, ponieważ opiera się na zaangażowaniu ludzi, których, jak wszyscy wiemy, można łatwo odwrócić, dlatego niezwykle ważne było dla nas odkrycie systemu, który może monitorować regiony w sposób autonomiczny i ciągły. A także chcemy identyfikować nieprzyjemne lub niechciane rzeczy i zagrożenia, jednocześnie podejmując decyzje i odpowiednio na nie reagować. Tak więc śledzenie obiektów za pomocą inteligentnych systemów i komputerów jest niezbędne i kluczowe dla osiągnięcia zautomatyzowanego nadzoru.
Każdy zewnętrzny system nadzoru musi być w stanie śledzić obiekty poruszające się w jego polu widzenia, klasyfikować te obiekty i wykrywać niektóre z ich działań. Opracowałem metodę śledzenia i klasyfikowania tych obiektów w realistycznych scenariuszach. Śledzenie obiektów w jednej kamerze odbywa się za pomocą odejmowania tła, a następnie korespondencji regionów. Uwzględnia to wiele wskazówek, w tym prędkości, rozmiary i odległości ramek ograniczających.
Krok 2: Materiały i oprogramowanie użyte w tym projekcie
Używane komponenty sprzętowe:
- Raspberry Pi (x1)
- Moduł kamery Raspberry Pi (x1)
- Czujnik ultradźwiękowy (x3)
- Sterowniki silników SparkFun Dual H-Bridge L298 (x1)
- Silnik prądu stałego (x1)
- Deska do krojenia chleba (x1)
- Podłączanie przewodów
Używane oprogramowanie:
Otwórz CV
Narzędzia ręczne:
Pyton
Krok 3: Co robić?
Każdy zewnętrzny system nadzoru musi być w stanie śledzić obiekty poruszające się w jego polu widzenia, klasyfikować te obiekty i wykrywać niektóre z ich działań. Opracowałem metodę śledzenia i klasyfikowania tych obiektów w realistycznych scenariuszach. Śledzenie obiektów w jednej kamerze odbywa się za pomocą odejmowania tła, a następnie korespondencji regionów. Uwzględnia to wiele wskazówek, w tym prędkości, rozmiary i odległości ramek ograniczających.
Kluczową rzeczą przy wykrywaniu obrazów klatka po klatce było uniknięcie jakichkolwiek spadków klatek, ponieważ wtedy bot może przejść w stan zawieszenia, jeśli bot nie zauważy kierunku ruchu piłki z powodu spadków klatek. Jeśli piłka wyjdzie poza zasięg kamery, przejdzie w stan, który nazywamy stanem zawieszenia, w takim przypadku bot wykonuje obrót o 360 stopni, aby zobaczyć przestrzeń wokół niej, aż piłka wróci kamerę, a następnie zacznij poruszać się w jej kierunku.
Do analizy obrazu pobieram każdą klatkę, a następnie maskuję ją potrzebnym kolorem. Następnie znajduję wszystkie kontury i znajduję największy z nich i oprawiam go w prostokąt. I pokaż prostokąt na głównym obrazie i znajdź współrzędne środka prostokąta.
Wreszcie bot próbuje przenieść współrzędne piłki do środka jej osi współrzędnych. Tak działa robot. Można to dodatkowo wzmocnić, używając urządzenia IoT, takiego jak cząsteczka fotonu, która może informować o wykryciu przedmiotu io tym, że robot za nim podąża lub gdy robot zgubił go i teraz wraca do bazy.
W celu przetwarzania obrazu musisz zainstalować oprogramowanie OpenCV na swoim raspberry pi, co było dla mnie dość trudne.
Możesz uzyskać wszelkie informacje wymagane do zainstalowania OpenCV za pomocą tego linku: kliknij tutaj
Krok 4: Schematy
Powyżej podałem schemat do mojego projektu, a wraz z nim jest płytka drukowana (PCB).
A oto niektóre z głównych połączeń, które musisz zrobić:
• Przede wszystkim moduł kamery Raspberry Pi jest bezpośrednio podłączony do Raspberry Pi.
• Czujniki ultradźwiękowe VCC są podłączone do wspólnego zacisku, tak samo jak GND (masa), a pozostałe dwa porty czujnika ultradźwiękowego są podłączone do pinów GPIO na Raspberry Pi.
• Silniki są połączone za pomocą mostka H.
• Zasilanie jest dostarczane z baterii.
Dodałem również film, który może pomóc w zrozumieniu działania czujnika ultradźwiękowego i jego działania.
a także możesz skorzystać z tego linku, jeśli nie możesz znaleźć powyższego filmu.
Krok 5: Jak to zrobić?
Zrobiłem ten projekt przedstawiający podstawowego robota, który może śledzić piłkę. Robot wykorzystuje kamerę do przetwarzania obrazu poprzez robienie klatek i śledzenie piłki. Do śledzenia piłki wykorzystuje się różne cechy, takie jak jej kolor, rozmiar, kształt.
Robot znajduje zakodowany kolor, a następnie szuka kuli tego koloru i podąża za nią. Wybrałem Raspberry Pi jako mikrokontroler w tym projekcie, ponieważ pozwala na użycie jego modułu kamery i daje dużą elastyczność w kodzie, ponieważ używa języka Pythona, który jest bardzo przyjazny dla użytkownika, a także pozwala nam używać biblioteki OpenCV do analizy obrazów.
Do przełączania kierunku obrotów silników lub ich zatrzymywania zastosowano mostek H.
Do analizy obrazu pobieram każdą klatkę, a następnie maskuję ją potrzebnym kolorem. Następnie znajduję wszystkie kontury i znajduję największy z nich i oprawiam go w prostokąt. I pokaż prostokąt na głównym obrazie i znajdź współrzędne środka prostokąta.
Wreszcie bot próbuje przenieść współrzędne piłki do środka jej osi współrzędnych. Tak działa robot. Można to dodatkowo wzmocnić, używając urządzenia IoT, takiego jak cząsteczka fotonu, która może informować o wykryciu przedmiotu io tym, że robot za nim podąża lub gdy robot zgubił go i teraz wraca do bazy. W tym celu będziemy korzystać z internetowej platformy oprogramowania, która łączy urządzenia i pozwala im wykonywać określone działania na określonych wyzwalaczach, czyli wyzwalaczach IFTTT.
Krok 6: Pseudo-kod
Oto pseudokod części wykrywającej przy użyciu OpenCV, w której wykrywamy piłkę.
Krok 7: Kod
Powyżej znajdują się fragmenty kodu, a poniżej szczegółowy opis kodu.
# zaimportuj niezbędne pakiety
IMPORTUJEMY WSZYSTKIE POTRZEBNE OPAKOWANIA
from picamera.array import PiRGBArray #Ponieważ w raspberry pi występuje problem z rozdzielczością, nie będzie można przechwytywać klatek przez VideoCapture
z picamera importuj PiCamera importuj RPi. GPIO jako GPIO importuj czas importuj numpy jako np
TERAZ KONFIGURUJEMY SPRZĘT I PRZYDZIELAMY PINY PODŁĄCZONE DO RASPBERRY PI
GPIO.setmode(GPIO. BOARD)
GPIO_TRIGGER1 = 29 #Lewy czujnik ultradźwiękowy
GPIO_ECHO1 = 31
GPIO_TRIGGER2 = 36 #Przedni czujnik ultradźwiękowy
GPIO_ECHO2 = 37
GPIO_TRIGGER3 = 33 #Prawy czujnik ultradźwiękowy
GPIO_ECHO3 = 35
SILNIK1B=18 #Lewy silnik
SILNIK1E=22
SILNIK2B=21 #Prawy silnik
SILNIK2E=19
LED_PIN=13 #Jeżeli znajdzie kulkę to zapali się dioda
# Ustaw szpilki jako wyjście i wejście
GPIO.setup(GPIO_TRIGGER1, GPIO. OUT) # Wyzwalacz GPIO.setup(GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup(GPIO_TRIGGER2, GPIO. OUT) # Wyzwalacz GPIO.setup(GPIO_ECHO2, GPIO. IN) GPIO.setup(GPIO_TRIGGER3, GPIO. OUT) # Wyzwalanie GPIO.setup(GPIO_ECHO3, GPIO. IN) GPIO.setup(LED_PIN, GPIO. OUT)
# Ustaw wyzwalacz na False (Niski)
GPIO.output (GPIO_TRIGGER1, False) GPIO.output (GPIO_TRIGGER2, False) GPIO.output (GPIO_TRIGGER3, False)
FUNKCJA TA WYKORZYSTUJE WSZYSTKIE CZUJNIKI ULTRADŹWIĘKOWE ZBIERZ ODLEGŁOŚĆ OD OBIEKTÓW WOKÓŁ NASZEGO BOTA
# Pozwól modułowi się osiedlić
def sonar(GPIO_TRIGGER, GPIO_ECHO): start=0 stop=0 # Ustaw piny jako wyjście i wejście GPIO.setup(GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup(GPIO_ECHO, GPIO. IN) # Echo # Ustaw wyzwalacz na False (Low) GPIO.output(GPIO_TRIGGER, False) # Zezwól modułowi na ustawienie time.sleep(0.01) #gdy odległość > 5: #Wyślij impuls 10us, aby wyzwolić GPIO.output(GPIO_TRIGGER, True) time.sleep(0.00001) GPIO. output(GPIO_TRIGGER, False) begin = time.time() podczas gdy GPIO.input(GPIO_ECHO)==0 i time.time()
PRZYGOTOWANIE SILNIKÓW PRĄDU STAŁEGO DO PRACY Z MALINOWYM PI
GPIO.setup(MOTOR1B, GPIO. OUT)
GPIO.setup(MOTOR1E, GPIO. OUT)
GPIO.setup(MOTOR2B, GPIO. OUT) GPIO.setup(MOTOR2E, GPIO. OUT)
ZDEFINIOWANIE FUNKCJI OBSŁUGI ROBOTA I WPROWADZANIA GO W RÓŻNYCH KIERUNKACH
def naprzód():
GPIO.output(MOTOR1B, GPIO. HIGH) GPIO.output(MOTOR1E, GPIO. LOW) GPIO.output(MOTOR2B, GPIO. HIGH) GPIO.output(MOTOR2E, GPIO. LOW) def reverse(): GPIO.output(MOTOR1B, GPIO. LOW) GPIO.output(MOTOR1E, GPIO. HIGH) GPIO.output(MOTOR2B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. HIGH) def rightturn(): GPIO.output(MOTOR1B, GPIO. LOW) GPIO.output(MOTOR1E, GPIO. HIGH) GPIO.output(MOTOR2B, GPIO. HIGH) GPIO.output(MOTOR2E, GPIO. LOW) def leftturn(): GPIO.output(MOTOR1B, GPIO. HIGH) GPIO.output(MOTOR1E), GPIO. LOW) GPIO.output(MOTOR2B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. HIGH)
def stop():
GPIO.output(MOTOR1E, GPIO. LOW) GPIO.output(MOTOR1B, GPIO. LOW) GPIO.output(MOTOR2E, GPIO. LOW) GPIO.output(MOTOR2B, GPIO. LOW)
URUCHOMIENIE MODUŁU KAMERY I REGULACJA USTAWIEŃ
#ZDJĘCIE KAMERY
#zainicjuj kamerę i pobierz odwołanie do nieprzetworzonego przechwytywania kamery camera = PiCamera() camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray(camera, size=(160, 120)) # zezwól na kamerę do czasu rozgrzewki.sleep(0.001)
TERAZ REALIZUJEMY NAJWAŻNIEJSZĄ RZECZ GDZIE BOT PODĄŻA ZA PIŁKĄ I UNIKAJĄC PRZESZKÓD NA DRODZE
while(1<10): { #odległość od przedniego czujnika ultradźwiękowego odległośćC = sonar(GPIO_TRIGGER2, GPIO_ECHO2) #odległość od prawego czujnika ultradźwiękowego odległośćR = sonar(GPIO_TRIGGER3, GPIO_ECHO3) #odległość od lewego czujnika ultradźwiękowego odległośćL = sonar(GPIO_TRIGGER1, GPIO_ECHO1) if(distanceC=8: rightturn() time.sleep(0.00625) stop() time.sleep(0.0125) forward() time.sleep(0.00625) stop() time.sleep(0.0125) #gdy znaleziono== 0: leftturn() time.sleep(0.00625) elif distanceL>=8: leftturn() time.sleep(0.00625) stop() time.sleep(0.0125) forward() time.sleep(0.00625) stop() time.sleep (0.0125) rightturn() time.sleep(0.00625) stop() time.sleep(0.0125) else: stop() time.sleep(0.01) else: #w przeciwnym razie przesuwa się do przodu() time.sleep(0.00625) if(distanceC>10): #przenosi współrzędne kuli na środek wyobrażonej osi kamery.if(centre_x=20): if(centre_x0): flag=1 leftturn() time.sleep(0.025) forward() time.sleep(0.00003125) stop() time.sleep(0.00625) else: stop() time.sleep(0.01)
w przeciwnym razie:
#jeżeli trafi piłkę i jest za blisko zapala się dioda. GPIO.output(LED_PIN, GPIO. HIGH) time.sleep(0.1) stop() time.sleep(0.1) #cv2.imshow("draw", frame) rawCapture.truncate(0) # wyczyść strumień w ramach przygotowań do następna klatka }
WYKONAJ NIEZBĘDNE PORZĄDKI
GPIO.cleanup() #uwolnij wszystkie piny GPIO
Krok 8: Linki zewnętrzne
Link do filmu demonstracyjnego: kliknij tutaj (Youtube)
Link do kodu na Git-hub: kliknij tutaj (Git-Hub)
Zalecana:
Gra w piłkę Arduino LCD: 3 kroki
Arduino LCD Ball Game: Witam, to jest Arduino LCD Ball Game, którą stworzyłem podczas kwarantanny, mam mały film o tym, jak działa ta gra i można go znaleźć pod adresem (https://youtu.be/ccc4AkOJKhM)
Zaawansowany robot śledzący linię: 7 kroków
Zaawansowany robot podążający za linią: Jest to robot podążający za linią z kilkoma dodatkowymi funkcjami. Ten prototyp może być używany wewnątrz fabryki do bezobsługowego przemieszczania materiału. Istnieją dwie stacje Stacja załadunku Stacja rozładunku Stacja załadunku Robot będzie czekał na Materia
Robot śledzący kolor oparty na kole dookólnym i OpenCV: 6 kroków
Robot śledzący kolor oparty na kole wielokierunkowym i OpenCV: do realizacji śledzenia kolorów używam podwozia z kołem wielokierunkowym i używam oprogramowania mobilnego o nazwie OpenCVBot. Dzięki twórcom oprogramowania, dziękuję. OpenCV Bot faktycznie wykrywa lub śledzi dowolny obiekt w czasie rzeczywistym za pomocą przetwarzania obrazu
Robot śledzący linię z PIC18F: 7 kroków
Robot Line Follower Z PIC18F: RACE LINKI stworzył robota Line Follower na mój kurs z mikrokontrolerem na uniwersytecie. Zrobiłem więc tego podstawowego robota podążającego za linią za pomocą Pica 18f2520 i użyłem kompilatora PIC CCS. Istnieje wiele projektów line follower w Internecie z ardunio
Robot śledzący linię oparty na PID z macierzą czujników POLOLU QTR 8RC: 6 kroków (ze zdjęciami)
Robot podążający za linią PID z układem czujników POLOLU QTR 8RC: Witam! To jest mój pierwszy artykuł na temat instrukcji, a dzisiaj zabiorę cię w trasę i wyjaśnię, jak zbudować linię za pomocą robota opartego na PID za pomocą QTR-8RC tablica czujników.Zanim przejdziemy do budowy robota, musimy zrozumieć