Spisu treści:
- Krok 1: Przygotuj swój sprzęt
- Krok 2: Zainstaluj niezbędne pakiety
- Krok 3: Uruchom kod
- Krok 4: Ostatnie myśli
Wideo: Samouczek wykrywania obiektów robota czworonożnego Jetson Nano: 4 kroki
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:30
Nvidia Jetson Nano to zestaw programistyczny, który składa się z SoM (System on Module) i referencyjnej płytki nośnej. Jest przeznaczony przede wszystkim do tworzenia systemów wbudowanych, które wymagają dużej mocy obliczeniowej dla zastosowań uczenia maszynowego, widzenia maszynowego i przetwarzania wideo. Możesz obejrzeć szczegółową recenzję tego na moim kanale YouTube.
Nvidia stara się, aby Jetson Nano był jak najbardziej przyjazny dla użytkownika i łatwy w opracowywaniu projektów. Rozpoczęli nawet mały kurs, jak zbudować robota z Jetson Nano, kilka dni po premierze tablicy. Szczegóły dotyczące tego projektu znajdziesz tutaj.
Jednak sam miałem kilka problemów z Jetbotem jako projektem:
1) To nie było dla mnie wystarczająco EPIC. Jetson Nano to bardzo ciekawa deska ze świetnymi możliwościami przetwarzania, a zrobienie z niej prostego robota kołowego wydawało się po prostu bardzo… rozczarowującą rzeczą.
2) Wybór sprzętu. Jetbot wymaga pewnego sprzętu, który jest drogi/można go zastąpić innymi alternatywami - na przykład używa joysticka do zdalnej obsługi. Brzmi fajnie, ale czy naprawdę potrzebuję joysticka do sterowania robotem?
Tak więc zaraz po tym, jak dostałem w swoje ręce Jetson Nano, zacząłem pracować nad własnym projektem, Jetspiderem. Pomysł polegał na zreplikowaniu podstawowych wersji demonstracyjnych, które miał Jetbot, ale z bardziej powszechnym sprzętem i możliwym do zastosowania w szerszej gamie projektów.
Krok 1: Przygotuj swój sprzęt
Do tego projektu wykorzystałem wczesny prototyp czworonożnego robota Zuri, wykonany przez Zoobotics. Długo leżał w laboratorium naszej firmy. Wyposażyłem go w wycinany laserowo drewniany uchwyt do Jetson Nano i uchwyt do aparatu. Ich konstrukcja jest zastrzeżona, więc jeśli dla swojego robota Jetson Nano chcesz stworzyć coś podobnego, możesz rzucić okiem na projekt Meped, który jest podobnym czworonogiem z projektem open-source. W rzeczywistości, ponieważ nikt nie miał kodu źródłowego mikrokontrolera Zuri (Arduino Mega) w naszym laboratorium, użyłem kodu z Mepeda z drobnymi poprawkami w przesunięciu nóg/stopek.
Użyłem zwykłej kamery internetowej zgodnej z USB Raspberry Pi i klucza USB Wifi.
Najważniejsze jest to, że ponieważ zamierzamy używać Pyserial do komunikacji szeregowej między mikrokontrolerem a Jetson Nano, twój system może zasadniczo używać dowolnego typu mikrokontrolera, o ile może być połączony z Jetson Nano za pomocą kabla szeregowego USB. Jeśli twój robot wykorzystuje silniki prądu stałego i sterownik silnika (na przykład oparty na L298P), możliwe jest bezpośrednie połączenie sterownika silnika z Jetson Nano GPIO. Ale niestety do sterowania serwami można użyć tylko innego mikrokontrolera lub dedykowanego sterownika serwomechanizmu I2C, ponieważ Jetson Nano nie ma sprzętowego GPIO PWM.
Podsumowując, możesz użyć robota z dowolnym mikrokontrolerem, który można połączyć z Jetson Nano za pomocą kabla USB. Przesłałem kod dla Arduino Mega do repozytorium github dla tego samouczka, a część związana z połączeniem Jetson Nano z Arduino jest tutaj:
if(Serial.available()) {przełącznik(Serial.read()) {
{
przypadek 1':
Naprzód();
przerwa;
przypadek „2”:
plecy();
przerwa;
przypadek „3”:
Skręć w prawo();
przerwa;
przypadek „4”:
Skręć w lewo();
przerwa;
Sprawdzamy, czy są dostępne dane, a jeśli tak, przekazujemy je do struktury kontrolnej switch-case. Zwróć uwagę, że dane z numeru seryjnego są znakami, zwróć uwagę na pojedynczy cudzysłów wokół cyfr 1, 2, 3, 4.
Krok 2: Zainstaluj niezbędne pakiety
Na szczęście dla nas domyślny obraz systemu Jetson Nano zawiera wiele preinstalowanych elementów (takich jak OpenCV, TensorRT itp.), więc wystarczy zainstalować kilka innych pakietów, aby kod działał i włączyć SSH.
Zacznijmy od włączenia SSH na wypadek, gdybyś chciał wykonać całą resztę pracy zdalnie.
aktualizacja sudo apt
sudo apt install openssh-server
Serwer SSH uruchomi się automatycznie.
Aby połączyć się z komputerem Ubuntu przez sieć LAN, wystarczy wpisać następujące polecenie:
ssh nazwa_użytkownika@adres_ip
Jeśli masz komputer z systemem Windows, będziesz musiał zainstalować klienta SSH, na przykład Putty.
Zacznijmy od zainstalowania Pythona Package Manager(pip) i Pillow do manipulacji obrazami.
sudo apt zainstaluj python3-pip python3-pil
Następnie zainstalujemy repozytorium Jetbot, ponieważ polegamy na niektórych częściach jego struktury do wykrywania obiektów.
sudo apt install python3-smbus python-pyserial
klon git
cd jetbot
sudo apt-get install cmake
sudo python3 setup.py zainstalować
Na koniec sklonuj moje repozytorium Github dla tego projektu do swojego katalogu domowego i zainstaluj Flask i kilka innych pakietów do zdalnego sterowania robotem za pomocą serwera WWW.
klon git
Płyta CD
sudo pip3 install -r wymagania-opencv
Pobierz przeszkolony model SSD (Single Shot Detector) z tego linku i umieść go w folderze jetspider_demos.
Teraz możemy iść!
Krok 3: Uruchom kod
Zrobiłem dwa dema dla Jetspider, pierwsze to prosta teleopacja, bardzo podobna do tej, którą zrobiłem wcześniej dla łazika Banana Pi, a drugie wykorzystuje TensorRT do wykrywania obiektów i wysyła polecenia ruchu przez połączenie szeregowe do mikrokontrolera.
Ponieważ większość kodu teleoperacji jest opisana w moim innym samouczku (wprowadziłem tylko drobne poprawki, poprawiając transmisję wideo), tutaj skupię się na części Object Detection.
Główny skrypt do śledzenia obiektu to object_following.py w jetspider_object_following, dla teleoperacji spider_teleop.py w jetspider_teleoperation.
Obiekt następujący po skrypcie rozpoczyna się od zaimportowania niezbędnych modułów oraz zadeklarowania zmiennych i instancji klas. Następnie uruchamiamy serwer sieciowy Flask z tą linią
app.run(host='0.0.0.0', threaded=True)
Jak tylko otworzymy adres 0.0.0.0(localhost) w naszej przeglądarce internetowej lub adres Jetson Nano w sieci (można sprawdzić za pomocą polecenia ifconfig), ta funkcja zostanie wykonana
zdefiniuj indeks():
Renderuje szablon strony internetowej, który mamy w folderze szablonów. Szablon ma wbudowane źródło wideo, więc po zakończeniu ładowania zostanie wykonane def video_feed():, które zwróci obiekt Response zainicjowany funkcją generatora.
Sekret implementacji aktualizacji w miejscu (aktualizacja obrazu na stronie internetowej dla naszego strumienia wideo) polega na użyciu odpowiedzi wieloczęściowej. Odpowiedzi wieloczęściowe składają się z nagłówka zawierającego jeden z typów zawartości wieloczęściowej, po którym następują części oddzielone znacznikiem granicy, z których każdy ma swój własny typ zawartości specyficznej dla części.
W funkcji def gen(): implementujemy funkcję generatora w nieskończonej pętli, która przechwytuje obraz, wysyła go do funkcji def execute(img): w wyniku czego otrzymujemy obraz do wysłania na stronę internetową.
def execute(img): funkcja jest miejscem, w którym dzieje się cała magia, pobiera obraz, zmienia jego rozmiar za pomocą OpenCV i przekazuje go do instancji klasy Jetbot ObjectDetector „model”. Zwraca listę wykryć, a my używamy OpenCV do rysowania wokół nich niebieskich prostokątów i pisania adnotacji z klasą wykrytego obiektu. Następnie sprawdzamy, czy istnieje interesujący nas obiekt detectmatching_detections = [d for d in detections[0] if d['label'] == 53]
Możesz zmienić ten numer (53) na inny numer z zestawu danych CoCo, jeśli chcesz, aby twój robot podążał za innymi obiektami, 53 to jabłko. Cała lista znajduje się w pliku Categories.py.
Na koniec, jeśli przez 5 sekund nie zostanie wykryty żaden obiekt, przesyłamy znak „5”, aby robot zatrzymał się przez numer seryjny. Jeśli obiekt zostanie znaleziony, obliczamy odległość od środka obrazu i odpowiednio postępujemy (jeśli blisko środka, idź prosto (znak "1" na serialu), jeśli po lewej, idź w lewo, itd.). Możesz grać z tymi wartościami, aby określić najlepszą dla swojej konkretnej konfiguracji!
Krok 4: Ostatnie myśli
Oto sedno demonstracji ObjectFollowing. Jeśli chcesz dowiedzieć się więcej o strumieniowaniu wideo na serwerze internetowym Flask, możesz rzucić okiem na ten wspaniały samouczek autorstwa Miguela Grinberga.
Możesz również rzucić okiem na notatnik Nvidia Jetbot Object Detection tutaj.
Mam nadzieję, że moje implementacje dem Jetbot pomogą zbudować Twojego robota z wykorzystaniem frameworka Jetbot. Nie zaimplementowałem demonstracji omijania przeszkód, ponieważ uważam, że wybór modelu nie przyniesie dobrych rezultatów omijania przeszkód.
Dodaj mnie na LinkedId, jeśli masz jakieś pytania i zasubskrybuj mój kanał YouTube, aby otrzymywać powiadomienia o ciekawszych projektach dotyczących uczenia maszynowego i robotyki.
Zalecana:
Maszyna do wykrywania obiektów: 6 kroków
Maszyna z czujnikami obiektów: Wideo na górze Wprowadzenie: Zawsze jest problem, że ludzie nie wiedzą, gdzie kładą rzeczy lub nie wiedzą, czy przedmiot jest we właściwym miejscu, a ludzie zawsze zapominają wziąć coś i zapomnieć umieścić do ich przynależnego miejsca. Więc mój cel
Samouczek Nvidii Jetson Nano - Pierwsze spojrzenie na sztuczną inteligencję i ML: 7 kroków
Samouczek Nvidii Jetson Nano | Pierwsze spojrzenie z AI i ML: Hej, co słychać! Akarsh tutaj z CETech.Dzisiaj przyjrzymy się nowemu SBC od Nvidii, którym jest Jetson Nano, Jetson Nano koncentruje się na technikach sztucznej inteligencji, takich jak rozpoznawanie obrazu itp. Będziemy pierwsi uruchamiać t
Rezystor wykrywania siły (FSR) Arduino Prosty samouczek: 8 kroków
Force Sensing Resistor (FSR) Arduino Simple Tutorial: W tym samouczku nauczymy się wykrywać siłę przyłożoną do Force Sensing Resistor (FSR) i wyświetlać ją na wyświetlaczu OLED + ustawimy limity za pomocą zielonej i czerwonej diody LED .Obejrzyj film demonstracyjny
Samouczek robota Arduino: 3 kroki
Arduino Robot Tutorial: Szukałem w bazie danych Instructable samouczka dla oficjalnego robota Arduino, ale nie mogłem go znaleźć! Więc zrobiłem ten samouczek, aby pomóc innym, którzy potrzebowali odrobiny pomocy ze swoim nowym robotem Arduino
Samouczek wykrywania światła Arduino: 3 kroki (ze zdjęciami)
Samouczek Arduino Light Detection: Po ukończeniu tego samouczka dowiesz się, jak wykrywać zmiany poziomu światła wokół ciebie. Części do tego projektu dostarczyła firma Kuman. Znajdziesz je w zestawie startowym Arduino UNO