Spisu treści:

Zbuduj swój własny autonomiczny samochód - (ta instrukcja jest w toku): 7 kroków
Zbuduj swój własny autonomiczny samochód - (ta instrukcja jest w toku): 7 kroków

Wideo: Zbuduj swój własny autonomiczny samochód - (ta instrukcja jest w toku): 7 kroków

Wideo: Zbuduj swój własny autonomiczny samochód - (ta instrukcja jest w toku): 7 kroków
Wideo: Ludzie, którzy zamienili się w zwierzęta 😲🤔 2024, Lipiec
Anonim
Image
Image

Dzień dobry, Jeśli spojrzysz na mój inny Instructable on Drive Robot With Remote USB Gamepad, ten projekt jest podobny, ale na mniejszą skalę. Możesz także śledzić lub uzyskać pomoc lub inspirację z playlist Robotics, Home-Grown Voice-Recognition lub Self-Driving Car na Youtube.

Zacząłem od dużego robota (Wallace 4), ale odkąd założyłem lokalną grupę Meetup, potrzebowałem czegoś na mniejszą skalę, a grupa była bardzo zainteresowana wizją komputerową.

Natknąłem się więc na kurs Udemy: Zbuduj swój własny samochód autonomiczny, który dał mi pomysł na ten projekt.

Jeśli jesteś zainteresowany kursem Udemy, możesz tam zaglądać; od czasu do czasu trafia do sprzedaży z ogromnym rabatem. Uwaga: jest część 1 i część 2 - musisz zbadać, jak otrzymać oba kursy jako pakiet (z rabatem).

Cel tej instrukcji jest dwojaki. Po pierwsze, aby podać wskazówki i alternatywy dla niektórych części kursu (takich jak części i sprzęt). A po drugie, aby rozwinąć kurs.

Główny cel kursu Udemy:

jest umożliwienie samodzielnego poruszania się małym kołowym samochodem-robotem po pomniejszonej, dwupasmowej drodze.

Musi rozpoznać pasy pasa i kiedy dojedzie do końca drogi.

Musi rozpoznać znak stopu (i zatrzymać).

Również sygnalizacja świetlna CZERWONY i ZIELONY.

Musi także rozpoznawać i manewrować wokół przeszkody (innego samochodu).

Co ta instrukcja dodaje do kursu:

Prowadź mały samochód za pomocą zdalnego gamepada USB, podobnie jak w tym innym Instruktażowym.

Podaj kilka alternatyw dla tego, co zapewnia kurs.

Być może nie będziesz musiał nawet kupować kursu:

Ta instrukcja może być wszystkim, czego potrzebujesz, aby zacząć.

Kieszonkowe dzieci

Istotne (sugerowane) części:

Podwozie robota

Cztery silniki

Arduino

Raspberry Pi (3, 3B+, 4)

Kamera (kamera internetowa USB lub moduł Picamera)

Moc baterii

Włącznik/wyłącznik

przewody połączeniowe

elementy dystansowe (plastikowe i może również metalowe)

Przed przystąpieniem do zakupu części zapoznaj się z całą instrukcją, a także z filmami.

Po wykonaniu tego projektu zdaję sobie sprawę, że dokładne części nie są tak krytyczne.

Krok 1: Więcej szczegółów na temat części…

Image
Image
Więcej szczegółów na temat części…
Więcej szczegółów na temat części…
Więcej szczegółów na temat części…
Więcej szczegółów na temat części…

Powiązany film zawiera szczegółowe informacje na temat części i niektórych znalezionych przeze mnie problemów.

  • Rozejrzyj się za różnymi podwoziami / silnikami
  • Silniki powinny mieć już przylutowane przewody
  • Możesz mieć wiertło i wiertła LUB podwozie z większą liczbą otworów
  • Pamiętaj, że problemem jest waga. Wszystko powinno być jak najlżejsze.
  • Sterownik silnika L298 H-Bridge działa świetnie. UWAGA: zdobądź jeden z blokami zacisków śrubowych (patrz zdjęcie)
  • Prawdopodobnie będziesz potrzebować zarówno plastikowych, jak i metalowych elementów dystansowych, rozmiar M3 to prawdopodobnie najlepszy wybór.

Plastikowe wsporniki są dobre do montażu płytek na obudowie (sterownik silnika, Arduino, Raspberry, płytka zasilająca, włącznik/wyłącznik itp.).

Metalowe wsporniki są dobre do montażu obudowy (wytrzymałość), a także szczególnie podczas opracowywania (programowanie, testowanie). Do rozwoju metalowe wsporniki mogą służyć jako szczudła. Tak jak przy prawdziwym aucie, chcesz podnieść samochód tak, aby koła były w powietrzu i mogły się swobodnie poruszać. To jest bardzo ważne! Popełnisz błędy i nie chcesz, aby samochód po prostu wystartował i się rozbił.

Wiertarka + wiertła

Naprawdę chcę podkreślić użycie wiertarki, jeśli możesz, i użycie dystansów zamiast dwustronnej taśmy klejącej. Jest bardzo prawdopodobne, że kilka razy podczas tego projektu usuniesz i przestawisz swoje deski itp., a używanie taśmy stanie się bardzo brudne.

Użycie wiertarki bardzo ułatwia zmianę pozycji (zwłaszcza jeśli obudowa jest plastikowa) i wygląda bardziej profesjonalnie.

Krok 2: Zasilanie samochodu podczas rozwoju

Zasilanie samochodu podczas rozwoju
Zasilanie samochodu podczas rozwoju
Zasilanie samochodu podczas rozwoju
Zasilanie samochodu podczas rozwoju

Moim zdaniem najszybszy i najłatwiejszy sposób na rozpoczęcie tego projektu to:

  • w celu opracowania szkicu oprogramowania Arduino wystarczy podłączyć Arduino do komputera przez USB
  • dla oprogramowania Raspberry Pi powinieneś mieć zasilanie USB 5 V, które może dostarczyć co najmniej 3 ampery. I powinien mieć włącznik/wyłącznik. Jeśli nie masz dobrego, zasilanego koncentratora USB podłączonego do komputera, prawdopodobnie nie będziesz w stanie zasilić Raspberry bezpośrednio z komputera.
  • Gdy jesteś gotowy do testowania silników/kół, najłatwiej jest (patrz zdjęcie) dobry zasilacz. Nie są to jednak tanie.

Chodzi mi o to, aby powiedzieć, że nie chcesz korzystać z baterii podczas tworzenia, ponieważ znacznie spowolni to twoje postępy.

Ponadto, robiąc coś podobnego do powyższych sugestii, nie musisz się (jeszcze) martwić się o to, jak dokładnie zasilisz samochód. Możesz odłożyć tę decyzję na później w projekcie.

Krok 3: Zasilanie samochodu podczas rzeczywistego użytkowania

Zasilanie samochodu podczas rzeczywistego użytkowania
Zasilanie samochodu podczas rzeczywistego użytkowania
Zasilanie samochodu podczas rzeczywistego użytkowania
Zasilanie samochodu podczas rzeczywistego użytkowania

Jeśli zdecydujesz się postępować zgodnie z kursem (lub tym, co zrobiłem) dla zasilania 5V do logiki, to miej świadomość, że nie wszystkie powerbanki USB 5V są dobre do tego projektu.

Najważniejsze jest to, że potrzebujesz 5 V, ale potrzebujesz co najmniej 3 amperów! Pomyśl o tym w ten sposób – potrzebujesz powerbanku, który będzie zasilał laptopa (być może).

Jeśli mieszkasz w USA, myślę, że jednym z najlepszych sposobów, aby to zrobić, jest kupowanie w Best Buy. Czemu? Ze względu na ich 14-dniową politykę zwrotu pieniędzy za zwroty.

Właściwie musiałem wypróbować trzy różne powerbanki, zanim znalazłem taki, który będzie działał. Pozostałe powodują, że Raspberry Pi narzeka na zbyt niskie napięcie.

Zacząłem od najtańszego powerbanku i po prostu próbowałem następnego modelu (który kosztował więcej), aż znalazłem taki, który działał.

Jak zasilać Arduino?

W kursie Udemy autor wybrał zasilanie Arduino bezpośrednio z powerbanku (poprzez wykonaną przez siebie niestandardową płytkę drukowaną) i użył pinów zasilania na złączu GPIO Arduino.

Ja jednak zdecydowałem się po prostu zasilać Arduino bezpośrednio z Raspberry Pi, przez kabel USB.

Będziesz musiał zdecydować, co jest lepsze.

Jak zasilać silniki/sterownik silnika?

W kursie Udemy autor wybrał zasilanie silników/sterowników bezpośrednio z powerbanku 5V. W przypadku skorzystania z tego podejścia należy wziąć pod uwagę dwie kwestie.

  1. Kiedy silniki zaczynają się obracać, pobierają najwięcej prądu. Może to (będzie) spowodować, że napięcie zasilania spadnie (obniży się) poniżej 5 V i spowoduje zresetowanie Raspberry.
  2. Używanie tylko 5V do zasilania silników oznacza, że nie dostarczasz do silników tyle mocy, ile możesz, a samochód będzie jechał wolniej (bardziej spowolniony). Przetestowałem silniki (z tym zasilaczem) (patrz zdjęcie) do co najmniej 9V. Działają dobrze przy 9V.

Obserwacje około 9V (lub więcej)

Jeśli obejrzałeś wszystkie zdjęcia i filmy do tego Instructable, zauważyłeś, że zmontowałem niestandardową płytkę drukowaną, aby stworzyć własne źródło zasilania 9V. Po drodze nauczyłem się kilku rzeczy.

Obecnie do zasilania silników używam równolegle kilku (3) ogniw baterii 9V. Używałem zarówno baterii alkalicznych, jak i akumulatorków NiMH.

Doświadczenie edukacyjne nr 1: Prawidłowe ładowanie akumulatorów NiMH 9V zajmuje dużo czasu (wiele godzin).

Możliwe rozwiązanie: Zainwestuj w wieloakumulatorową ładowarkę NiMH. Powinna to być „inteligentna” ładowarka.

Wada: nie są tanie.

Doświadczenie edukacyjne nr 2: Baterie 9 V składają się w rzeczywistości z kilku małych wewnętrznych ogniw. Jeśli jedno z tych ogniw umrze, cała bateria jest bezużyteczna. NIE miałem tego problemu, ale czytałem o tym.

Doświadczenie edukacyjne nr 3: Nie wszystkie baterie 9 V mają to samo napięcie. Ten jest ważny. Ponieważ im wyższe napięcie, tym większa prędkość jest możliwa. Niektóre ogniwa (i ładowarki) mają tylko 8,4V. Niektórzy jeszcze mniej. Niektóre mają 9,6V.

Doświadczenie edukacyjne nr 4: Baterie 9V, szczególnie te NiMH, są lekkie. Dobra rzecz. Jednak większość z nich dostarcza tylko mA prądu wyjściowego. Dlatego musiałem je ustawić równolegle. Potrzebna jest całkowita wydajność prądowa prawie 2 A, nawet przez krótkie okresy czasu.

Doświadczenie edukacyjne nr 5: Istnieją akumulatory 9,6 V, używane do takich rzeczy, jak samochody sterowane radiowo. Nie używałem jeszcze jednego, ale uważam, że dostarczają więcej prądu niż równoległe baterie 9V, tak jak ja. Możesz także naładować pojedynczą jednostkę. Opakowania występują w różnych rozmiarach. I trzeba wziąć pod uwagę wagę. A potem, czy używasz pakietu do zasilania całego samochodu, czy tylko silników? Jeśli dla całego samochodu, będziesz potrzebować regulatora obniżania napięcia 5V dla Raspberry Pi.

L298 H-Bridge ma możliwość wyprowadzenia 5 V w tym celu, ale jestem zaniepokojony tym, ile prądu może wytworzyć dla Raspberry Pi i czy będzie to zbyt duże obciążenie na płycie L298.

Jeśli zdecydujesz się na dwa oddzielne źródła zasilania, możesz mieć problem z wagą (zbyt ciężki).

Krok 4: Programowanie oprogramowania do jazdy z gamepadem

Myślę, że omówiłem wiele z tej sekcji już w Instruktażowym podręczniku Robot Driven Via Remote USB Gamepad, więc nie będę tego tutaj powtarzał.

Sekcje programowania/oprogramowania w tej innej instrukcji to tylko sugestie. Myślę, że więcej uczy się metodą prób i błędów.

Krok 5: Dodawanie kamery

Dodawanie kamery
Dodawanie kamery
Dodawanie kamery
Dodawanie kamery
Dodawanie kamery
Dodawanie kamery

Uważam, że na kursie Udemy autor używa okrągłych drewnianych kołków i pistoletu do kleju, aby skonstruować sposób na podniesienie aparatu.

Będziesz chciał unieść kamerę tak, aby patrzyła w dół na dwupasmową drogę, aby łatwiej mogła rozpoznać pasy.

Tam, gdzie mieszkam w USA, drewniane kołki były bardzo tanie. Możesz je kupić w Lowe's lub Home Depot. Wybrałem kołki kwadratowe zamiast kołków okrągłych.

Zdecydowałem się również na wykonanie mocniejszej podstawy dla wieży kamery, a całą wieżę zdemontowałem z samochodu, abym mógł się bawić i eksperymentować, jaka jest najlepsza pozycja dla niej w samochodzie.

Zrobiłem też wieżę z myślą, że zacznę od kamery internetowej USB, ale być może później przejdę do korzystania z modułu Picamera.

Możesz zainwestować w kamerę typu rybie oko.

Kupiłem bardzo niedrogi pistolet do klejenia na gorąco, ale chciałem lepiej wzmocnić podstawę wieży, więc wstępnie wywierciłem kilka otworów na śruby i dodałem śruby, aby lepiej trzymać wszystko razem.

Następnie przykręciłem podstawę do podwozia samochodu.

Jeśli później będę chciał coś przenieść, po prostu odkręcam podstawę od podwozia, wiercę nowe otwory w nowym miejscu podwozia i ponownie przykręcam wieżę do podwozia.

Przyniosłem kod „follow-me” Python i Node.js z dużego robota (Wallace Robot 4) jako sposób na przetestowanie wszystkiego. Zobacz zdjęcia w tej sekcji, aby zapoznać się z listą youtube'ów, które zawierają dużo więcej szczegółów na temat „follow-me”.

Jak wspomniałem, łatwiej było najpierw zamontować kamerkę USB. Później mogę zamontować moduł Picamera.

Krok 6: Rozpoznawanie twarzy - określ pozycję

Image
Image

Ta część nie jest głównym tematem kursu Udemy, ale było to zabawne ćwiczenie.

Jeśli poszukasz w Internecie hasła „rozpoznawanie twarzy w Pythonie opencv”, znajdziesz wiele dobrych przykładów, jak to zrobić, i wszystkie postępują zgodnie z tymi samymi krokami.

  1. załaduj plik twarzy "haar"
  2. zainicjować kamerę
  3. rozpocznij pętlę, w której łapiesz ramkę
  4. przekonwertować kolorowy obraz na skalę szarości
  5. nakarm go do opencv, aby znalazł twarze
  6. uruchom pętlę wewnętrzną (dla każdej znalezionej twarzy) (w moim przypadku dodaję kod, aby przerwać, jeśli więcej niż 1 twarz)

W tym celu tutaj, po wykryciu twarzy, znamy X, Y, W i H wyimaginowanego kwadratu, który zarysowuje twarz.

Jeśli chcesz, aby robot poruszał się do przodu lub do tyłu, wystarczy wziąć pod uwagę W. Jeśli W jest za duże (zbyt blisko), robot powinien się cofnąć. Jeśli W jest za małe (za daleko), niech robot porusza się do przodu.

Ruch lewo/prawo jest trochę bardziej skomplikowany, ale nie szalony. Spójrz na ilustrację w tej sekcji, która szczegółowo opisuje, jak określić położenie lewej i prawej twarzy.

NOTATKA:

Jeśli uruchomisz którykolwiek z internetowych przykładów OpenCV, wszystkie pokazują rzeczywisty widok tego, co „widzi” opencv, z twarzą narysowaną w kwadracie. Jeśli będziesz obserwował, ten kwadrat nie jest stały (stały), nawet jeśli się nie poruszasz.

Te zmieniające się wartości powodują, że robot jest w ciągłym ruchu, do przodu lub do tyłu, w lewo lub w prawo.

W związku z tym będziesz potrzebować pewnego rodzaju delty zarówno dla przodu/tyłu, jak i dla lewej/prawej strony.

Weźmy lewą i prawą stronę:

Po obliczeniu lewej i prawej strony uzyskaj różnicę (delta):

delta = abs(od lewej do prawej)

Musisz wziąć liczbę bezwzględną, ponieważ nie wiesz, która z nich będzie większą liczbą.

Następnie dodajesz kod warunkowy, aby próbować przenieść tylko wtedy, gdy delta jest większa niż pewne minimum.

Zrobiłbyś to samo dla przodu i tyłu.

Krok 7: Pozycja twarzy - poruszający się robot

Kiedy już wiesz, że potrzebujesz robota do poruszania się w lewo lub w prawo, do przodu lub do tyłu, jak to zrobić?

Ponieważ ten Instructable jest w toku, w tej chwili po prostu skopiowałem kod z mojego dużego robota, aby użyć go w tym projekcie. Zajrzyj na moją playlistę Robotics na youtube, gdzie jest szczegółowo o tym wszystkim.

W skrócie mam kod w warstwach.

Skrypt rozpoznawania twarzy Pythona wysyła żądania http do serwera Node.js

Serwer Node.js nasłuchuje żądań http dotyczących kierunków ruchu, konwertuje je na niestandardowy protokół szeregowy

Niestandardowy protokół szeregowy między serwerem Node.js a Arduino

Szkic Arduino, który wykonuje rzeczywiste polecenia poruszania robotem

Kurs Udemy nie robi tego jak powyżej. Ale ponieważ chciałem zrobić dobre postępy i skupić się na rozpoznawaniu obrazu, na razie ponownie użyłem mojego poprzedniego kodu.

Zalecana: