Mündəricat:

Uzaqdan USB Gamepad vasitəsilə idarə olunan 4WD Robot: 6 addım
Uzaqdan USB Gamepad vasitəsilə idarə olunan 4WD Robot: 6 addım

Video: Uzaqdan USB Gamepad vasitəsilə idarə olunan 4WD Robot: 6 addım

Video: Uzaqdan USB Gamepad vasitəsilə idarə olunan 4WD Robot: 6 addım
Video: BroadLink RM4 mini - Ağıllı ev üçün IR nəzarətçi, uzaqdan idarəetmənin dəyişdirilməsi 2024, Iyun
Anonim
Image
Image

Növbəti robototexnika layihəm üçün gözlənilməz hallar səbəbindən öz robot platformamı dizayn etmək/dizayn etmək məcburiyyətində qaldım.

Məqsəd avtonom olmasıdır, amma əvvəlcə onun əsas sürücülük qabiliyyətini yoxlamalıydım, buna görə də RC (radio nəzarətli) bir vasitə kimi davranmaq və idarə olunmaq əyləncəli bir yan layihə olacağını düşündüm., amma bunun əvəzinə USB Gamepad istifadə edin.

Nəticələr gözlədiyimdən daha yaxşı və ya daha yaxşı oldu.

Bir çox proqramlaşdırma ilə USB Gamepad marşrutuna getməyin üstünlüyü, onu fərdiləşdirmək və əvvəldən etdiklərimə əlavə etməkdir. RC avtomobili qurmaqda heç bir təcrübəm yoxdur, amma təsəvvür edirəm ki, RC ötürücüsünün (joysticklər/düymələr və s.) Və RC alıcısının yanında olan hər şeydən çox sıxılır.

Məsələn, proqramın yüksək cərəyanları və aşağı kodlayıcı sürət dəyərlərini aşkar etməsi ilə robotun bir divara vurduğunu tanıdım.

İsteğe bağlı olaraq, robotun USB Gamepad -ı olan kompüterin qarşısında başqa bir yerdə oturarkən robotun yaşayış sahəsinin ətrafında və başqa bir otağa aparıla bilər. o.

Bu Təlimat əsl, ətraflı, hər şey daxil, addım-addım necə olmayacaq, amma bacardığım qədər detal verməyə çalışacağam.

Təchizat

Təklif olunan hissələr: Bunun çoxunu Servo City -dən (Actobotics) əldə etdim.

2 - 13.5 U -kanalları, baza çərçivəsinin tərəfləri üçün. Mühərriklər buna quraşdırılmışdır. Daha qısa bir şeylə getdim və motorlarım çox künclərdə quraşdırılıb və onları montaj etmək çətinləşdi.

Əsas çərçivənin ön və arxası üçün 2 - 12 U kanalları.

Ön və arxa tamponlar üçün 2 - 15 U kanalları

2 - 7 (və ya 7,5 idi?) Ön sütunlar üçün U -kanallar. Bu, çox kritik deyil, uzunluqlar dəyişə bilər. Arxa sütunların nə qədər hündürlüyündən və bucağı hansı hündürlükdə qoymağınızdan asılıdır. Aralarında birləşdirən U kanalı.

2-(uzunluq?) Dik sütunları birləşdirən, öndən arxaya açılı üzv üçün U kanalları. Bu çox vacibdir, çünki Servo City / Actobotics bu məqsədlə 45 dərəcə bucaqlı panellər və ya mötərizələr satır, ancaq düzgün uzunluqları əldə etdiyinizə əmin olmaq üçün bir az riyaziyyat / tətik etməlisiniz.

2-(uzunluq?) U kanalları daha yüksək səviyyəli yan tamponlar kimi xidmət edəcək, yenə bunlar baza ilə nə etdiyinizə bağlıdır

2-(uzunluq?) U-kanalları daha yüksək səviyyəli ön və arxa tamponlar kimi xidmət edəcək, buna görə də yuxarıda qeyd edirik.

1 - (uzunluq?) Arxa sütunlar boyunca uzanan ən üst üzv olaraq xidmət etmək üçün U kanalı. Bu, çox kritik olmaya bilər, çünki yuxarıya və ya dik sütunların önünə / arxasına quraşdıra bilərsiniz.

12 (təxminən) L-kanal və ya mötərizədə. Bunlar bir çox məqsədə xidmət edir, lakin əslində təməl çərçivənin künclərinə və dik sütunlara struktur bütövlüyü/gücü verir.

4 (+?) 3-deşikdən 5-çuxurlu düz kanal. Bunlar da robotun struktur gücünü təmin edir.

ServoCity, batareyanın və ya idarəedicilərin gedəcəyi yerə və ya hətta sensorlar üçün daha yüksək bir səth üçün istifadə edilə bilən iki əsas tip geniş panelli panellər satır.

4 (4.5?) "X 12" paneli var və digərinin 9 (9.5?) X 12 panel olduğunu düşünürəm.

İndi hər şeyin maraqlı olduğu və qarışıq və bahalı ola biləcəyi yerdir (kiçik hissələr əlavə olunur). Bütün kanallar və s., Bir neçə ədəd olan bir -birinə bağlana bilər. Ətraflı, ətraflı, xüsusi hissələr siyahısına malik olmadığım üçün üzr istəyirəm.

İş ondadır ki, hansına ehtiyacınız ola biləcəyini və ya neçə olduğunu bilmirsiniz.. çünki bu parçaları bir araya gətirməyin bir çox yolu var.

İstifadə etdiklərimi sadalaya bilərəm:

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

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

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

Aşağıdakı ikisi çox əlverişlidir və bunları yığmaq istərdim:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Sonra bütün vintlər (boltlar). HƏR ölçüdə bir paketlə başladım və çoxunu keçdim. Ölçüsünün əhəmiyyətsiz olduğu yerlərdə daha uzun vintlər istifadə etdim və başqa uzunluqların işləməyəcəyi üçün QISALARINI TƏLƏB edildikləri yerlərə ayırdım.

Nəhayət, bunlardan 1 çanta almalısınız:

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

Çox istifadə etmədim, amma mühərriklərinizin zaman keçdikcə çərçivədən boş titrəməməsini təmin etmək üçün çox vacibdir. U-kanalı sayəsində hər motorda yalnız ikisi işləyəcək

Bunlardan ən az 4 -nə ehtiyacınız olacaq, bir şeyə zərər verdiyiniz təqdirdə əlavə bir şey ala bilərsiniz (inanın, motorları bir neçə dəfə işə sala / sökə bilərsiniz):

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

Tipik olaraq, mühərrik şaftları 6 mm, oxlar isə 1/4 (0.25 düym) təşkil edir.

Güclü olduğu iddia edilən bəzi qara vintlər alardım və yuxarıdakı sıxaclar üçün istifadə edərdim və sıxaclarla birlikdə gələn vintləri İSTİFADƏ ETMƏYƏCƏYdim:

(Düşünürəm ki, bunlardır):

4 - 1/4 "(0.25") diametrli yataklar

1 - qara 1/4 aralıq çantası

4 - D -Hubların sıxılması

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

4-D-Şaftları (#6340621.375 "(1-3/8")

4 - 6 ağır təkərlər

www.servocity.com/6-heavy-duty-wheel

Diqqət yetirin ki, bu təkərləri çox sevirəm, amma sərt rezin kənarları var. Sərt döşəmələrdə, xalçada və yəqin ki, sərt beton gəzintilərində yaxşı işlər görürlər. Çəmən, qum və s.

Eləcə də xalçanızı ləkələməyə meyl edəcəklər !!!

4 - mühərriklər:

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

223 RPM ilə getdim, ən yaxşı daxili sürət, robotumu (2 SLA 12V batareyaları ilə ağır) yavaş hərəkətdə asanlıqla hərəkət etdirə bildim.

2 - mühərriklər üçün motor kodlayıcıları. (Servo City Roboclaw yalnız 2 kodlayıcıdan istifadə edir)

1 - Roboclaw 2X45A motor nəzarətçisi, sancaqlar deyil, üzərində yaşıl terminal blokları olan birini aldığınızdan əmin olun …. Yaxşı … hər birinin öz üstünlükləri var. Xəyal.. Sancaqlar almış ola bilərdim.

Düşünürəm ki, bu, Servo City -dəndir.

SparkFun, Arduino Uno (istifadə etdiyim budur) və Redboard Artemis'i sürücü meneceriniz olaraq satır.

Yüksək səviyyəli "beyinləriniz" və sizə interfeys olaraq bir Raspberry Pi 3 (və ya 4?) İstərsiniz.

Kablolara, açarlara, qoruyuculara və çox möhkəm bir "geri dönmə" dioduna ehtiyacınız olacaq.

Duracell 12V 14AH dərin dövrlü SLA batareyası istifadə etdim, amma nə istəsəniz istifadə edə bilərsiniz.

XƏBƏRDARLIQ! Bu robotun dizaynı (TALL, WIDE, but SHORT), SLA batareyasının təmin edəcəyi bir növ ağırlıq mərkəzini nəzərdə tutur. Digər yeni texnologiyalı batareya paketləri ilə yaxşı işləməyəcək. LiPo, Lion və s. Asanlıqla aşa bilər.

Pololu'dan bir neçə barel fiş adapteri aldım ki, Arduino və/və ya Redboardu USB ilə bağlasalar da müstəqil olaraq gücünü təmin edə bildim, çünki Moruqun gücünə güvənmək istəmirdim.. (Xüsusilə montaj kameraları, sensorlar və s.)

Moruq üçün minimum 5A (?) Olan 12-dən 5V-a qədər geriləmə tənzimləyicisinə ehtiyacınız olacaq. Digərləri 7 ilə 15 V arasında olan hər hansı bir şeyi birbaşa SLA batareyası ilə idarə edə bilərlər.

Bu hissələr üçün.

Etməyəcəyim şey - 90 dərəcə əyilmiş dişli.

Yenə də Robotics youtube pleylistimdə yuxarıdakıların çoxunu izah edən bir çox video var.

Addım 1: Tikinti

Açığı, bütün inşaat addımlarım artıq youtub şəklindədir. Bunları "Wallace Robot 4" dən başlayaraq Robotics pleylistimdə görə bilərsiniz. Əvvəlkilərdə (Wallace II, Wallace III) də yaxşı material var

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

Addım 2: Roboclaw, Motors və Encoders test edin

Roboclaw (BasicMicro) istehsalçılarının mühərrikləri və kodlayıcıları Roboclaw -a düzgün bağladığınızdan əmin olmaq üçün istifadə edə biləcəyiniz bir Windows proqramı var. Roboclawa paralel olaraq eyni tərəfli mühərrikləri bağlayacaqsınız. Enkoder tellərindən istifadə etməyi seçə bilərsiniz, yalnız arxa mühərriklərdə, ya da ön mühərriklərdə və ya daha da yaxşı - DIAGONALLY.

Təklifimin səbəbi, ilişib qalmış bir robotun yoxlanılması ilə əlaqədardır. Ön/arxa təkərlərin dönməməsinin diaqonal olaraq olması, öndən və ya arxadan daha yaxşı ola bilər.

DİQQƏT: Etmədiyim şey, Arduino -dan kodlayıcılara (GPIO pinləri vasitəsilə) qoşulmaq üçün istifadə etməkdir - bunu etsəniz, Roboclaw 2 kodlayıcıya sahib ola bilərsiniz, sonra Arduino digər ikisini idarə edə bilər. Roboclaw'ı iki kodlayıcı dəyəri (və sürət) üçün soruşun.

Qeyd: Roboclaw-ı Ramping Up / Ramping Down üçün əvvəlcədən konfiqurasiya etmək üçün BasicMicro proqramından istifadə etdim. Bu, aparatın və elektronikanın qorunması üçün yaxşıdır. Robotika pleylistimdə bununla bağlı bir video var.

Demək olar ki, unutmuşdum: Motor kabelləri ilə Roboclaw arasındakı bir neçə güllə bağlayıcı kabel də aldım. DİQQƏT: bunu etsəniz, ümumi kabel uzunluğunun GERÇƏK UZUN olduğunu görəcəksiniz. Amma ehtiyacım olmadığı halda kəsmək istəmirdim. Mən (sonrakı addımlar üçün) Raspberry və Arduino arasında USB ilə ünsiyyət problemləri ilə qarşılaşdım, ehtimal ki, EMI səs -küyündən.. amma proqram təminatı ilə bu sahədə işləmişəm.

Bir problem olarsa, telləri qısalda bilərsiniz - metal qoruyucu (Amazondan, 1 diametrli) də ala bilərsiniz.

Son şey: Bunu hələ etməliyəm --- Roboclaw-ın avtomatik konfiqurasiyası və ya avtomatik tənzimlənməsi (kodlayıcılardan istifadə etməklə) həm sol, həm də sağ motorların eyni sürətlə hərəkət etməsi və robotun düz getməsi.

Mina təxminən 12 futdan çox əyilir, amma bu barədə bir şey etmək lazım olduğunu hiss etmədim.

Addım 3: Arduino əlavə edin və proqramlaşdırın

Barel fişinə və bəzi kabellərə, həmçinin USB kabelinə ehtiyacınız olacaq. Arduino konnektoru üçün doğru birini aldığınızdan əmin olun.

Arduino IDE -ni yükləməlisiniz.

Github -da robotu idarə edən ən son eskiz:

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

Arduino'yu IDE ilə işləyən kompüterinizə bağlayacaqsınız və eskizin necə yazıldığına əsaslanaraq Roboclaw ilə ardıcıl ünsiyyət (Proqram Serialı) üçün Arduinoda 10 və 11 sancaqlar istifadə edərdiniz.

Raspberry Pi və Arduino arasında sadə bir əlaqə protokolu hazırladım.

ASCII xarakterli, Arduino IDE-nin "serial monitor" pəncərəsini istifadə edərək ayıklamayı və test etməyi asanlaşdırır.

Əmrlər "0" (sıfır) rəqəmindən başlayır və lazım olduqda yuxarı qalxır

"20" lərdən başlayan əmrlər birbaşa Roboclaw əmrləridir və bu rəqəmin altındakılar ciddi şəkildə Arduino ilə əlaqəli əmrlərdir.

EMI səs -küyündən ötəri, bir əmsal daxil etmək üçün əmr sətirini təkmilləşdirdim.

Beləliklə, hər hansı bir simli aşağıdakıları ehtiva edir:

Bu simvol daxil olmaqla # simvol sayı

checksum

Məsələn, Arduinonun əmr menyusu ilə cavab verməsini istədiyinizi söyləyin:

4 0 12 16

"4" simli dörd simvoldur.

"0" MENU əmridir.

"12" seçdiyim təsadüfi rəqəmdir.

"16" 4 + 0 + 12 cəmidir.

Eyni MENU əmri fərqli ola bilər:

4 0 20 24

Fərqli bir təsadüfi ədəd seçdiyim üçün, checksum da fərqlidir.

Məsələn, 100 % sürətlə irəli getmək istədiyinizi söyləyin:

5 29 0 134 100

"5" beş ayə

"29" İLERİ əmri

"0" təsadüfi ədəd

"134" cəmi

"100" parametri 1 (bu vəziyyətdə sürət)

Arduino daxil olan simli yoxlaya bilmirsə, onu atır / nəzərə almır, heç bir cavab yoxdur.

Arduino, X millisaniyəsi ilə bir sonrakı hərəkət əmrini almazsa, Roboclawa STOP mühərrikləri göndərir.

Arduino işə düşür və USB portuna avtomatik status göndərməyə başlayır… bunu dayandırmaq istənməsə.

Bu nöqtədə, yalnız IDE -də "Serial Monitor" istifadə edərək Roboclaw -ı idarə etməyə və mühərriklərin dönməsini izləməyə hazır olmalısınız.

Addım 4: Raspberry Pi -nin əlavə edilməsi və proqramlaşdırılması (node.js)

Yenə də Robotics pleylistimə baxsanız, əvvəldən belə, Moruqun işə düşməsi üçün hər addımı atdım.

Parlaqlaşdıra biləcəyim bir şey, 5V tənzimləyiciyə ehtiyacınız olacağı və ya bunun üçün bir USB kabeli qurmaq, kəsmək/dəyişdirmək və ya Ahududu başqa bir şəkildə gücləndirməkdir.

Github -da Arduino ilə USB vasitəsilə ünsiyyət qurmaq üçün Moruqda lazım olan hər şey var.

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

Hətta test skriptləri də var.

Node.js server koduna nəzər sala bilərsiniz və Raspberry-in çoxsaylı təlimatları REST tipli url sətirlərinə necə çevirdiyini görəcəksiniz. Test əmrləri göndərmək üçün "curl" istifadə edə bilərsiniz.

Misal:

RP3 IP ünvanınız: 8084/arduino/api/forward/50

mühərriklərin təkərləri bir anda irəli çevirməsinə səbəb olacaq.

Bunu qabıq skript döngəsinə qoysanız, təkərlərin dönməyə davam etdiyini görəcəksiniz.

Node.js kodu (server.js), Arduino-ya serial mesajlarının itirilməsi halında yenidən əlaqə xüsusiyyətini ehtiva edir. Arduino-nu Moruqdan ayırıb yenidən qoşaraq bunu sınaya bilərsiniz.

İkisi arasındakı serial baud sürətinə uyğun olduğunuzdan əmin olun.

Arduino pis məlumat paketləri atdığı üçün və node.js səviyyəsində və brauzerin javascript səviyyəsində hər şey bir çox "sürücü" əmrləri göndərmək üçün kodlaşdırıldığı üçün 200000 baud qədər işləyə bilmişəm. (2Mbps).

Test skriptlərini işə salırsınızsa və təkərlərin döndüyünü görürsünüzsə, növbəti addıma hazırsınız.

Addım 5: Son Addım - Proqramlaşdırma / Veb Səhifə Müştərisindən istifadə

Bütün bunların Raspberry hissəsinə Github bağlantısına daxil olan müştəri sənədləridir.

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

USB Gamepad-ı Gamepad API (brauzer əsaslı) vasitəsilə idarə edirlər və veb səhifədə də mövcud olan müxtəlif düymələri və sürgüləri görməlisiniz.

JavaScript kodu, joysticklərdən biri üçün X və Y oxu dəyərlərini sorğular (sorğular).. (hansı joysticklər/gamepaddan asılı olaraq, kodu düzəltməli ola bilərsiniz). Çox sürətlə sorğu keçirir və bütün bu dəyərləri 8084 -də dinləyən node.js serverinə atır.

Joysticklərin X və Y oxlarının xam dəyərləri 0 ilə 1 arasındadır.

Ancaq Arduino'da mühərrikləri idarə etmək üçün istifadə olunan Roboclaw motor nəzarətçi kitabxana funksiyası, -100 ilə 0 (geriyə) və ya (0 ilə 100) arasında bir dəyər gözləyir.

Çooox …. p5.min.js daxil etmək məqsədi budur. Yalnız bu çox gözəl, əlverişli map () funksiyasına sahib olursunuz, ona xam dəyər verirsiniz, bu xam (cari) diapazon və yeni, istədiyiniz aralıqdır. Və xam dəyəri yeni, xəritələnmiş aralığdakı dəyərə çevirir.

Başqa bir məqam: 100 sürətlə robot çox hiyləgər ola bilər. Daim bir şeylə qarşılaşırdım. Ancaq daha yaxşı olsanız da, sola və ya sağa dönərkən yenə də toxunur.

Əlavə edəcəyiniz bir şey veb səhifədəki mövcud Max Speed kaydırıcısına bənzər olardı. Bu kaydırıcı, Xs və Ys üçün joystickləri eşleyeceğiniz ən yüksək və ya maksimum dəyərin nə olduğunu təyin edir.

Misal:

0 -> 1 -dən 0 -> 100 -ə xəritələşdirdiyinizi söyləyin. Joystickin nöqtəsini vuranda 100 -də olursunuz. Çox sürətli ola bilər.

Ancaq bu Max Speed kaydırıcısını bir az geri çəksəniz, indi 0 -> 1 ilə 0 -> 80 və ya 70 -ə bənzəyirsiniz.

Bu o deməkdir ki, node.js -ə (və Arduino -ya) göndərilən sürətdə belə böyük bir dəyişiklik olmadan joystickinizi hərəkət etdirmək üçün daha çox imkanınız var.

Əlavə edə biləcəyiniz şey, X -ləri (sola və ya sağa döndərmək) Y -dən (irəli və ya geriyə) öz maksimum mövcud sürətlərinə ayırmaqdır.

Beləliklə, sürətli xətti hərəkət üçün Yləri 0 -dan 100 -ə, 0 -dan 100 -ə qədər buraxa bilərsiniz, lakin daha çox idarə olunan fırlanma hərəkəti üçün Xs max sürətini aşağı sala bilərsiniz. Hər iki dünyanın ən yaxşısı.

Addım 6: İsteğe bağlı: Robotu Mouse Drag və / və ya Touch Hadisələri ilə idarə edin

Bu yerə qədər getmisinizsə, bilirsiniz ki, brauzerdən başlayaraq Javascript-dən başlayaraq Raspberry node.js serverinə, nəhayət arduino-ya qədər uzanan proqram qatları, Gamepad joystick X- və Y koordinatlarını ". irəli (və ya "geriyə" və s.) əmrləri (və onların sürət dəyəri).

Bundan əlavə, bildiyiniz kimi, joysticklərin Xs və Ys mənfi 1, sıfırdan artı 1 -ə qədər, sıfırdan 100 -ə qədər çevrilməlidir. Yaxşı, maksimum veb səhifədəki maksimum sürət parametrindən asılıdır.

Soo… ya siçandan istifadə etmək, ya da hadisələrə toxunmaq (ağıllı telefonda olduğu kimi) etmək üçün ediləcək yeganə şey bu hadisələri çəkmək, Xs və Y -ləri tutmaqdır.

AMMA ---- bu Xs və Ys mənfi 1 ilə 1 arasında DEYİL. 0-dan başlayaraq pozitiv olaraq artırlar, çünki mahiyyətcə bəzi HTML elementlərinin pikselləri və ya nisbi ekran koordinatlarıdır (məsələn, ön yükləmə paneli) və ya kətan.

Yenə orada, P5-in Js kitabxanasının "map ()" funksiyası, ehtiyacımız olanı yenidən xəritələmək üçün çox əlverişlidir.

Kodu iki fərqli veb səhifəyə sahib olmaq üçün yenidən qurdum, biri Gamepad -ı istifadə edərək masa üstü, digəri mobil üçün, toxunma hadisələrini istifadə edərək.

Həm də Xs və Y-lər yenidən xəritəyə salındıqdan sonra Gamepad-dan Xs və Y-lər kimi eyni kod zəncirinə daxil edilir.

Tövsiyə: