Daftar Isi:

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

Video: Bangun Robot Turtlebot Anda Sendiri!: 7 Langkah

Video: Bangun Robot Turtlebot Anda Sendiri!: 7 Langkah
Video: Autonomous Navigation of Turtlebot Using ROS | ROS Tutorials for Beginners | Lesson 9 2024, November
Anonim
Bangun Robot Turtlebot Anda Sendiri!
Bangun Robot Turtlebot Anda Sendiri!
Bangun Robot Turtlebot Anda Sendiri!
Bangun Robot Turtlebot Anda Sendiri!
Bangun Robot Turtlebot Anda Sendiri!
Bangun Robot Turtlebot Anda Sendiri!

EDIT:

Informasi lebih lanjut terkait perangkat lunak dan kontrol tersedia di tautan ini:

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

Tautan langsung ke kode adalah:

github.com/MattMgn/foxbot_core

Mengapa proyek ini?

Turtlebot 3 adalah platform sempurna untuk mendalami elektronik, robotika, dan bahkan AI! Saya mengusulkan Anda untuk membangun turtlebot Anda sendiri selangkah demi selangkah dengan komponen yang terjangkau tanpa mengorbankan fitur dan kinerja. Dengan satu hal dalam pikiran: menjaga yang terbaik dari robot awal, modularitasnya, kesederhanaannya, dan sejumlah besar paket untuk navigasi otonom dan AI dari komunitas sumber terbuka.

Proyek ini merupakan kesempatan bagi pemula untuk memperoleh gagasan tentang elektronik, mekanika, dan ilmu komputer, dan bagi yang lebih berpengalaman untuk mendapatkan platform yang kuat untuk menguji dan mengembangkan algoritme kecerdasan buatan.

Apa yang akan Anda temukan dalam proyek ini?

Anda akan menemukan bagian mekanik dan elektronik penting mana yang harus disimpan dari bot asli untuk menjamin kompatibilitas penuh.

Seluruh proses pembuatan akan dirinci: mulai dari pencetakan suku cadang 3D, perakitan dan beberapa komponen, menyolder dan mengintegrasikan elektronik hingga akhirnya kompilasi kode di Arduino. Instruksi ini akan diakhiri dengan contoh 'halo dunia' untuk membiasakan Anda dengan ROS. Jika ada yang kurang jelas, jangan ragu untuk bertanya!

Perlengkapan

Elektronik:

1 x Komputer Papan Tunggal untuk menjalankan ROS, bisa berupa Raspberry Pi atau Jetson Nano misalnya

1 x Arduino DUE, Anda juga bisa menggunakan UNO atau MEGA

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

Motor DC 2 x 12V dengan encoder (opsi 100 RPM)

1 x driver motor L298N

2x5V pengatur

1 x Baterai (misalnya baterai LiPo 3S/4S)

2 x ON/OFF switch

2 x LED

2 x 470kOhm Resistor

3 x 4 pin konektor JST

1 x kabel USB (setidaknya satu antara SBC dan Arduino)

Sensor:

1 x Sensor arus (opsional)

1 x 9 Derajat Kebebasan IMU (opsional)

1 x LIDAR (opsional)

Casis:

16 x Pelat modular Turtlebot (yang juga dapat dicetak 3D)

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

4 x Nylon spacer 30mm (opsional)

20 x sisipan M3 (opsional)

Yang lain:

kabel

Sekrup dan sisipan M2.5 dan M3

Printer 3D atau seseorang yang dapat mencetak suku cadang untuk Anda

Bor tangan dengan satu set mata bor seperti ini

Langkah 1: Deskripsi

Keterangan
Keterangan
Keterangan
Keterangan

Robot ini adalah penggerak diferensial sederhana yang menggunakan 2 roda yang dipasang langsung pada motornya dan roller caster yang ditempatkan di bagian belakang untuk mencegah robot terjatuh. Robot ini dibagi menjadi dua lapisan:

Lapisan Bawah: dengan kelompok propulsi (baterai, pengontrol motor dan motor), dan elektronik 'level rendah': mikrokontroler Arduino, pengatur tegangan, sakelar…

Lapisan Atas: dengan elektronik 'tingkat tinggi' yaitu Komputer Papan Tunggal dan LIDAR

Lapisan-lapisan tersebut dihubungkan dengan bagian dan sekrup yang dicetak untuk memastikan kekokohan struktur.

Skema elektronik

Skema mungkin tampak agak berantakan. Ini adalah gambar skema dan tidak mewakili semua kabel, konektor, dan papan proto tetapi dapat dibaca sebagai berikut:

Baterai 3S Litihum Ion Polymer dengan kapasitas 3000mAh memberi daya pada sirkuit pertama, memberi daya pada papan pengontrol motor (L298N) dan regulator 5V pertama untuk encoder motor dan Arduino. Sirkuit ini diaktifkan melalui sakelar dengan LED yang menunjukkan status ON/OFF-nya.

Baterai yang sama memberi daya pada sirkuit kedua, tegangan input diubah menjadi 5V untuk memberi daya pada Komputer Papan Tunggal. Di sini juga, sirkuit diaktifkan melalui sakelar dan LED.

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

Desain mekanik

Bingkai robot terdiri dari 16 bagian identik yang membentuk 2 lapisan persegi (lebar 28cm). Banyaknya lubang memungkinkan untuk memasang komponen tambahan di mana pun Anda membutuhkannya dan menawarkan desain modular yang lengkap. Untuk proyek ini, saya memutuskan untuk mendapatkan pelat TurtleBot3 asli tetapi Anda juga dapat mencetaknya 3D karena desainnya open source.

Langkah 2: Perakitan Blok Motor

Perakitan Blok Motor
Perakitan Blok Motor
Perakitan Blok Motor
Perakitan Blok Motor
Perakitan Blok Motor
Perakitan Blok Motor

Persiapan motorik

Langkah pertama adalah menambahkan pita busa setebal 1mm di sekitar setiap motor untuk mencegah getaran dan kebisingan saat motor akan berputar.

Bagian yang dicetak

Dudukan motor menghasilkan dua bagian yang mencengkeram motor seperti sebaliknya. 4 sekrup dicapai untuk mengencangkan motor di dudukannya.

Setiap dudukan terdiri dari beberapa lubang yang menampung sisipan M3 untuk dipasang pada struktur. Ada lebih banyak lubang daripada yang sebenarnya dibutuhkan, lubang tambahan pada akhirnya dapat digunakan untuk memasang bagian tambahan.

Pengaturan printer 3D: semua bagian dicetak dengan parameter berikut:

  • Nozel berdiameter 0.4mm
  • 15% bahan pengisi
  • Lapisan tinggi 0,2 mm

Roda

Roda yang dipilih dilapisi dengan karet untuk memaksimalkan daya rekat dan memastikan kondisi rolling bebas slip. Sekrup penjepit mempertahankan roda terpasang pada poros motor. Diameter roda harus cukup besar untuk melewati langkah kecil dan ketidakteraturan tanah (roda tersebut berdiameter 65mm).

Fiksasi

Setelah Anda selesai dengan satu blok motor, ulangi operasi sebelumnya dan kemudian cukup pasang ke lapisan dengan sekrup M3.

Langkah 3: Sakelar dan Persiapan Kabel

Sakelar dan Persiapan Kabel
Sakelar dan Persiapan Kabel
Sakelar dan Persiapan Kabel
Sakelar dan Persiapan Kabel
Sakelar dan Persiapan Kabel
Sakelar dan Persiapan Kabel

Persiapan kabel motor

Umumnya encoder motor dilengkapi dengan kabel termasuk di satu sisi konektor 6pin yang menghubungkan bagian belakang PCB encoder, dan kabel telanjang di sisi lain.

Anda memiliki kemungkinan untuk langsung menyoldernya pada proto-board Anda atau bahkan Arduino Anda, tetapi saya menyarankan Anda untuk menggunakan pin header perempuan dan konektor JST-XH sebagai gantinya. Dengan demikian Anda dapat memasang/mencabutnya di papan proto Anda dan membuat perakitan Anda lebih mudah.

Tip: Anda dapat menambahkan kepang selongsong yang dapat diperluas di sekitar kabel dan potongan tabung menyusut di dekat konektor, dengan demikian Anda akan mendapatkan kabel 'bersih'.

Saklar dan LED

Untuk mengaktifkan dua rangkaian daya, siapkan 2 kabel LED dan sakelar: pertama-tama solder resistor 470kOhm pada salah satu pin LED, lalu solder LED pada salah satu pin sakelar. Di sini juga, Anda dapat menggunakan sepotong tabung menyusut untuk menyembunyikan resistor di dalamnya. Hati-hati menyolder LED ke arah yang benar! Ulangi operasi ini untuk mendapatkan dua kabel sakelar/led.

perakitan

Pasang kabel yang dibuat sebelumnya pada bagian cetakan 3D yang sesuai. Gunakan mur untuk mempertahankan sakelar, LED tidak memerlukan lem, cukup paksa untuk memasukkannya ke dalam lubang.

Langkah 4: Pengkabelan Papan Elektronik

Pengkabelan Papan Elektronik
Pengkabelan Papan Elektronik
Pengkabelan Papan Elektronik
Pengkabelan Papan Elektronik
Pengkabelan Papan Elektronik
Pengkabelan Papan Elektronik

Tata letak papan

Papan proto yang sesuai dengan tata letak papan Arduino digunakan untuk mengurangi jumlah kabel. Di bagian atas proto-board, L298N ditumpuk dengan Dupont female header (Dupont adalah 'Arduino like' header).

Persiapan L298N

Awalnya, papan L298N tidak dilengkapi dengan header Dupont jantan yang sesuai, Anda perlu menambahkan baris 9 pin di bawah papan. Anda perlu membuat 9 lubang dengan mata bor berdiameter 1mm secara paralel dengan lubang yang ada seperti yang Anda lihat pada gambar. Kemudian hubungkan pin yang sesuai dari 2 baris dengan bahan solder dan kabel pendek.

Pin-out L298N

L298N terdiri dari 2 saluran yang memungkinkan kontrol kecepatan dan arah:

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

kecepatan melalui 1 output digital, yang disebut ENA untuk saluran pertama dan ENB untuk yang 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

Bahkan jika l298N biasanya mampu memberikan 5V, saya masih menambahkan regulator kecil. Ini memberi daya pada Arduino melalui port VIN dan 2 encoder pada motor. Anda dapat melewati langkah ini dengan langsung menggunakan regulator L298N 5V bawaan.

Konektor JST dan pin-out Encoder

Gunakan 4 pin adaptor konektor JST-XH perempuan, setiap konektor kemudian ditautkan ke:

  • 5V dari pengatur
  • sebuah tanah
  • dua port input digital (misalnya: 34 dan 38 untuk encoder kanan dan 26 dan 30 untuk encoder kiri)

Ekstra I2C

Seperti yang mungkin Anda perhatikan, ada konektor JST 4pin tambahan pada proto-board. Ini digunakan untuk menghubungkan perangkat I2C seperti IMU, Anda dapat melakukan hal yang sama dan bahkan menambahkan port Anda sendiri.

Langkah 5: Grup Motor dan Arduino di Lapisan Bawah

Grup Motor dan Arduino di Lapisan Bawah
Grup Motor dan Arduino di Lapisan Bawah
Grup Motor dan Arduino di Lapisan Bawah
Grup Motor dan Arduino di Lapisan Bawah
Grup Motor dan Arduino di Lapisan Bawah
Grup Motor dan Arduino di Lapisan Bawah

Fiksasi blok motor

Setelah lapisan bawah dipasang dengan 8 pelat Turtlebot, cukup gunakan 4 sekrup M3 langsung di sisipan untuk mempertahankan blok motor. Kemudian Anda dapat menyambungkan kabel daya motor ke output L298N dan kabel yang dibuat sebelumnya ke konektor JST proto-board.

Distribusi tenaga

Distribusi daya hanya diwujudkan dengan blok terminal penghalang. Di satu sisi penghalang, kabel dengan steker perempuan XT60 disekrup untuk menghubungkan ke baterai LiPo. Di sisi lain, dua kabel LED/saklar kami yang sebelumnya disolder disekrup. Dengan demikian setiap sirkuit (Motor dan Arduino) dapat diaktifkan dengan sakelarnya sendiri dan LED hijau yang sesuai.

Manajemen kabel

Cepat Anda harus berurusan dengan banyak kabel! Untuk mengurangi aspek yang berantakan, Anda bisa menggunakan 'tabel' yang sudah dicetak 3D sebelumnya. Di atas meja, pertahankan papan elektronik Anda dengan selotip dua sisi, dan di bawah meja biarkan kabel mengalir bebas.

Pemeliharaan baterai

Untuk menghindari keluarnya baterai saat mengemudikan robot Anda, Anda cukup menggunakan karet gelang rambut.

kastor rol

Tidak benar-benar roller caster tetapi setengah bola sederhana yang dipasang dengan 4 sekrup di lapisan bawah. Itu cukup untuk memastikan stabilitas robot.

Langkah 6: Komputer Papan Tunggal dan Sensor di Lapisan Atas

Komputer Papan Tunggal dan Sensor di Lapisan Atas
Komputer Papan Tunggal dan Sensor di Lapisan Atas
Komputer Papan Tunggal dan Sensor di Lapisan Atas
Komputer Papan Tunggal dan Sensor di Lapisan Atas
Komputer Papan Tunggal dan Sensor di Lapisan Atas
Komputer Papan Tunggal dan Sensor di Lapisan Atas

Komputer Papan Tunggal mana yang harus dipilih?

Saya tidak perlu menyajikan kepada Anda Raspberry Pi yang terkenal, jumlah kasus penggunaannya sebagian besar melebihi bidang robotika. Tetapi ada penantang yang jauh lebih kuat untuk Raspberry Pi yang mungkin Anda abaikan. Memang Jetson Nano dari Nvidia menyematkan kartu grafis 128-core yang kuat selain prosesornya. Kartu grafis khusus ini telah dikembangkan untuk mempercepat tugas komputasi yang mahal seperti pemrosesan gambar atau inferensi jaringan saraf.

Untuk proyek ini saya memilih Jetson Nano dan Anda dapat menemukan bagian 3D yang sesuai di antara file terlampir, tetapi jika Anda ingin menggunakan Raspberry Pi, ada banyak kasing yang dapat dicetak di sini.

Pengatur 5V

Papan apa pun yang Anda putuskan untuk dibawa ke robot Anda, Anda memerlukan regulator 5V. Raspberry Pi 4 terbaru membutuhkan 1,25A maks tetapi Jetson Nano membutuhkan hingga 3A pada tekanan jadi saya memilih Pololu 5V 6A untuk memiliki cadangan daya untuk komponen masa depan (sensor, lampu, stepper …), tetapi 5V 2A murah apa pun harus melakukannya pekerjaan. Jetson menggunakan barel DC 5.5mm dan Pi micro USB, ambil kabel yang sesuai dan solder ke output regulator.

Tata letak LIDAR

LIDAR yang digunakan di sini adalah LDS-01, ada berbagai LIDAR 2D lainnya yang dapat digunakan seperti RPLidar A1/A2/A3, YDLidar X4/G4 atau bahkan LIDAR Hokuyo. Satu-satunya persyaratan adalah harus dicolokkan melalui USB dan ditempatkan di tengah di atas struktur. Memang jika LIDAR tidak terpusat dengan baik, peta yang dibuat oleh algoritma SLAM dapat menggeser perkiraan posisi dinding dan rintangan dari posisi sebenarnya. Juga jika ada rintangan dari robot yang melewati sinar laser, itu akan mengurangi jangkauan dan bidang pandang.

Pemasangan LIDAR

LIDAR dipasang pada bagian cetak 3D yang mengikuti bentuknya, bagian itu sendiri dipegang pada pelat persegi panjang (sebenarnya di kayu lapis pada gambar tetapi bisa juga dicetak 3D). Kemudian bagian adaptor memungkinkan ansambel dipasang pada pelat turtlebot atas dengan spacer nilon.

Kamera sebagai sensor tambahan atau pengganti LIDAR

Jika Anda tidak ingin menghabiskan terlalu banyak uang untuk LIDAR (yang harganya sekitar $ 100), gunakan kamera: ada juga algoritma SLAM yang hanya berjalan dengan kamera RGB bermata. Kedua SBC menerima kamera USB atau CSI.

Selain itu kamera akan membiarkan Anda menjalankan visi komputer dan skrip deteksi objek!

perakitan

Sebelum menutup robot, lewati kabel melalui lubang yang lebih besar di pelat atas:

  • kabel yang sesuai dari regulator 5V ke SBC Anda
  • kabel USB dari Port Pemrograman Arduino DUE (paling dekat dengan barel DC) ke port USB SBC Anda

Kemudian pegang pelat atas pada posisinya dengan selusin sekrup. Robot Anda sekarang siap untuk diprogram, SELESAI!

Langkah 7: Buat Ini Bergerak

Kompilasi Arduino

Buka Arduino IDE favorit Anda, dan impor folder proyek bernama own_turtlebot_core, lalu pilih papan Anda dan port yang sesuai, Anda dapat merujuk ke tutorial yang luar biasa ini.

Sesuaikan pengaturan Inti

Proyek ini terdiri dari dua file, dan satu file harus disesuaikan dengan robot Anda. Jadi mari kita buka own_turtlebot_config.h, dan temukan baris mana yang membutuhkan perhatian kita:

#define ARDUINO_DUE // ** COMMENT LINE INI JIKA ANDA TIDAK MENGGUNAKAN DUE **

Harus digunakan hanya dengan Arduino DUE, jika tidak komentar baris.

#define RATE_CONTROLLER_KP 130.0 // ** TUNE NILAI INI **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE NILAI INI ** #define RATE_CONTROLLER_KI 0,00005 // ** TUNE THIS VALUE **

Ketiga parameter tersebut sesuai dengan gain pengontrol laju yang digunakan oleh PID untuk mempertahankan kecepatan yang diinginkan. Bergantung pada voltase baterai, massa robot, diameter roda, dan roda gigi mekanis motor Anda, Anda perlu menyesuaikan nilainya. PID adalah pengontrol klasik dan Anda tidak akan dirinci di sini, tetapi tautan ini akan memberi Anda cukup masukan untuk menyetel sendiri.

/* Menentukan pin */

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

Blok ini mendefinisikan pinout antara L298N dan Arduino, cukup ubah nomor pin agar sesuai dengan milik Anda. Setelah selesai dengan file konfigurasi, kompilasi dan unggah kodenya!

Instal dan konfigurasikan ROS

Setelah Anda mencapai langkah ini, instruksinya persis sama dengan yang dirinci pada manual TurtleBot3 yang luar biasa, Anda harus mengikuti dengan cermat

bagus TurtleBot 3 sekarang milik Anda dan Anda dapat menjalankan semua paket dan tutorial yang ada dengan ROS.

Oke tapi apa itu ROS?

ROS adalah singkatan dari Robots Operating System, mungkin tampak cukup rumit pada awalnya tetapi tidak, bayangkan cara komunikasi antara perangkat keras (sensor dan aktuator) dan perangkat lunak (algoritma untuk navigasi, kontrol, visi komputer…). Misalnya, Anda dapat dengan mudah menukar LIDAR Anda saat ini dengan model lain tanpa merusak pengaturan Anda, karena setiap LIDAR menerbitkan pesan LaserScan yang sama. ROS yang banyak digunakan adalah robotika, Jalankan contoh pertama Anda

Setara 'hello world' untuk ROS terdiri dari teleoperate robot Anda melalui komputer jarak jauh. Yang ingin Anda lakukan adalah mengirim perintah kecepatan untuk membuat motor berputar, perintahnya mengikuti pipa ini:

  • node turtlebot_teleop, berjalan di komputer jarak jauh, menerbitkan topik "/ cmd_vel" termasuk pesan Twist
  • pesan ini diteruskan melalui jaringan pesan ROS ke SBC
  • node serial memungkinkan "/ cmd_vel" diterima di Arduino
  • Arduino membaca pesan dan mengatur kecepatan sudut pada setiap motor agar sesuai dengan kecepatan linier dan sudut robot yang diinginkan

Operasi ini sederhana dan dapat dicapai dengan menjalankan baris perintah yang tercantum di atas! Mau info lebih lengkapnya tonton aja videonya.

[SBC]

roscore

[SBC]

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

[Komputer remot]

ekspor TURTLEBOT3_MODEL=${TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Untuk melangkah lebih jauh

Anda perlu mengetahui hal terakhir sebelum mencoba semua contoh resmi, di manual setiap kali Anda menghadapi perintah 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 memiliki LIDAR, jalankan perintah terkait pada SBC Anda, dalam kasus saya, saya menjalankan LDS01 dengan baris di bawah ini:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Dan itu saja, Anda telah membangun turtlebot Anda sendiri secara definitif:) Anda siap untuk menemukan kemampuan fantastis ROS, dan untuk membuat kode visi dan algoritma pembelajaran mesin.

Direkomendasikan: