Spisu treści:

Robot 4WD sterowany za pomocą zdalnego gamepada USB: 6 kroków
Robot 4WD sterowany za pomocą zdalnego gamepada USB: 6 kroków

Wideo: Robot 4WD sterowany za pomocą zdalnego gamepada USB: 6 kroków

Wideo: Robot 4WD sterowany za pomocą zdalnego gamepada USB: 6 kroków
Wideo: Zdalnie sterowany samochodzik - Arduino projekt 2024, Czerwiec
Anonim
Image
Image

Do mojego kolejnego projektu robotycznego byłem zmuszony zaprojektować/zaprojektować własną platformę robota z powodu nieprzewidzianych okoliczności.

Celem jest, aby był autonomiczny, ale najpierw musiałem przetestować jego podstawową zdolność prowadzenia pojazdu, więc pomyślałem, że to fajny projekt poboczny, aby zachowywać się i być sterowanym tak, jakby był pojazdem RC (sterowanym radiowo), ale zamiast tego użyj gamepada USB.

Wyniki były mniej więcej tak dobre lub lepsze, niż się spodziewałem.

Zaletą korzystania z trasy USB Gamepad, z dużą ilością programowania, jest to, że mogę ją dostosować i dodać do tego, co już zrobiłem. Nie mam żadnego rzeczywistego doświadczenia w budowaniu pojazdu RC, ale wyobrażam sobie, że jest się prawie utknął z tym, co zawiera nadajnik RC (joysticki / przyciski itp.) I odbiornik RC.

Na przykład dodałem pewne rozpoznanie, że robot uderzył w ścianę, po prostu przez oprogramowanie wykrywające wysokie prądy i niskie wartości prędkości enkodera.

Opcjonalnie można dodać do robota kilka kamer USB, w zależności od ich liczby i ich rozmieszczenia, można jeździć robotem po salonie i do innego pokoju, siedząc w innym miejscu przed komputerem, do którego podłączony jest gamepad USB. to.

Ten Instruktaż nie będzie prawdziwym, szczegółowym, kompleksowym, szczegółowym poradnikiem, ale postaram się podać jak najwięcej szczegółów.

Kieszonkowe dzieci

Sugerowane części: Większość z nich uzyskałem od Servo City (Aktobotyka).

2 - 13,5 kanały U, po bokach ramy podstawy. Silniki są na niej montowane. Poszedłem z czymś krótszym, a moje silniki są zamontowane w samych rogach, co utrudniało ich montaż.

2 - 12-calowe kanały U z przodu i z tyłu ramy podstawy.

2 - 15 ceowniki na zderzaki z przodu i z tyłu

2 - 7 (a może to było 7,5 ?) Kanały U dla przednich kolumn. To nie jest zbyt ważne, długości mogą się różnić. Zależy to od wysokości tylnych kolumn i na jaką wysokość wybierzesz pod kątem Kanał U, który łączy się między nimi.

2 - (długość?) Kanały U dla kątownika, przód-tył, łączące kolumny pionowe. Ten jest krytyczny, ponieważ Servo City / Actobotics sprzedaje w tym celu panele lub wsporniki o kącie 45 stopni, ale będziesz musiał wykonać trochę matematyki / trygonu, aby upewnić się, że uzyskasz prawidłowe długości.

2 - (długość?) Kanały U służące jako boczne zderzaki wyższego poziomu, znowu zależą od tego, co robisz z podstawą

2 - (długość?) Kanały U służące jako wyższy poziom przedniego i tylnego zderzaka, jak wyżej.

1 - (długość?) Kanał w kształcie litery U, który służy jako najwyższy element, rozciąga się w poprzek tylnych kolumn. Ten może nie być zbyt krytyczny, ponieważ możesz zamontować na górze lub przed / za pionowymi kolumnami.

12 (około) kanałów L lub wsporników. Służą one wielu celom, ale zasadniczo zapewniają integralność strukturalną/wytrzymałość narożników ramy podstawy ORAZ kolumn pionowych.

4 (+?) 3-otworowe do 5-otworowych kanałów płaskich. Zapewniają one również robotowi wytrzymałość konstrukcyjną.

ServoCity sprzedaje dwa główne rodzaje płaskich paneli o dużej powierzchni, przydatnych do użycia jako dolna taca ślizgowa lub górna, w której powinna znajdować się bateria i kontrolery, a nawet jako górna powierzchnia dla czujników.

Jest panel 4 (4,5?) "X 12", a myślę, że drugi to panel 9 (9,5?) "X 12.

Teraz robi się ciekawie i może być mylące i drogie (małe części sumują się). Wszystkie kanały itp. można połączyć ze sobą za pomocą tych elementów łączących, których jest KILKA. W tym miejscu przepraszam, że nie mam wyczerpującej, szczegółowej, konkretnej listy części.

Chodzi o to, że tak naprawdę nie wiesz, których możesz potrzebować, ani ile.. ponieważ jest tak wiele sposobów, aby dopasować te elementy do siebie.

Mogę wymienić to, czego użyłem:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

Poniższe dwa są bardzo przydatne, a ja po prostu uzupełniłbym je:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Dalej są wszystkie śruby (śruby). Zacząłem od paczki KAŻDEGO rozmiaru i przejrzałem większość z nich. Użyłem dłuższych śrub tam, gdzie rozmiar nie miał znaczenia, a krótsze zarezerwowałem tam, gdzie były WYMAGANE, ponieważ żadna inna długość nie zadziała.

Na koniec powinieneś otrzymać 1 torbę z tych:

www.servocity.com/6-32-nylock-nuts-pack

Nie używałem ich tak wielu, ale są one (chyba) kluczowe, aby z czasem silniki nie wibrowały z ramy. Tylko dwa będą działać na silnik, ze względu na kanał U

Będziesz potrzebować co najmniej 4 z nich, możesz dostać dodatkowy lub więcej w przypadku uszkodzenia jednego (zaufaj mi, możesz kilka razy zakładać / zdejmować silniki):

www.servocity.com/heavy-duty-clamping-shaf…

Zazwyczaj wały silników mają 6 mm, a osie 1/4 (0,25 cala).

Dostałbym kilka czarnych śrub, podobno mocniejszych, i użyłbym ich do powyższych zacisków, a NIE używał śrub dołączonych do zacisków:

(Myślę, że to są te):

Łożyska o średnicy 4 - 1/4" (0,25")

1 - woreczek czarnych przekładek 1/4"

4 - Mocowanie piasty D

www.servocity.com/0-770-clamping-d-hubs

4 - Wały D (#6340621.375" (1-3/8")

4 - 6 koła do dużych obciążeń

www.servocity.com/6-heavy-duty-koło

Zauważ, że uwielbiam te koła, ale mają krawędź z twardej gumy. Wydaje się, że dobrze radzą sobie na twardych podłogach, dywanach i prawdopodobnie na twardym betonie. Nie sprawdzi się na trawie, piasku itp.

RÓWNIEŻ będą miały tendencję do zabrudzenia dywanu!!!

4 - silniki:

www.servocity.com/motors-actuators/gear-mo…

Poszedłem z 223 obr./min, dobrą maksymalną prędkością w pomieszczeniach, mogłem również dość łatwo poruszać robotem (ciężkim z 2 bateriami SLA 12 V) w zwolnionym tempie.

2 - enkodery silnika dla silników. (Roboclaw Servo City obsługuje tylko 2 enkodery)

1 - Sterownik silnika Roboclaw 2X45A, upewnij się, że masz ten z zielonymi listwami zaciskowymi, a nie pinami…. cóż… każdy ma swoje zalety. Z perspektywy czasu… Mogłem zdobyć szpilki.

Myślę, że to z Servo City.

SparkFun sprzedaje Arduino Uno (tego właśnie użyłem), a także Redboard Artemis jako menedżera dysku.

Będziesz chciał, aby Raspberry Pi 3 (lub 4?) był twoim "mózgiem" wysokiego poziomu i interfejsem dla ciebie.

Będziesz potrzebować okablowania, przełączników, bezpieczników i bardzo wytrzymałej diody „flyback”.

Użyłem akumulatora głębokiego cyklu SLA Duracell 12V 14AH, ale możesz użyć czegokolwiek.

OSTRZEŻENIE! Projekt tego robota (WYSOKI i SZEROKI, ale KRÓTKI) zakłada rodzaj ciężkiego środka ciężkości, jaki zapewniłby akumulator SLA. Może nie działać dobrze z innymi typami akumulatorów nowszych technologii. LiPo, Lion itp. Mogłoby się łatwo przewrócić.

Od Pololu dostałem kilka przejściówek do beczek, dzięki którym mogłem samodzielnie zasilać Arduino i/lub Redboard, mimo że byłyby podłączone do Raspberry przez USB, bo nie chciałem polegać na mocy Raspberry. (Szczególnie montaż kamer, czujników itp.)

Będziesz potrzebował regulatora napięcia obniżającego napięcie 12 do 5 V, minimum 5 A (?) dla Raspberry. Pozostałe mogą obsługiwać napięcie od 7 do 15 V, a więc bezpośrednio do akumulatora SLA.

To wszystko na części.

Czego NIE zrobiłbym - przekładnia skośna 90 stopni.

Ponownie, na mojej playliście Robotics na YouTube znajduje się wiele filmów, w których opisano większość z powyższych.

Krok 1: Budowa

Szczerze mówiąc, wszystkie moje kroki konstrukcyjne są już w formie youtube'ów. Możesz je zobaczyć na mojej playliście Robotics, zaczynając od „Wallace Robot 4”. Poprzednie (Wallace II, Wallace III) również mają dobry materiał

www.youtube.com/playlist?list=PLNKa8O7lX-w…

Krok 2: Przetestuj Roboclaw, silniki i enkodery

Twórcy Roboclaw (BasicMicro) mają aplikację Windows, której możesz użyć, aby upewnić się, że prawidłowo podłączyłeś silniki i enkodery do Roboclaw. Będziesz podłączać silniki po tej samej stronie równolegle do Roboclaw. Możesz wybrać użycie przewodów enkodera, tylko na tylnych silnikach lub przednich silnikach, a może nawet lepiej - PO PRZEKĄTNEJ.

Powód mojej sugestii dotyczy (późniejszego) sprawdzenia, czy robot się zaciął. Stan po przekątnej, jeśli przednie/tylne koła obracają się/nie obracają, może być lepszy niż tylko przednie lub tylko tylne.

UWAGA: czego NIE zrobiłem, to użyć Arduino do połączenia (poprzez piny GPIO) z enkoderami - jeśli to zrobiłeś, mógłbyś mieć Roboclaw obsłużyć 2 enkodery, a następnie Arduino obsłużyć pozostałe dwa i po prostu zapytaj Roboclaw o dwie wartości enkodera (i prędkości).

UWAGA: Użyłem aplikacji BasicMicro do wstępnego skonfigurowania Roboclawa do zwiększania / zwalniania. Jest to dobre dla ochrony sprzętu i elektroniki. Na mojej playliście Robotyka jest o tym film.

Prawie zapomniałem: kupiłem też kable typu bullet-connector, które przechodzą między kablami silnika a Roboclawem. UWAGA: jeśli to zrobisz, zauważysz, że całkowita długość kabla jest NAPRAWDĘ DŁUGA. Ale nie chciałem ciąć, jeśli nie musiałem. Zrobiłem (na późniejszych krokach) napotkałem problemy z komunikacją z USB między Raspberry i Arduino, prawdopodobnie z powodu szumu EMI.. ale rozwiązałem to za pomocą oprogramowania.

W razie problemów można skrócić przewody - można też dokupić metalowe osłony (od Amazona, średnica 1 ).

Ostatnia rzecz: to jeszcze muszę zrobić --- mieć automatyczną konfigurację Roboclaw lub automatyczne dostrajanie (za pomocą enkoderów), aby oba silniki po lewej i prawej stronie poruszały się z tą samą prędkością, a robot szedł prosto.

Mój zakrzywia się bardzo nieznacznie na około 12 stóp, ale nie na tyle, abym poczuł potrzebę zrobienia czegoś z tym.

Krok 3: Dodawanie i programowanie Arduino

Potrzebna będzie wtyczka beczki i trochę okablowania, a także kabel USB. Upewnij się, że masz właściwy dla złącza Arduino.

Musisz pobrać Arduino IDE.

Tutaj na Github jest najnowszy szkic, który obsługuje kierowanie robotem:

github.com/elicorrales/wallace.robot.ardui…

Podłączysz Arduino do komputera z uruchomionym IDE i w oparciu o sposób napisania szkicu będziesz używał pinów 10 i 11 w Arduino do komunikacji szeregowej (Software Serial) z Roboclaw.

Opracowałem prosty protokół komunikacyjny pomiędzy Raspberry Pi a Arduino.

Jest oparty na znakach ASCII, co ułatwia debugowanie i testowanie za pomocą okna „monitor szeregowy” Arduino IDE.

Polecenia zaczynają się od cyfry „0” (zero) i po prostu idą w górę w razie potrzeby

Polecenia zaczynające się od „20” są bezpośrednimi poleceniami Roboclaw, a te poniżej tej liczby są ściśle związane z Arduino.

Ze względu na szum EMI poprawiłem ciąg poleceń, aby zawierał sumę kontrolną.

Tak więc każdy ciąg będzie zawierał:

# liczba tokenów w ciągu, w tym ten

suma kontrolna

Na przykład, powiedzmy, że chcesz, aby Arduino odpowiadało za pomocą menu poleceń:

4 0 12 16

„4” to cztery żetony w ciągu.

"0" to polecenie MENU.

„12” to losowa liczba, którą wybrałem.

„16” to suma 4 + 0 + 12.

To samo polecenie MENU może być inne:

4 0 20 24

Ponieważ wybrałem inną liczbę losową, suma kontrolna też jest inna.

Na przykład, powiedzmy, że chcesz iść do przodu ze 100% szybkością:

5 29 0 134 100

"5" pięć żetonów

„29” polecenie NAPRZÓD

„0” liczba losowa

"134" suma kontrolna

"100" parametr 1 (w tym przypadku prędkość)

Jeśli Arduino nie może zweryfikować tego przychodzącego ciągu, po prostu go upuszcza / ignoruje, bez odpowiedzi.

Jeśli Arduino nie otrzyma kolejnego polecenia ruchu z X milisekund, wysyła do Roboclawa silniki STOP.

Arduino uruchamia się i zaczyna wysyłać automatyczny status do portu USB… chyba że zostanie poproszony o zaprzestanie tego.

W tym momencie powinieneś być gotowy, aby spróbować sterować Roboclawem i obserwować obracające się silniki, używając tylko "Serial Monitor" w IDE.

Krok 4: Dodawanie i programowanie Raspberry Pi (node.js)

Ponownie, jeśli spojrzysz na moją playlistę Robotics, nawet od samego początku, przejrzałem każdy krok, aby uruchomić Raspberry.

Jedyną rzeczą, którą mogłem pominąć, jest to, że będziesz potrzebować regulatora 5 V i albo jakoś zbuduj, wytnij/zmodyfikuj kabel USB, albo zasil Raspberry w inny sposób.

Tutaj na Github jest wszystko, czego potrzebujesz w Raspberry do komunikacji z Arduino przez USB.

github.com/elicorrales/wallace.robot.raspb…

Istnieją nawet skrypty testowe.

Możesz spojrzeć na kod serwera node.js, a zobaczysz, jak Raspberry konwertuje zwięzłe instrukcje numeryczne na ciągi url typu REST. Możesz użyć "curl" do wysyłania poleceń testowych.

Przykład:

twój adres IP RP3:8084/arduino/api/forward/50

spowoduje, że silniki na chwilę obrócą koła do przodu.

Jeśli umieścisz to w pętli skryptu powłoki, zobaczysz, że koła nadal się obracają.

Kod node.js (server.js) zawiera funkcję ponownego połączenia w przypadku utraty komunikacji szeregowej z Arduino. Możesz to przetestować, po prostu odłączając Arduino od Raspberry i ponownie go podłączając.

Upewnij się, że prędkość transmisji szeregowej jest zgodna między tymi dwoma.

Ze względu na to, że Arduino wyrzuca złe pakiety danych, oraz ponieważ na poziomie node.js i na poziomie javascript przeglądarki wszystko jest zakodowane, aby wysyłać wiele poleceń „drive”, udało mi się uruchomić nawet 2 000 000 bodów (2Mb/s).

Jeśli uruchomisz skrypty testowe i zobaczysz, że koła się obracają, jesteś gotowy do następnego kroku.

Krok 5: Ostatni krok - Programowanie / Korzystanie z klienta strony internetowej

W linku Github do części Raspberry znajdują się pliki klienta.

index.html. index.js. p5.min.js.

Obsługują one gamepada USB za pośrednictwem interfejsu API Gamepad (opartego na przeglądarce) i powinieneś zobaczyć różne przyciski i suwaki dostępne również na stronie internetowej.

Kod javascript pyta (odpytuje) wartości osi X i Y dla jednego z joysticków.. (w zależności od posiadanych joysticków/gamepadów może być konieczne dostosowanie kodu). Odpytuje bardzo szybko i wysyła wszystkie te wartości do serwera node.js nasłuchującego w 8084.

Surowe wartości osi X i Y joysticków mieszczą się w zakresie od 0 do 1.

Ale funkcja biblioteki sterownika silnika Roboclaw używana w Arduino do sterowania silnikami oczekuje wartości od -100 do 0 (wstecz) lub (0 do 100) w przód.

Więc…. to jest cel włączenia p5.min.js. Tak się składa, że ma tę bardzo przyjemną, wygodną funkcję map(), w której podajesz surową wartość, jest to surowy (bieżący) zakres i nowy, pożądany zakres. I konwertuje surową wartość na wartość w nowym, zmapowanym zakresie.

Kolejna kwestia: przy prędkości 100 robot może być bardzo trudny. Ciągle na coś wpadałem. Ale nawet gdy stajesz się w tym lepszy, nadal jest drażliwy, gdy obracasz się w lewo lub w prawo.

Coś, co możesz dodać, byłoby podobne do obecnego suwaka Maksymalna prędkość na stronie internetowej. Ten suwak określa, jaka jest najwyższa lub maksymalna wartość, do której będziesz mapować joysticki Xs i Ys.

Przykład:

Powiedzmy, że mapujesz 0 -> 1 do 0 -> 100. Kiedy wciśniesz joystick do końca, jesteś na 100. Drażliwy. Może być za szybko.

Ale jeśli przesuniesz nieco suwak maksymalnej prędkości, teraz mapujesz 0 -> 1 do 0 -> 80 lub 70.

Oznacza to, że masz większe pole manewru, aby poruszać joystickiem bez tak dużej zmiany prędkości wysyłanej do node.js (i do Arduino).

A dodatkiem, który możesz wprowadzić, jest oddzielenie X (obrót w lewo lub w prawo) od Y (do przodu lub do tyłu) na ich własne maksymalne dostępne prędkości.

W ten sposób możesz pozostawić Ys na poziomie 0 do 100, 0 do -100 dla szybkiego ruchu liniowego, ale obniż maksymalną prędkość Xs, aby uzyskać bardziej kontrolowany ruch obrotowy. Najlepsze z obu światów.

Krok 6: Opcjonalnie: Kieruj robotem za pomocą przeciągania myszy i/lub dotykania zdarzeń

Jeśli dotarłeś tak daleko, wiesz, że warstwy oprogramowania zaczynające się od przeglądarki i drążąc w dół przez JavaScript i dalej na serwer Raspberry node.js, wreszcie na arduino, konwertują współrzędne X i Y joysticka Gamepad na do przodu” (lub „wstecz” itp.) (i ich wartość prędkości).

Co więcej, wiesz, że podczas gdy X i Y joysticków mają wartość od 1 do 1, przez zero, do 1, te muszą być przeliczone między zerem a 100. Cóż, maksyma zależy od ustawienia maksymalnej prędkości na stronie internetowej.

Więc… jedyną rzeczą do zrobienia, aby użyć myszy lub dotknąć zdarzeń (jak na smartfonie), jest przechwytywanie tych zdarzeń, chwytanie X i Y.

ALE ---- te X i Y NIE znajdują się między ujemną 1 a 1. Zaczynają się od 0 i rosną dodatnio, ponieważ są to zasadniczo piksele lub względne współrzędne ekranowe jakiegoś elementu HTML (takiego jak panel ładowania początkowego) lub kanwy.

Więc znowu, funkcja "map()" biblioteki Js P5 jest bardzo przydatna do ponownego mapowania do tego, czego potrzebujemy.

Zrefaktorowałem kod, aby mieć dwie różne strony internetowe, jedną na komputer stacjonarny za pomocą gamepada, a drugą na telefon komórkowy, korzystając ze zdarzeń dotykowych.

Ponadto, gdy X i Y zostaną ponownie zmapowane, są wprowadzane do tego samego łańcucha kodu itd., podobnie jak X i Y z Gamepada.

Zalecana: