Isi kandungan:

Robot 4WD Dipacu Melalui Gamepad USB Jauh: 6 Langkah
Robot 4WD Dipacu Melalui Gamepad USB Jauh: 6 Langkah

Video: Robot 4WD Dipacu Melalui Gamepad USB Jauh: 6 Langkah

Video: Robot 4WD Dipacu Melalui Gamepad USB Jauh: 6 Langkah
Video: Tutorial Rakit & Buat Robot Smart Car 4WD Driver L298N Dengan Bluetooth Dapat Dikontrol Dengan HP 2024, November
Anonim
Image
Image

Untuk projek robotik saya yang seterusnya, saya terpaksa merancang / merancang platform robot saya sendiri kerana keadaan yang tidak dijangka.

Tujuannya adalah untuk menjadikannya autonomi, tetapi pertama, saya perlu menguji kemampuan pemanduan asasnya, jadi saya fikir akan menjadi projek sampingan yang menyeronokkan untuk berkelakuan dan dikendalikan seolah-olah ia adalah kenderaan RC (dikendalikan radio), sebaliknya gunakan Gamepad USB.

Hasilnya lebih baik atau lebih baik daripada yang saya jangkakan.

Kelebihan menggunakan laluan Gamepad USB, dengan banyak pengaturcaraan, adalah saya dapat menyesuaikannya dan menambahkan apa yang telah saya lakukan. Saya tidak mempunyai pengalaman sebenar untuk membina kenderaan RC, tetapi saya membayangkan bahawa seseorang cukup terjebak dengan apa sahaja pemancar RC (tongkat kegembiraan / butang, dll) dan penerima RC yang disertakan.

Sebagai contoh, saya telah menambahkan pengiktirafan bahawa robot telah menghantam dinding, hanya dengan meminta perisian mengesan arus tinggi dan nilai kelajuan pengekod rendah.

Sebagai pilihan, seseorang dapat menambahkan beberapa kamera web USB ke robot, bergantung pada jumlah dan penempatannya, seseorang dapat menggerakkan robot di sekitar ruang tamu dan ke ruangan lain, sambil duduk di tempat lain di depan komputer yang mempunyai USB Gamepad yang disambungkan ia.

Instructable ini tidak akan menjadi cara yang tepat, terperinci, merangkumi semua, langkah demi langkah, tetapi saya akan cuba memberikan seberapa banyak yang saya dapat.

Bekalan

Bahagian yang Disarankan: Sebilangan besar ini saya perolehi dari Servo City (Actobotics).

2 - 13,5 Saluran-U, untuk sisi bingkai dasar. Motor dipasang ke ini. Saya pergi dengan sesuatu yang lebih pendek dan motor saya dipasang di sudut-sudut, dan menyukarkan pemasangannya.

Saluran U 2 - 12 untuk bahagian depan dan belakang bingkai asas.

Saluran U 2 - 15 untuk bumper, depan dan belakang

2 - 7 (atau apakah itu 7.5 ?) Saluran-U untuk lajur depan. Ini tidak terlalu kritikal, panjangnya boleh berbeza-beza. Bergantung pada berapa tinggi lajur belakang, dan pada ketinggian berapa yang anda pilih untuk meletakkan sudut Saluran-U yang menghubungkan antara mereka.

2 - (panjang?) Saluran-U untuk anggota bersudut, depan-ke-belakang, menghubungkan lajur tegak. Yang ini penting, kerana Servo City / Actobotics menjual panel atau pendakap bersudut 45 darjah untuk tujuan ini, tetapi anda perlu melakukan beberapa matematik / percubaan untuk memastikan anda memperoleh panjang yang betul.

2 - (panjang?) Saluran-U untuk berfungsi sebagai bumper sisi tahap yang lebih tinggi, sekali lagi ini bergantung pada apa yang anda lakukan dengan pangkalan

2 - (panjang?) Saluran-U untuk berfungsi sebagai bumper depan dan belakang tahap yang lebih tinggi, masalahnya di atas.

1 - (panjang?) Saluran-U untuk berfungsi sebagai anggota paling atas, merangkumi lajur belakang. Yang ini mungkin tidak terlalu kritikal, kerana anda boleh melekap di atas, atau di depan / di belakang lajur tegak.

12 (aprox) L-saluran atau kurungan. Ini berfungsi untuk pelbagai tujuan tetapi pada asasnya memberikan integriti / kekuatan struktur ke sudut kerangka asas DAN lajur tegak.

4 (+?) Saluran rata 3 lubang hingga 5 lubang. Ini juga memberikan kekuatan struktur kepada robot.

ServoCity menjual dua jenis panel rata kawasan besar, berguna untuk digunakan sebagai skid-pan bawah, atau bahagian atas tempat bateri dan atau pengawal anda pergi, atau bahkan untuk permukaan yang lebih tinggi untuk sensor.

Terdapat panel "X 12" 4 (4.5?), Dan saya rasa yang lain adalah panel X 12 9 (9.5?) ".

Di sinilah keadaan menjadi menarik, dan mungkin membingungkan dan mahal (bahagian kecil bertambah). Semua saluran, dan lain-lain, boleh dihubungkan satu sama lain melalui bahagian penghubung ini, di antaranya terdapat SEBANYAK. Di sinilah saya minta maaf kerana saya tidak mempunyai senarai bahagian yang komprehensif, terperinci dan khusus.

Dan masalahnya adalah.. anda tidak benar-benar tahu mana yang mungkin anda perlukan, atau berapa banyak.. kerana terdapat banyak cara untuk menyatukan kepingan ini.

Saya boleh menyenaraikan apa yang telah saya gunakan:

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

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

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

Dua perkara berikut sangat berguna, dan saya hanya akan menyimpannya:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Seterusnya adalah semua skru (baut). Saya mulakan dengan pakej SETIAP ukuran, dan saya telah melalui kebanyakannya. Saya menggunakan skru yang lebih panjang di mana ukurannya tidak penting, dan menyimpan yang lebih pendek untuk tempat mereka DIPERLUKAN kerana panjangnya tidak akan berfungsi.

Akhir sekali, anda harus mendapatkan 1 beg berikut:

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

Saya tidak menggunakan banyak itu, tetapi mereka (saya rasa) sangat penting untuk memastikan motor anda tidak bergetar dari bingkai dari masa ke masa. Hanya dua yang berfungsi per motor, kerana saluran-U

Anda memerlukan sekurang-kurangnya 4 daripadanya, anda mungkin mendapat satu atau lebih sekiranya anda menyebabkan kerosakan pada satu (percayalah, anda mungkin akan memasang / menanggalkan motor beberapa kali):

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

Biasanya, poros motor berukuran 6mm, dan gandar berukuran 1/4 (0.25in).

Saya akan mendapat beberapa skru hitam, kononnya lebih kuat, dan menggunakannya untuk penjepit di atas, dan TIDAK menggunakan skru yang disertakan dengan pengapit:

(Saya rasa ini adalah):

Galas diameter 4 - 1/4 "(0.25")

1 - beg spacer 1/4 hitam

4 - Mengetatkan D-Hub

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

4 - D-Shaft (# 6340621.375 "(1-3 / 8")

Roda tugas berat 4 - 6"

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

Perhatikan bahawa saya suka roda ini tetapi mereka mempunyai tepi getah yang keras. Mereka kelihatan baik di lantai keras, dan karpet, dan mungkin jalan konkrit keras. Tidak akan berjaya di rumput, pasir, dll.

JUGA, mereka akan cenderung menghancurkan permaidani anda !!!

4 - motor:

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

Saya pergi dengan 223 RPM, kelajuan dalaman teratas yang baik, juga dapat menggerakkan robot saya (berat dengan 2 bateri SLA 12V) dengan mudah dalam gerakan perlahan.

2 - pengekod motor untuk motor. (Roboclaw Servo City hanya mengendalikan 2 pengekod)

1 - Pengawal motor Roboclaw 2X45A, pastikan anda mendapatkannya dengan blok terminal hijau di atasnya, bukan pin…. baik … masing-masing mempunyai kelebihan mereka. Hindsight.. Saya mungkin mendapat pin.

Saya rasa itu dari Servo City.

SparkFun menjual Arduino Uno (itulah yang saya gunakan), dan juga Redboard Artemis sebagai pengurus pemacu anda.

Anda mahukan Raspberry Pi 3 (atau 4?) Sebagai "otak" dan antara muka tahap tinggi untuk anda.

Anda memerlukan pendawaian, suis, sekering, dan diod "flyback" yang sangat kuat.

Saya menggunakan bateri SLA kitaran dalam Duracell 12V 14AH, tetapi anda boleh menggunakan apa sahaja.

AMARAN! Reka bentuk robot ini (TINGGI, dan LEBIH BESAR, tetapi PENDEK), menganggap jenis pusat graviti berat, seperti bateri SLA. Mungkin tidak sesuai dengan jenis pek bateri teknologi baru yang lain. LiPo, Lion, dan lain-lain.

Dari Pololu, saya mendapat beberapa penyesuai palam laras, supaya saya dapat menyalakan Arduino dan / atau Redboard secara bebas, walaupun mereka akan disambungkan ke Raspberry melalui USB, kerana saya tidak mahu bergantung pada kuasa Raspberry. (Terutama memasang kamera, sensor, dll.)

Anda memerlukan pengatur voltan turun 12-ke-5V, minimum 5A (?) Untuk Raspberry. Yang lain boleh mengendalikan apa-apa antara 7 hingga 15V sehingga langsung ke bateri SLA.

Itu sahaja untuk bahagian.

Apa yang TIDAK AKAN saya lakukan - berpusing 90 darjah.

Sekali lagi, terdapat banyak video dalam senarai main youtube Robotik saya yang memperincikan sebahagian besar perkara di atas.

Langkah 1: Pembinaan

Terus terang, semua langkah pembinaan saya sudah berbentuk youtube. Anda dapat melihatnya dalam senarai main Robotik saya, bermula dari "Wallace Robot 4". Yang sebelumnya (Wallace II, Wallace III) juga mempunyai bahan yang baik

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

Langkah 2: Uji Roboclaw, Motors, dan Encoders

Pembuat Roboclaw (BasicMicro) mempunyai aplikasi Windows yang boleh anda gunakan untuk memastikan anda memasang kabel motor dan pengekod dengan betul ke Roboclaw. Anda akan memasang motor sisi yang sama dengan Roboclaw. Anda boleh memilih untuk menggunakan wayar pengekod, hanya pada motor belakang, atau motor depan, atau mungkin lebih baik - DIAGONAL.

Sebab cadangan saya ada kaitan dengan (kemudian) memeriksa robot yang tersekat. Memiliki status diagonal jika roda depan / belakang tidak / berpusing mungkin lebih baik daripada hanya depan, atau belakang saja.

CATATAN: apa yang TIDAK saya lakukan adalah menggunakan Arduino untuk menyambung (melalui pin GPIO) ke pengekod - jika anda melakukannya, anda mungkin mempunyai Roboclaw mengendalikan 2 pengekod, dan kemudian Arduino mengendalikan dua yang lain, dan hanya tanya Roboclaw kerana ia adalah dua nilai pengekod (dan kelajuan).

CATATAN: Saya menggunakan aplikasi BasicMicro untuk mengkonfigurasi Roboclaw untuk Ramping Up / Ramping Down. Ini bagus untuk melindungi perkakasan dan elektronik. Terdapat video mengenai perkara itu dalam senarai main Robotik saya.

Saya hampir lupa: Saya juga membeli beberapa kabel penyambung peluru yang terletak di antara kabel motor, dan Roboclaw. CATATAN: jika anda melakukan ini, anda akan perhatikan bahawa jumlah panjang kabel BENAR-BENAR PANJANG. Tetapi saya tidak mahu memotongnya jika tidak perlu. Saya (untuk langkah kemudian) menghadapi masalah komunikasi dengan USB antara Raspberry dan Arduino, mungkin disebabkan oleh kebisingan EMI.. tetapi saya telah menyelesaikannya dengan perisian.

Sekiranya menjadi masalah, anda boleh memotong wayar pendek - anda juga boleh membeli pelindung logam (dari Amazon, diameter 1 ).

Perkara terakhir: Ini masih belum saya lakukan --- mempunyai konfigurasi automatik Roboclaw atau auto-tune (menggunakan encoders) supaya kedua-dua motor sebelah kiri dan kanan bergerak pada kelajuan yang sama dan robot berjalan lurus.

Tambang saya melengkung sedikit lebih kurang 12 kaki tetapi tidak cukup sehingga saya merasa perlu melakukan apa-apa mengenainya.

Langkah 3: Menambah dan Memprogram Arduino

Anda memerlukan palam tong dan beberapa pendawaian, juga kabel USB. Pastikan anda mendapat yang betul untuk penyambung Arduino.

Anda perlu memuat turun Arduino IDE.

Di sini di Github adalah lakaran terbaru yang mengendalikan pemanduan robot:

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

Anda akan menyambungkan Arduino ke komputer yang menjalankan IDE, dan berdasarkan bagaimana lakaran ditulis, anda akan menggunakan pin 10 dan 11 di Arduino untuk komunikasi bersiri (Serial Perisian) dengan Roboclaw.

Saya mengembangkan protokol komunikasi sederhana antara Raspberry Pi dan Arduino.

Ini berdasarkan watak ASCII, yang menjadikannya lebih mudah untuk debug dan menguji hanya dengan menggunakan tetingkap "monitor bersiri" Arduino IDE.

Perintah bermula pada angka "0" (sifar) dan naik mengikut keperluan

Perintah yang bermula pada "20" adalah perintah Roboclaw langsung, dan perintah di bawah angka itu adalah perintah yang berkaitan dengan Arduino.

Oleh kerana bunyi EMI, saya memperbaiki rentetan perintah untuk memasukkan checksum.

Jadi, sebarang rentetan akan merangkumi:

# bilangan token dalam rentetan termasuk yang ini

cekum

Contohnya, katakan anda mahu Arduino bertindak balas dengan menu perintahnya:

4 0 12 16

"4" adalah empat token dalam rentetan.

"0" adalah arahan MENU.

"12" adalah nombor rawak yang saya pilih.

"16" adalah jumlah 4 + 0 + 12.

Perintah MENU yang sama mungkin berbeza:

4 0 20 24

Oleh kerana saya memilih nombor rawak yang berbeza, checksum juga berbeza.

Contohnya, katakan anda mahu maju dengan kelajuan 100%:

5 29 0 134 100

"5" lima token

"29" arahan FORWARD

"0" nombor rawak

"134" checksum

"100" parameter 1 (kelajuan dalam kes ini)

Sekiranya Arduino tidak dapat mengesahkan bahawa tali masuk, ia hanya menjatuhkannya / mengabaikannya, tidak ada respons.

Sekiranya Arduino tidak menerima arahan pergerakan seterusnya dengan X milisaat, ia akan menghantar motor STOP ke Roboclaw.

Arduino memulakan dan mula menghantar status automatik ke port USB … kecuali diberitahu untuk berhenti melakukan itu.

Pada ketika ini anda harus bersedia untuk mengendalikan Roboclaw dan memerhatikan motor berpusing, hanya dengan menggunakan "Serial Monitor" di IDE.

Langkah 4: Menambah dan Memprogram Raspberry Pi (node.js)

Sekali lagi, jika anda melihat senarai main Robotik saya, walaupun dari awal, saya melakukan setiap langkah untuk menghidupkan dan menjalankan Raspberry.

Satu perkara yang mungkin telah saya lewatkan ialah anda memerlukan pengatur 5V, dan entah bagaimana membina, memotong / mengubah kabel USB untuknya, atau menghidupkan Raspberry dengan cara lain.

Di Github inilah semua yang anda perlukan di Raspberry untuk berkomunikasi dengan Arduino melalui USB.

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

Malah ada skrip ujian.

Anda boleh melihat kod pelayan node.js dan anda akan melihat bagaimana Raspberry menukar arahan berangka pendek, menjadi rentetan url jenis REST. Anda boleh menggunakan "curl" untuk menghantar arahan ujian.

Contoh:

alamat IP RP3 anda: 8084 / arduino / api / forward / 50

akan menyebabkan motor memutar roda ke hadapan sebentar.

Sekiranya anda memasukkannya ke dalam lingkaran skrip shell, anda akan melihat roda terus berpusing.

Kod node.js (server.js) merangkumi ciri sambungan semula sekiranya koma bersiri hilang ke Arduino. Anda boleh mengujinya dengan mencabut Arduino dari Raspberry, dan memasangnya semula.

Pastikan bahawa anda sepadan dengan kadar baud bersiri antara keduanya.

Kerana Arduino menjatuhkan paket data yang buruk, dan kerana pada tahap node.js, dan pada tahap javascript penyemak imbas, semuanya dikodkan untuk menghantar banyak arahan "drive", saya dapat menjalankan setinggi 2 000 000 baud (2Mbps).

Sekiranya anda mendapat skrip ujian dan anda melihat roda berpusing, maka anda sudah bersedia untuk langkah seterusnya.

Langkah 5: Langkah Akhir - Mengaturcara / Menggunakan Pelanggan Halaman Web

Termasuk dalam pautan Github ke bahagian Raspberry dari semua ini, adalah fail pelanggan.

indeks.html. indeks.js. hlm.min.js.

Mereka mengendalikan Gamepad USB melalui Gamepad API (berasaskan penyemak imbas) dan anda akan melihat pelbagai butang dan slider juga tersedia di laman web.

Pertanyaan kod javascript (tinjauan) nilai paksi X dan Y untuk salah satu kayu bedik.. (bergantung pada tongkat / gamepad apa yang anda ada, anda mungkin perlu mengubah kodnya). Ia melakukan tinjauan dengan sangat pantas, dan ia mematikan semua nilai tersebut ke pelayan node.js pada 8084.

Nilai paksi X- dan Y mentah dari kayu bedik adalah antara 0 dan 1.

Tetapi fungsi perpustakaan pengawal motor Roboclaw yang digunakan di Arduino untuk menggerakkan motor, mengharapkan nilai antara -100 hingga 0 (ke belakang) atau (0 hingga 100) ke depan.

Soo…. itulah tujuan memasukkan p5.min.js. Kebetulan mempunyai fungsi peta () yang sangat bagus dan senang ini di mana anda memberikan nilai mentah, julat mentah (semasa), dan julat baru yang diinginkan. Dan mengubah nilai mentah menjadi nilai pada julat baru yang dipetakan.

Titik lain: Pada kelajuan 100, robot boleh menjadi sangat rumit. Saya selalu mengalami sesuatu. Tetapi walaupun anda menjadi lebih baik, ia tetap sensitif ketika memutar kiri atau kanan.

Sesuatu untuk anda tambahkan akan serupa dengan slaid Kelajuan Maksimum semasa di laman web. Gelangsar itu menentukan nilai tertinggi atau maksimum yang akan dipetakan oleh Joysticks Xs dan Ys.

Contoh:

Katakan anda memetakan 0 -> 1 hingga 0 -> 100. Apabila anda menekan tongkat berhenti sepenuhnya, anda berada di 100. Sentuh. Mungkin terlalu pantas.

Tetapi, jika anda meluncurkan slaid Speed Max sedikit, sekarang anda memetakan 0 -> 1 hingga 0 -> 80 atau 70.

Ini bermakna bahawa anda mempunyai lebih banyak kelonggaran untuk menggerakkan kayu bedik anda tanpa perubahan besar dalam kelajuan yang dihantar ke node.js (dan ke Arduino).

Dan tambahan yang dapat anda buat adalah memisahkan Xs (putar kiri atau kanan) dari Ys (maju atau belakang) ke dalam kelajuan maksimum yang tersedia.

Oleh itu, anda boleh meninggalkan Ys pada 0 hingga 100, 0 hingga -100 untuk gerakan linier pantas, tetapi turunkan kelajuan maksimum Xs untuk pergerakan putaran yang lebih terkawal. Terbaik dari kedua-dua dunia.

Langkah 6: Pilihan: Memacu Robot Dengan Tarik Tetikus dan / atau Acara Sentuhan

Sekiranya anda berjaya sejauh ini, anda tahu bahawa lapisan perisian bermula dari penyemak imbas dan meneliti Javascript dan seterusnya ke pelayan Raspberry node.js, akhirnya ke arduino, menukar gamepad Joystick X- dan Y-koordinat menjadi "koordinat" perintah maju "(atau" mundur ", dll) (dan nilai kelajuannya).

Selanjutnya, anda tahu bahawa walaupun Xs dan Ys joystick adalah negatif 1, hingga nol, hingga tambah 1, mereka harus ditukar antara sifar dan 100. Nah, maksimum bergantung pada tetapan kelajuan maksimum di laman web.

Soo … satu-satunya perkara yang perlu dilakukan untuk menggunakan tetikus, atau peristiwa sentuhan (seperti pada telefon pintar), adalah untuk menangkap peristiwa tersebut, merebut Xs dan Ys.

TAPI ---- X dan Y TIDAK antara negatif 1 dan 1. Mereka bermula 0 dan meningkat positif, kerana pada dasarnya adalah piksel atau koordinat skrin relatif dari beberapa elemen HTML (seperti panel bootstrap) atau kanvas.

Oleh itu, fungsi "peta ()" perpustakaan Js P5 sangat berguna untuk memetakan semula apa yang kita perlukan.

Saya mengubah kodnya agar mempunyai dua laman web yang berbeza, satu untuk desktop menggunakan Gamepad, satu lagi untuk mudah alih, menggunakan acara sentuhan.

Juga, setelah Xs dan Ys dipetakan kembali, mereka dimasukkan ke rantai kod yang sama, dan lain-lain, seperti Xs dan Ys dari Gamepad.

Disyorkan: