Isi kandungan:

Bina Robot Turtlebot Anda Sendiri !: 7 Langkah
Bina Robot Turtlebot Anda Sendiri !: 7 Langkah

Video: Bina Robot Turtlebot Anda Sendiri !: 7 Langkah

Video: Bina Robot Turtlebot Anda Sendiri !: 7 Langkah
Video: Autonomous Navigation Mobile Robot Using ROS Without Using a Pre-saved Map | ROS 101 | Lesson 10 2024, November
Anonim
Bina Robot Turtlebot Anda Sendiri!
Bina Robot Turtlebot Anda Sendiri!
Bina Robot Turtlebot Anda Sendiri!
Bina Robot Turtlebot Anda Sendiri!
Bina Robot Turtlebot Anda Sendiri!
Bina Robot Turtlebot Anda Sendiri!

EDIT:

Maklumat lebih lanjut yang berkaitan dengan perisian dan kawalan tersedia di pautan ini:

hackaday.io/project/167074-build-your-own-turtlebot-3-backbone

Pautan langsung ke kod adalah:

github.com/MattMgn/foxbot_core

Mengapa projek ini?

Turtlebot 3 adalah platform yang tepat untuk mendalami elektronik, robotik dan juga AI! Saya mencadangkan anda membina turtlebot anda sendiri selangkah demi selangkah dengan komponen yang berpatutan tanpa mengorbankan ciri dan prestasi. Dengan satu perkara: menjaga yang terbaik dari robot awal, modulariti, kesederhanaannya dan sebilangan besar pakej untuk navigasi autonomi dan AI dari komuniti sumber terbuka.

Projek ini adalah peluang bagi pemula untuk memperoleh konsep elektronik, mekanik dan sains komputer, dan bagi yang lebih berpengalaman untuk mendapatkan platform yang kuat untuk menguji dan mengembangkan algoritma kecerdasan buatan.

Apa yang anda akan dapati dalam projek ini?

Anda akan menemui bahagian mekanikal dan elektronik penting yang mesti disimpan dari bot asal untuk menjamin keserasian lengkap.

Seluruh proses binaan akan terperinci: bermula dari pencetakan bahagian 3D, pemasangan dan beberapa komponen, pematerian dan penyatuan elektronik hingga akhirnya penyusunan kod di Arduino. Petunjuk ini akan menyimpulkan contoh 'dunia hello' untuk membiasakan anda dengan ROS. Sekiranya ada yang tidak jelas, sila tanya!

Bekalan

Elektronik:

1 x Single Board Computer untuk menjalankan ROS, boleh jadi Raspberry Pi atau Jetson Nano misalnya

1 x Arduino DUE, anda juga boleh menggunakan UNO atau MEGA

1 x Proto-board yang sesuai dengan pin Arduino DUE tersedia di sini

Motor DC 2 x 12V dengan pengekod (pilihan 100 RPM)

Pemandu motor 1 x L298N

Pengatur 2 x 5V

1 x Bateri (contohnya bateri LiPo 3S / 4S)

2 x suis ON / OFF

2 x LED

2 x 470kOhm Perintang

Penyambung JST 3 x 4 pin

1 x kabel USB (sekurang-kurangnya satu antara SBC dan Arduino)

Sensor:

1 x Sensor semasa (pilihan)

1 x 9 Darjah Kebebasan IMU (pilihan)

1 x LIDAR (pilihan)

Casis:

16 x Plat modular Turtlebot (yang juga boleh dicetak 3D)

2 x Roda berdiameter 65mm (pilihan lebar 6mm)

4 x Nylon spacer 30mm (pilihan)

Sisipan 20 x M3 (pilihan)

Lain-lain:

Wayar

Skru dan sisipan M2.5 dan M3

Pencetak 3D atau seseorang yang boleh mencetak bahagian untuk anda

Gerudi tangan dengan satu set gerudi seperti ini

Langkah 1: Penerangan

Penerangan
Penerangan
Penerangan
Penerangan

Robot ini adalah pemacu pembezaan sederhana yang menggunakan 2 roda yang dipasang secara langsung pada motor mereka dan roller caster yang diletakkan di belakang untuk mengelakkan robot jatuh. Robot terbahagi kepada dua lapisan:

Lapisan Bawah: dengan kumpulan penggerak (bateri, pengawal motor dan motor), dan elektronik 'tahap rendah': pengawal mikro Arduino, pengatur voltan, suis…

Lapisan Atas: dengan elektronik 'tahap tinggi' iaitu Komputer Papan Tunggal dan LIDAR

Lapisan tersebut dihubungkan dengan bahagian dan skru yang dicetak untuk memastikan kekukuhan struktur.

Skema elektronik

Skema mungkin kelihatan agak tidak kemas. Ini adalah gambar skematik dan tidak mewakili semua wayar, penyambung dan papan proto tetapi boleh dibaca seperti berikut:

Bateri 3S Litihum Ion Polymer dengan kapasiti 3000mAh memberi kuasa kepada litar pertama, ia memberi kuasa pada papan pengawal motor (L298N) dan pengatur 5V pertama untuk pengekod motor dan Arduino. Litar ini diaktifkan melalui suis dengan LED yang menunjukkan keadaan ON / OFFnya.

Bateri yang sama menguatkan litar kedua, voltan input ditukar menjadi 5V untuk menghidupkan Single Board Computer. Di sini juga, litar diaktifkan melalui suis dan LED.

Sensor tambahan seperti LIDAR atau kamera kemudian boleh ditambahkan terus pada Raspberry Pi melalui USB atau port CSI.

Reka bentuk mekanikal

Rangka robot terdiri daripada 16 bahagian yang sama yang membentuk 2 lapisan kuadrat (lebar 28cm). Banyak lubang membolehkan memasang bahagian tambahan di mana sahaja anda memerlukannya dan menawarkan reka bentuk modular yang lengkap. Untuk projek ini, saya memutuskan untuk mendapatkan plat TurtleBot3 yang asli tetapi anda juga boleh mencetaknya 3D kerana reka bentuknya adalah sumber terbuka.

Langkah 2: Pemasangan Blok Motor

Pemasangan Blok Motor
Pemasangan Blok Motor
Pemasangan Blok Motor
Pemasangan Blok Motor
Pemasangan Blok Motor
Pemasangan Blok Motor

Penyediaan motor

Langkah pertama ialah menambahkan pita busa setebal 1mm di sekitar setiap motor untuk mengelakkan getaran dan bunyi ketika motor akan berputar.

Bahagian bercetak

Pemegang motor menghasilkan dua bahagian yang mencengkam motor seperti naib. 4 skru dicapai untuk mengetatkan motor di pemegangnya.

Setiap pemegang terdiri daripada beberapa lubang yang menempatkan sisipan M3 yang akan dipasang pada struktur. Terdapat lebih banyak lubang daripada yang sebenarnya diperlukan, lubang tambahan akhirnya dapat digunakan untuk memasang bagian tambahan.

Tetapan pencetak 3D: semua bahagian dicetak dengan parameter berikut

  • Muncung berdiameter 0.4mm
  • Pengisian bahan 15%
  • Lapisan ketinggian 0.2 mm

Roda

Roda yang dipilih ditutup dengan getah untuk memaksimumkan lekatan dan memastikan keadaan gulungan bebas slip. Skru pengapit mengekalkan roda yang dipasang pada batang motor. Diameter roda harus cukup besar untuk melintasi langkah kecil dan penyimpangan tanah (roda tersebut berdiameter 65mm).

Pembetulan

Setelah selesai dengan satu blok motor, ulangi operasi sebelumnya dan kemudian pasangkannya ke lapisan dengan skru M3.

Langkah 3: Suis dan Penyediaan Kabel

Suis dan Penyediaan Kabel
Suis dan Penyediaan Kabel
Suis dan Penyediaan Kabel
Suis dan Penyediaan Kabel
Suis dan Penyediaan Kabel
Suis dan Penyediaan Kabel

Penyediaan kabel motor

Umumnya motor-encoder dilengkapi dengan kabel termasuk di satu sisi penyambung 6pin yang menghubungkan bahagian belakang PCB pengekod, dan wayar telanjang di sisi lain.

Anda mempunyai kemungkinan untuk memasangkannya secara langsung pada papan proto atau bahkan Arduino anda, tetapi saya mengesyorkan anda menggunakan header pin wanita dan penyambung JST-XH. Oleh itu, anda boleh memasang / mencabutnya dari papan proto anda dan menjadikan pemasangan anda lebih mudah.

Petua: anda boleh menambah jalinan lengan yang boleh diperluas di sekitar wayar anda dan kepingan tiub pengecutan di dekat penyambung, dengan itu anda akan mendapat kabel 'bersih'.

Suis dan LED

Untuk mengaktifkan dua litar kuasa, sediakan 2 kabel LED dan suis: pada mulanya solder perintang 470kOhm pada salah satu pin LED, kemudian pasangkan LED pada satu pin suis. Di sini juga, anda boleh menggunakan sekeping tiub pengecutan untuk menyembunyikan perintang di dalamnya. Berhati-hati untuk menyolder LED ke arah yang betul! Ulangi operasi ini untuk mendapatkan dua kabel suis / led.

perhimpunan

Pasang kabel yang dibuat sebelumnya pada bahagian bercetak 3D yang sesuai. Gunakan mur untuk mengekalkan suis, LED tidak memerlukan lem, cukup tekan untuk memasangnya di lubang.

Langkah 4: Pendawaian Papan Elektronik

Pendawaian Papan Elektronik
Pendawaian Papan Elektronik
Pendawaian Papan Elektronik
Pendawaian Papan Elektronik
Pendawaian Papan Elektronik
Pendawaian Papan Elektronik

Susun atur papan

Papan proto yang sesuai dengan susun atur papan Arduino digunakan untuk mengurangkan bilangan wayar. Di bahagian atas papan proto, L298N disusun dengan tajuk wanita Dupont (Dupont adalah tajuk 'Arduino seperti').

Penyediaan L298N

Pada asalnya, papan L298N tidak dilengkapi dengan tajuk Dupont lelaki yang sesuai, anda perlu menambah baris 9 pin di bawah papan. Anda perlu menyedari 9 lubang dengan bit gerudi diameter 1mm selari dengan lubang yang ada seperti yang anda lihat pada gambar. Kemudian pautkan pin 2 baris yang sesuai dengan bahan pematerian dan wayar pendek.

Pin-keluar L298N

L298N terdiri daripada 2 saluran yang membolehkan kawalan kelajuan dan arah:

arah melalui 2 output digital, dipanggil IN1, IN2 untuk saluran pertama, dan IN3 dan IN4 untuk yang kedua

laju melalui 1 output digital, dipanggil ENA untuk saluran pertama dan ENB untuk kedua

Saya memilih pin-out berikut dengan Arduino:

motor kiri: IN1 pada pin 3, IN2 pada pin 4, ENA pada pin 2

motor kanan: IN3 pada pin 5, IN4 pada pin 6, ENB pada pin 7

Pengatur 5V

Walaupun l298N biasanya dapat menyediakan 5V, saya tetap menambah pengatur kecil. Ia menggerakkan Arduino melalui port VIN dan 2 pengekod pada motor. Anda boleh melangkau langkah ini dengan menggunakan pengatur 5V L298N bawaan secara langsung.

Penyambung JST dan pin-out Encoder

Gunakan penyesuai penyambung JST-XH wanita 4 pin, setiap penyambung kemudian dihubungkan ke:

  • 5V dari pengatur
  • Tanah
  • dua port input digital (untuk contoh: 34 dan 38 untuk pengekod kanan dan 26 dan 30 untuk pengekod kiri)

Tambahan I2C

Seperti yang anda perhatikan, terdapat penyambung JST 4pin tambahan pada papan proto. Ia digunakan untuk menyambungkan peranti I2C seperti IMU, anda boleh melakukan perkara yang sama dan bahkan menambah port anda sendiri.

Langkah 5: Kumpulan Motor dan Arduino di Lapisan Bawah

Motor Group dan Arduino di Lapisan Bawah
Motor Group dan Arduino di Lapisan Bawah
Motor Group dan Arduino di Lapisan Bawah
Motor Group dan Arduino di Lapisan Bawah
Motor Group dan Arduino di Lapisan Bawah
Motor Group dan Arduino di Lapisan Bawah

Pemasangan blok motor

Setelah lapisan bawah dipasang dengan 8 plat Turtlebot, cukup gunakan 4 skru M3 secara langsung di sisipan untuk mengekalkan blok motor. Kemudian anda boleh memasang wayar kuasa motor ke output L298N dan kabel yang dibuat sebelumnya ke penyambung JST proto-board.

Pengagihan kuasa

Pengagihan kuasa hanya dapat dicapai dengan blok terminal penghalang. Di satu sisi penghalang, kabel dengan palam wanita XT60 diskrukan untuk menyambung ke bateri LiPo. Di sisi lain, dua kabel LED / suis kami yang sebelumnya disolder diskrukan. Oleh itu, setiap litar (Motor dan Arduino) dapat diaktifkan dengan suisnya sendiri dan LED hijau yang sesuai.

Pengurusan kabel

Dengan pantas anda perlu menghadapi banyak kabel! Untuk mengurangkan aspek tidak kemas, anda boleh menggunakan 'meja' yang dicetak 3D sebelumnya. Di atas meja, simpan papan elektronik anda dengan pita dua sisi, dan di bawah meja biarkan wayar bebas mengalir.

Penjagaan bateri

Untuk mengelakkan pelepasan bateri semasa memandu robot anda, anda hanya boleh menggunakan tali elastik rambut.

Roller caster

Bukan benar-benar roller caster tetapi bola sfera sederhana tetap dengan 4 skru pada lapisan bawah. Ia cukup untuk memastikan kestabilan robot.

Langkah 6: Komputer Papan Tunggal dan Sensor pada Lapisan Atas

Komputer Papan Tunggal dan Sensor pada Lapisan Atas
Komputer Papan Tunggal dan Sensor pada Lapisan Atas
Komputer Papan Tunggal dan Sensor pada Lapisan Atas
Komputer Papan Tunggal dan Sensor pada Lapisan Atas
Komputer Papan Tunggal dan Sensor pada Lapisan Atas
Komputer Papan Tunggal dan Sensor pada Lapisan Atas

Komputer Papan Tunggal mana yang hendak dipilih?

Saya tidak perlu menunjukkan kepada anda Raspberry Pi yang terkenal, jumlah kes penggunaannya melebihi bidang robotik. Tetapi ada pencabar yang lebih kuat untuk Raspberry Pi yang mungkin anda abaikan. Memang Jetson Nano dari Nvidia menyertakan kad grafik 128-teras yang kuat sebagai tambahan kepada pemprosesnya. Kad grafik khusus ini telah dikembangkan untuk mempercepat tugas-tugas mahal komputasi seperti pemprosesan gambar atau inferensi rangkaian saraf.

Untuk projek ini, saya memilih Jetson Nano dan anda boleh menemui bahagian 3D yang sesuai di antara fail yang dilampirkan, tetapi jika anda ingin menggunakan Raspberry Pi, terdapat banyak cetakan yang boleh dicetak di sini.

Pengatur 5V

Apa sahaja papan yang anda putuskan untuk membawa robot anda, anda memerlukan pengatur 5V. Raspberry Pi 4 terbaru memerlukan 1.25A maksimum tetapi Jetson Nano memerlukan tekanan sehingga 3A jadi saya memilih Pololu 5V 6A untuk mempunyai rizab kuasa untuk komponen masa depan (sensor, lampu, stepper…), tetapi mana-mana 5V 2A yang murah harus dilakukan kerja. Jetson menggunakan laras DC 5.5mm dan USB mikro Pi, ambil kabel yang sesuai dan pasangkannya ke output pengatur.

Susun atur LIDAR

LIDAR yang digunakan di sini adalah LDS-01, terdapat banyak LIDAR 2D lain yang boleh digunakan seperti RPLidar A1 / A2 / A3, YDLidar X4 / G4 atau bahkan Hokuyo LIDAR. Satu-satunya syarat adalah bahawa ia perlu dipasang melalui USB dan diletakkan di tengah struktur. Sekiranya LIDAR tidak berpusat dengan baik, peta yang dibuat oleh algoritma SLAM dapat mengubah anggaran kedudukan dinding dan rintangan dari kedudukan sebenarnya. Juga jika ada rintangan dari robot melintasi sinar laser, ia akan mengurangkan jarak dan bidang pandangan.

Pemasangan LIDAR

LIDAR dipasang pada bahagian bercetak 3D yang mengikut bentuknya, bahagian itu sendiri dipegang pada plat segi empat tepat (sebenarnya di papan lapis pada gambar tetapi boleh dicetak 3D juga). Kemudian bahagian penyesuai membolehkan ensemble dipasang pada plat kura-kura atas dengan spacer nilon.

Kamera sebagai sensor tambahan atau pengganti LIDAR

Sekiranya anda tidak mahu membelanjakan terlalu banyak wang ke dalam LIDAR (yang harganya sekitar 100 $), cari kamera: terdapat juga algoritma SLAM yang hanya berjalan dengan kamera RGB monokular. Kedua-dua SBC menerima kamera USB atau CSI.

Lebih-lebih lagi kamera akan membolehkan anda menjalankan skrip penglihatan dan pengesanan objek komputer!

perhimpunan

Sebelum menutup robot, pasangkan kabel melalui lubang yang lebih besar di plat atas:

  • kabel yang sesuai dari pengatur 5V ke SBC anda
  • kabel USB dari Port Pengaturcaraan Arduino DUE (yang paling dekat dengan tong DC) ke port USB SBC anda

Kemudian pegang piring atas dengan lusinan skru. Robot anda kini sudah siap untuk diprogram, SELAMAT DILAKUKAN!

Langkah 7: Jadikannya Bergerak

Menyusun Arduino

Buka Arduino IDE kegemaran anda, dan import folder projek yang disebut own_turtlebot_core, kemudian pilih papan anda dan port yang sesuai, anda boleh merujuk kepada tutorial yang sangat baik ini.

Laraskan tetapan Teras

Projek ini terdiri daripada dua fail, dan satu perlu disesuaikan dengan robot anda. Oleh itu, mari kita buka sendiri_turtlebot_config.h, dan cari baris mana yang memerlukan perhatian kita:

#define ARDUINO_DUE // ** KOMEN BARIS INI JIKA ANDA TIDAK MENGGUNAKAN HUTANG **

Hendaklah digunakan hanya dengan Arduino DUE, jika tidak mengulas barisnya.

#tentukan RATE_CONTROLLER_KP 130.0 // ** TUNAI NILAI INI **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNAI NILAI INI ** # tentukan RATE_CONTROLLER_KI 0.00005 // ** TUNAI NILAI INI **

Ketiga parameter tersebut sesuai dengan kenaikan pengawal kadar yang digunakan oleh PID untuk mengekalkan kelajuan yang diinginkan. Bergantung pada voltan bateri, jisim robot, diameter roda dan gear mekanikal motor anda, anda perlu menyesuaikan nilainya. PID adalah pengawal klasik dan anda tidak akan terperinci di sini tetapi pautan ini harus memberi anda input yang mencukupi untuk menala sendiri.

/ * Tentukan pin * /

// motor A (kanan) motor bait constRightEncoderPinA = 38; // ** MODIFY DENGAN PIN ANDA NB ** const byte motorRightEncoderPinB = 34; // ** UBAHKAN DENGAN PIN ANDA NB ** const byte enMotorRight = 2; // ** MODIFY DENGAN PIN ANDA NB ** const byte in1MotorRight = 4; // ** UBAHKAN DENGAN PIN ANDA NB ** const byte in2MotorRight = 3; // ** MODIFY DENGAN PIN ANDA NB ** // motor B (kiri) const byte motorLeftEncoderPinA = 26; // ** MODIFY DENGAN PIN ANDA NB ** const byte motorLeftEncoderPinB = 30; // ** UBAHKAN DENGAN PIN ANDA NB ** const byte enMotorLeft = 7; // ** MODIFY DENGAN PIN ANDA NB ** const byte in1MotorLeft = 6; // ** MODIFY DENGAN PIN ANDA NB ** const byte in2MotorLeft = 5; // ** UBAHKAN DENGAN PIN NB ANDA **

Blok ini menentukan pinout antara L298N dan Arduino, cukup ubah nombor pin agar sesuai dengan nombor anda. Setelah selesai dengan fail konfigurasi, kompilasi dan muat naik kodnya!

Pasang dan konfigurasikan ROS

Setelah anda mencapai langkah ini, arahannya sama seperti yang diperincikan pada manual TurtleBot3 yang sangat baik, anda perlu mengikuti dengan teliti

TurtleBot 3 yang baik kini menjadi milik anda dan anda boleh menjalankan semua pakej dan tutorial yang ada dengan ROS.

Ok tapi apa itu ROS?

ROS bermaksud Sistem Operasi Robot, mungkin nampaknya agak rumit pada mulanya tetapi bukan, bayangkan cara komunikasi antara perkakasan (sensor dan penggerak) dan perisian (algoritma untuk navigasi, kawalan, penglihatan komputer…). Sebagai contoh, anda boleh menukar LIDAR semasa anda dengan model lain dengan mudah tanpa mematahkan persediaan anda, kerana setiap LIDAR menerbitkan mesej LaserScan yang sama. ROS yang banyak digunakan adalah robotik, Jalankan contoh pertama anda

Setaraf 'dunia hello' untuk ROS terdiri daripada operasi robot anda melalui komputer jauh. Apa yang anda ingin lakukan ialah menghantar arahan halaju untuk membuat motor berputar, perintahnya mengikuti paip ini:

  • node turtlebot_teleop, berjalan di komputer jauh, menerbitkan topik "/ cmd_vel" termasuk mesej Twist
  • mesej ini diteruskan melalui rangkaian mesej ROS ke SBC
  • simpul bersiri membolehkan "/ cmd_vel" diterima di Arduino
  • Arduino membaca mesej dan menetapkan kadar sudut pada setiap motor agar sepadan dengan kelajuan linear dan sudut robot yang dikehendaki

Operasi ini mudah dan dapat dicapai dengan menjalankan baris arahan yang disenaraikan di atas! Sekiranya anda mahukan maklumat yang lebih terperinci, tonton videonya.

[SBC]

mata ros

[SBC]

rosrun rosserial_python serial_node.py _port: = / dev / ttyACM0 _baud: = 115200

[Komputer jarak jauh]

eksport TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Untuk melangkah lebih jauh

Anda perlu mengetahui perkara terakhir sebelum mencuba semua contoh rasmi, dalam manual setiap kali anda menghadapi arahan ini:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

anda perlu menjalankan perintah ini di SBC anda sebagai gantinya:

rosrun rosserial_python serial_node.py _port: = / dev / ttyACM0 _baud: = 115200

Dan jika anda mempunyai LIDAR jalankan arahan yang berkaitan pada SBC anda, dalam kes saya, saya menjalankan LDS01 dengan baris di bawah:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Dan itu sahaja, anda telah membuat turtlebot anda sendiri dengan pasti:) Anda sudah bersedia untuk menemui keupayaan hebat ROS, dan untuk kod penglihatan dan algoritma pembelajaran mesin.

Disyorkan: