Spisu treści:

Samochód RasbperryPi z kamerą FPV. Sterowanie za pomocą przeglądarki internetowej: 31 kroków (ze zdjęciami)
Samochód RasbperryPi z kamerą FPV. Sterowanie za pomocą przeglądarki internetowej: 31 kroków (ze zdjęciami)

Wideo: Samochód RasbperryPi z kamerą FPV. Sterowanie za pomocą przeglądarki internetowej: 31 kroków (ze zdjęciami)

Wideo: Samochód RasbperryPi z kamerą FPV. Sterowanie za pomocą przeglądarki internetowej: 31 kroków (ze zdjęciami)
Wideo: Jak diagnozować i naprawiać sprzęt elektroniczny - poradnik na przykładzie dwóch Raspberry Pi 2024, Listopad
Anonim
Image
Image

Zbudujemy samochód z napędem na 4 koła - sterowanie będzie podobne jak w czołgu - skręcanie jedną stroną kół będzie się obracać z inną prędkością niż inne. Przy samochodzie zostanie umieszczona kamera na specjalnym uchwycie, w którym możemy zmieniać pozycję kamery. Robotem sterować będzie przeglądarka internetowa (chrome lub firefox na pulpicie lub firefox na telefonie komórkowym), w przeglądarce, otrzymamy obraz z kamery (z opóźnieniem tylko 200ms), a z przeglądarki będziemy mogli sterować ruchami samochodu i pozycja kamery. W celu ułatwienia komunikacji korzystałem z systemu app.remoteme.org, działa też nieszablonowe sterowanie tego typu autem, więc nie musisz pisać własnego kodu, ale oczywiście możesz modyfikować skrypty dodać nowe możliwości itp.

Przed podłączeniem zasilania do PCB proszę dokładnie sprawdzić wszystkie połączenia

Krok 1: Niektóre informacje o App.remoteme.org

System składa się z trzech części

  • aplikacja internetowa - gdy hostujesz swoje strony kontrolne i łączy ona wszelką komunikację
  • program rasbperryPi - program do wysyłania wideo, zarządzania skryptami Pythona
  • biblioteki, w których znajdziesz definicje klas, funkcji

Remoteme.org działa szybko. Łączysz wszystkie swoje urządzenia razem, możesz tam hostować swoje strony internetowe, przeglądać podłączone urządzenia. System Remoteme.org został stworzony, aby pomóc Ci rozpocząć tworzenie projektów, bez obaw o komunikację protokołową, główną ideą jest wysyłanie binarnych wiadomości pomiędzy różnymi urządzeniami takimi jak strony internetowe, RasbeprryPI, arduino i skrypty.

Z drugiej strony Remoteme.org daje Ci pełną kontrolę nad Twoimi plikami, możesz je łatwo modyfikować dopisując własną funkcjonalność

W tym samouczku pokażę Ci, jak zrobić niesamowity projekt prawie bez pisania kodu.

Na końcu tego poradnika zamieściłem przydatne linki, które pomogą Ci zrozumieć system remoteme.org.

Krok 2: Co jest potrzebne:

Co jest potrzebne
Co jest potrzebne
Co jest potrzebne
Co jest potrzebne
  • Malinowy PI Zero W
  • Dedykowana kamera
  • Adafruit 16-kanałowy 12-bitowy sterownik PWM/Servo - interfejs I2C - PCA9685 lub jego klon
  • Dwa serwomechanizmy kompatybilne z uchwytem kamery
  • Uchwyt na aparat
  • Baterie - W tutorialu dwie możliwości podłączenia
  • Mostek H TB6612FNG, do sterowania prędkością koła
  • Pliki eagle PCB Łatwo zrobić to metodą termotransferuDC-DC
  • Moduł konwertera obniżającego napięcie DC
  • Sprawa robota

Krok 3: Połączenia

Znajomości
Znajomości

Mechanizm serwo Raspberry pi sterujący poprzez moduł PWM i prędkość silnika przez mostek H, który jest podłączony do pinów RasbperryPi, wejście PWM do mostka H jest generowane przez ten sam moduł, którego użyłem do serw (które części, o których wspomniałem powyżej, nie są potrzebne konwertery logiczne)

Krok 4: PCB

PCB
PCB
PCB
PCB

Tutaj możesz pobrać pliki PCB eagle Ścieżki są grube, więc łatwo je wykonać metodą termotransferu

Krok 5: Wyjścia PCB

Wyjścia PCB
Wyjścia PCB
Wyjścia PCB
Wyjścia PCB
  1. Wejście PWM dla silników napędowych Należy podłączyć do 15 i 16 pinów modułu PWM (sprawdź zielony prostokąt na obrazku modułu PWM)
  2. Pobór mocy dla silników napędowych (sprawdź, z jakim maksymalnym napięciem mogą pracować Twoje silniki)
  3. Zasilanie dla RasbperryPi i modułu PWM – musi być dokładnie
  4. Wyjścia silników napędowych (wyjścia są dwa, ponieważ sparujemy silniki napędowe)
  5. Moc serwomechanizmów – też trzeba sprawdzić jakie napięcie jest dla nich dobre
  6. Zworka, której obecna moc z piątego wejścia będzie zasilać również silniki napędowe, więc nie ma potrzeby podłączania czegokolwiek do wejścia 2
  7. Zworka jeśli jest obecna RasbperryPi będzie zasilana z 3 wejścia – przed założeniem tu zworki sprawdź czy połączenia są prawidłowe – nie chcesz palić swojego RPi
  8. Przylutujmy tutaj kable, bo nie potrzebujemy konwerterów logicznych

Krok 6: Jak to będzie działać

W RasbperryPi jest skrypt Pythona, który korzysta z dwóch bibliotek

  • import RPi. GPIO jako GPIO – dla pinów 25-AIN1, 8-AIN2, 24-BIN1, 23-BIN2 (notacja BCM) podłączonych do mostka H
  • importuj Adafruit_PCA9685 dla modułu PWM

Piny Rpi są połączone w następujący sposób 25-AIN1, 8-AIN2, 24-BIN1, 23-BIN2 (BCM) i tryb sterowania mostkiem H (przód, tył, stop, krótka przerwa). Mostek H potrzebuje również dwóch sygnałów PWM, dzięki czemu możemy sterować prędkością lub obrotem silnika. Ponieważ w projekcie mamy już kontroler PWM (używany do serwomechanizmu) wykorzystamy go również do wygenerowania PWM dla mostka H.

Moduł PWM wykorzystuje protokół komunikacyjny I2C. Skorzystałem z pracy po wyjęciu z pudełka Adafruit_PCA9685. Biblioteka

Krok 7: Montaż samochodu - koła

Montaż samochodu - koła
Montaż samochodu - koła
Montaż samochodu - koła
Montaż samochodu - koła

Zaczniemy od podłączenia silników napędowych do obudowy samochodu. Silniki z lewej/bocznej strony łączą się ze sobą, a obie pary podłącza się do kabla zasilającego, który później zostanie podłączony do płytki drukowanej. Ważna uwaga przy łączeniu silników koła z każdej strony muszą się obracać w tym samym kierunku.

Krok 8: Zasilanie (baterie AA) Opcja 1/2

Zasilanie (baterie AA) Opcja 1/2
Zasilanie (baterie AA) Opcja 1/2
Zasilanie (baterie AA) Opcja 1/2
Zasilanie (baterie AA) Opcja 1/2
Zasilanie (baterie AA) Opcja 1/2
Zasilanie (baterie AA) Opcja 1/2
Zasilanie (baterie AA) Opcja 1/2
Zasilanie (baterie AA) Opcja 1/2

Napiszę dwie możliwości zasilania samochodu. Pierwsza to z akumulatorów 10xAA. Na ostatnim obrazku narysowałem zworki w czerwonych kolorach, które trzeba założyć.

Krok 9: Zasilanie (baterie Li-Po 7.2V) Opcja 2/2

Zasilanie (akumulatory Li-Po 7,2 V) Opcja 2/2
Zasilanie (akumulatory Li-Po 7,2 V) Opcja 2/2
Zasilanie (akumulatory Li-Po 7,2 V) Opcja 2/2
Zasilanie (akumulatory Li-Po 7,2 V) Opcja 2/2

A druga opcja to akumulator LI-PO 7.2. W tym przypadku otrzymaliśmy 3 napięcia – 5V dla Rpi i modułu, 6V dla serw i bezpośrednio z akumulatorów 7,2V dla silników napędowych. Musiałem użyć dwóch modułów obniżających

Opcja 2 z LI-PO jest lepsza:

  • Baterie mają większą pojemność – samochód będzie jechał dłużej
  • Większe napięcie dla silników napędowych – samochód będzie jechał szybciej
  • Mniejsze prawdopodobieństwo, że po rozpoczęciu lokalizacji silników napędowych możemy mieć ogromny spadek napięcia i restarty RPI.

Krok 10: Lutowanie

Lutowanie
Lutowanie
Lutowanie
Lutowanie
Lutowanie
Lutowanie
Lutowanie
Lutowanie

Włożyłem na PCB kilka przekładek do modułu PWM. Nie ma co pisać tylko sprawdź zdjęcia jak to wszystko zlutować

Krok 11: Aparat

Kamera
Kamera

podłączamy kamerę, tutaj jest napisane jak wycentrować mechanizmy serwa przed zamontowaniem w uchwycie kamery, ale najkrótszym sposobem jest delikatne ręczne sprawdzenie pozycji maksymalnego obrotu i ustawienie serwa w pozycji środkowej. Ten wyśrodkowany serwomechanizm wkładamy do uchwytu kamery w pozycji środkowej (kamera jest skierowana na wprost jak na zdjęciu)

Krok 12: Łączenie części samochodowych

Składanie części samochodowych
Składanie części samochodowych
Składanie części samochodowych
Składanie części samochodowych
Składanie części samochodowych
Składanie części samochodowych

Do PCB wykonałem mały stolik z pleksi

Krok 13: Konfiguracja App.remoteme.org

Konfiguracja App.remoteme.org
Konfiguracja App.remoteme.org

Skorzystałem z darmowego systemu app.remoteme.org, który pomaga w nawiązywaniu połączeń i ma już potrzebne nam skrypty

W tej instrukcji pokażę tylko krok po kroku, co należy zrobić, aby samochód jeździł (tutaj znajdziesz więcej szczegółów)

  • Zarejestruj się na https://app.remoteme.org po rejestracji Zostaniesz automatycznie zalogowany
  • otwórz zakładkę Token po lewej stronie, a następnie kliknij „nowy token” podaj nazwę i kliknij OK, Właśnie utworzyliśmy nowy token (obrazek na ekranie)
  • w tym przykładzie wartość tokena to: ~1_&p@+BNnZ@A+x8 (twój będzie inny;))

Krok 14: Konfiguracja RasbperryPi

Konfiguracja RasbperryPi
Konfiguracja RasbperryPi

przy konsoli putty (tu jak ustawić nasze RPi włącz komunikację I2c kamery)

git klon git://github.com/remoteme/remoteme.git

pilot cd

python3.5 install.py

  • Instalator zada nam kilka pytań na wszystkie odpowiedzi [Tak] i potwierdzi [enter]
  • gdy instalacja poprosi o token wklejamy (shift+insert) token skopiowany z aplikacji i Enter
  • nazwa na przykład Rpi
  • identyfikator urządzenia 1 Enter
  • po instalacji – uruchom program

./runme.sh

Krok 15: Sprawdzanie połączeń

Sprawdzanie połączeń
Sprawdzanie połączeń

Wróćmy do

W zakładce urządzeń zobaczymy nasze podłączone RPi (zielona ikona łącza oznacza, że RPi jest teraz połączone)

Krok 16: Dodawanie skryptu Python

Dodawanie skryptu Pythona
Dodawanie skryptu Pythona
Dodawanie skryptu Pythona
Dodawanie skryptu Pythona

Teraz dodamy skrypt Pythona, jest już w szablonach, więc nie musimy niczego programować.

Na karcie urządzeń otwórz menu RasbperryPi i wybierz „Dodaj skrypt zewnętrzny”.

Gdy pojawi się nowe okno, podaj informacje jak na obrazku powyżej

Nie zapomnij wybrać szablonu „car4wd”. Po wykonaniu tych kroków remoteme.org doda skrypt Pythona do naszego RasbperryPi i zrestartuje go

Krok 17: Sprawdzanie, czy skrypt Python został pomyślnie dodany

Sprawdzanie, czy skrypt Python został pomyślnie dodany
Sprawdzanie, czy skrypt Python został pomyślnie dodany

W zakładce urządzeń należy dodać nowe urządzenie skryptu Pythona, a jego deviceId to 2. Do tego urządzenia strona internetowa wyśle wiadomości do kontroli samochodu

Krok 18: Dodawanie strony internetowej do Control Car

Dodawanie strony internetowej do Control Car
Dodawanie strony internetowej do Control Car

w zakładce urządzenia kliknij "Nowe", a następnie "Strona internetowa". Po prostu dodajemy kolejne urządzenie - webPage użyjemy go do sterowania naszym samochodem. A ponieważ na stronie użyliśmy szablonu "car4wdDesktop" to już pliki są prawie gotowe do użycia

Krok 19: Skonfiguruj urządzenie strony internetowej do sterowania samochodem 1/2

Skonfiguruj urządzenie strony internetowej do sterowania samochodem 1/2
Skonfiguruj urządzenie strony internetowej do sterowania samochodem 1/2

Rozwiń Stronę internetową na karcie urządzenia i kliknij index.html, a następnie Otwórz

Krok 20: Skonfiguruj urządzenie strony internetowej do sterowania samochodem 2/2

Skonfiguruj urządzenie strony internetowej do sterowania samochodem 2/2
Skonfiguruj urządzenie strony internetowej do sterowania samochodem 2/2

Pojawi się okno, a następnie musimy podać deviceId naszego skryptu Pythona w naszym przypadku deviceId to 2. Zmieńmy miejsce pokazane na obrazku

Krok 21: Otwórz centrum sterowania samochodem

Otwórz centrum kontroli samochodu
Otwórz centrum kontroli samochodu
Otwórz centrum kontroli samochodu
Otwórz centrum kontroli samochodu

Teraz czas otworzyć naszą stronę i zobaczyć, jak to działa. Na karcie urządzenia kliknij index.html a następnie "Otwórz w nowej karcie" Aby uzyskaćpodgląd wideo Musisz użyć przeglądarki Chrome lub Firefox inne przeglądarki nie obsługują w pełni webRTC

Krok 22: Konfiguracja kamery 1/2

Konfiguracja kamery 1/2
Konfiguracja kamery 1/2

Gdy poruszamy myszką w obszarze wideo, kamera powinna zmienić pozycję i powinna działać dokładnie tak, jak w grach FPS. Prawdopodobnie nie poruszy się poprawnie

Krok 23: Konfiguracja kamery 2/2

Konfiguracja kamery 2/2
Konfiguracja kamery 2/2

Otwórz script.js (karta urządzeń rozwiń stronę, a następnie kliknij script.js, a następnie otwórz) i znajdź miejsce, które pokazałem na ekranie

w moim przypadku centralna pozycja to 560 i 430, a zakres ruchów dla obu osi 200

Musisz poeksperymentować z tymi liczbami, aby uzyskać środek położenia kamery i płynne ruchy, jeśli skorzystałeś z tego samouczka po prostu skopiuj wklejone wartości

Krok 24: Jazda 1/2

Jazda 1/2
Jazda 1/2

Jeśli naciśniesz strzałkę w górę na klawiaturze, wskaźniki powinny zmienić pozycje i samochód powinien jechać. Jeśli naciśniesz strzałkę w górę i samochód się skręca to musisz dodać/usunąć minus w miejscach na ekranie.

Po tej operacji po uderzeniu strzałki „w górę” samochód powinien jechać do przodu, a samochód ze strzałką w dół powinien jechać do tyłu.

Krok 25: Jazda 2/2

Jazda 2/2
Jazda 2/2

Teraz skręcaj – naciśnij strzałkę w lewo, jeśli samochód skręca w prawo Musisz odwrócić kable (patrz obrazek powyżej)

Jeśli przylutujesz te kable to możesz to zmienić w script.js po prostu zmień kolejność wysyłania prędkości silników, przed:

pos=putByte(ret, poz, carController.getMotorMode(carController.getRightSideSpeed())); pos=putByte(ret, poz, Math.abs(carController.getRightSideSpeed()*255));

pos=putByte(ret, poz, carController.getMotorMode(-carController.getLeftSideSpeed()));

pos=putByte(ret, poz, Math.abs(carController.getLeftSideSpeed()*255));

po:

pos=putByte(ret, poz, carController.getMotorMode(-carController.getLeftSideSpeed()));

pos=putByte(ret, poz, Math.abs(carController.getLeftSideSpeed()*255));

pos=putByte(ret, poz, carController.getMotorMode(carController.getRightSideSpeed()));

pos=putByte(ret, poz, Math.abs(carController.getRightSideSpeed()*255));

a teraz trzeba pobawić się minusami jak jeden krok wcześniej, żeby zadziałało poprawnie;). Jak zapewne zauważyłeś po uderzeniu strzałki w górę samochód nie jedzie z pełną prędkością, aby samochód poruszał się szybciej, wystarczy szybko puścić strzałkę w górę, gdy jest w maksymalnej pozycji i ponownie naciśnij i przytrzymaj

Krok 26: Jak to działa?

Strona internetowa wysyła 9-bajtowe wiadomości do skryptu Pythona w formacie:

  • 1 bajt jeden bajt wartość całkowita 1
  • 2 bajty liczba całkowita X pozycja kamery
  • 2 bajty liczba całkowita Y pozycja kamery
  • 1 bajtowa liczba całkowita lewy tryb silnika (3=do tyłu, 1=do przodu, 2=stop)
  • 1 bajt liczba całkowita lewego silnika
  • 1 bajtowa liczba całkowita prawy tryb silnika (3=do tyłu, 1=do przodu, 2=stop)
  • 1 bajt liczba całkowita prawa prędkość silnika

wysyłanie wiadomości odbywa się w pliku script.js w funkcji "sendNow()"

na RasbperryPi python.py otrzymuje ten komunikat w funkcji "onUserMessage"

Możesz to sprawdzić i trochę pograć, aby wiedzieć, co się dzieje.

opis funkcji klasy tutaj

Krok 27: Tablet, sterowanie mobilne

Tablet, sterowanie mobilne
Tablet, sterowanie mobilne

Dodajemy nową stronę dokładnie tak jak poprzednio, ale teraz wybieramy szablon "car4wdMobile"

Następnie konfigurujemy wszystko w script.js, tak jak zrobiliśmy to w przypadku strony sterującej pulpitem. Format wiadomości jest dokładnie taki sam, więc nie musimy zmieniać skryptu python.py.

Krok 28: Otwórz stronę w telefonie komórkowym

Otwórz stronę w telefonie komórkowym
Otwórz stronę w telefonie komórkowym
Otwórz stronę w telefonie komórkowym
Otwórz stronę w telefonie komórkowym

Zamiast logować się na swoje konto z telefonu komórkowego, po prostu zeskanuj QR anonimowy adres URL.

szczegóły QR tutaj

Jeśli Twoja mobilna kontrola działa, gdy RPi i komórka są na tym samym Wi-Fi, ale nie działa, jeśli korzystasz z mobilnego internetu, musisz dodać turn server, jak to zrobić napisałem tutaj

Krok 29: Dodawanie Turn Server

Dodawanie serwera tur
Dodawanie serwera tur
Dodawanie serwera tur
Dodawanie serwera tur
Dodawanie serwera tur
Dodawanie serwera tur

Czasami (gdy jesteś za NAT lub niektórymi ustawieniami zapory sieciowej) nie możesz połączyć swojego robota z innej sieci, wtedy Twój robot jest podłączony. To nie jest duży problem, a następnie musisz dodać turn server.

Testowałem serwer firmy XIRSYS (jest darmowy do użytku deweloperskiego) i pokażę jak skonfigurować serwer turn przy użyciu systemu XIRSYS

Zarejestruj się:

global.xirsys.net/dashboard/signup

następnie kliknij "plus", aby dodać aplikację

po prawej stronie pod "statycznymi kredytami na turę" Masz wszystkie potrzebne dane. Skopiuj go do pliku webrtc_streamer.conf, aby to zrobić, przejdź do

rozwiń urządzenia RaspberryPi

kliknij plik webrtc_streamer.conf

kliknij otwórz

i dodaj informacje

turn_server=turn_username=

turn_credential=

po zakończeniu edycji powinieneś mieć coś takiego na ekranie.

następnie kliknij Zapisz i uruchom ponownie You Rpi, klikając menu na urządzeniu RasbperryPi i wybierz restart

Po ponownym uruchomieniu programu RPi możesz zobaczyć podgląd wideo na swoim telefonie komórkowym, nawet jeśli korzystasz z mobilnego internetu.

Krok 30: Sterowanie mobilne

Sterowanie mobilne
Sterowanie mobilne

w kółku 1 umieszczamy lewy kciuk, w 2 prawym – nie musi być dokładnie w tych punktach – strona internetowa ustawi pozycję zero zaraz po dotknięciu ekranu i poruszając kciukami (jazda w lewo, pozycja kamery w prawo) Możesz sterować Twój samochód

Krok 31: Podsumowanie

Mam nadzieję, że podobał Ci się ten samouczek, tak jak pisałem wcześniej w tym samouczku jest więcej szczegółów na temat tego, jak to działa pod maską.

kilka linków:

remoteme.org - strona domowa remoteme.org tam znajdziesz dokumentację i tutoriale

FB fanpage - fanpage na Facebooku najnowsze informacje o remoteme.org

Youtube - kilka filmów z projektu, tutoriale

Pozdrawiam, Maciek

Zalecana: