- Perkakasan Diperlukan:
- Keperluan Pengaturcaraan:
- Menyiapkan Pemprosesan pada Raspberry Pi:
- Rajah Litar:
- Program penjejakan Raspberry Pi Ball:
- Kerja Robot Penjejakan Bola Raspberry Pi:
Bidang Robotik, Kecerdasan Buatan dan Pembelajaran Mesin berkembang pesat sehingga pasti mengubah gaya hidup manusia dalam masa terdekat. Robot dianggap memahami dan berinteraksi dengan dunia nyata melalui sensor dan pemprosesan pembelajaran mesin. Pengecaman gambar adalah salah satu cara popular di mana robot dianggap memahami objek dengan melihat dunia nyata melalui kamera seperti kita. Dalam projek ini, mari gunakan kekuatan Raspberry Pi untuk membina Robot yang dapat mengesan bola dan mengikutinya seperti robot yang bermain bola sepak.
OpenCV adalah alat sumber yang sangat terkenal dan terbuka yang digunakan untuk pemprosesan Imej, tetapi dalam tutorial ini untuk memastikan semuanya mudah, kami menggunakan IDE Pemprosesan. Oleh kerana memproses untuk ARM juga telah mengeluarkan perpustakaan GPIO untuk diproses, kita tidak perlu beralih antara python dan memproses lagi untuk bekerja dengan Raspberry Pi. Bunyi sejuk kan? Oleh itu, mari kita mulakan.
Perkakasan Diperlukan:
- Pai raspberi
- Modul kamera dengan kabel reben
- Casis Robot
- Gear motor dengan roda
- Pemandu motor L293D
- Power bank atau sumber kuasa mudah alih yang lain
Keperluan Pengaturcaraan:
- Monitor atau paparan lain untuk Raspberry pi
- Papan kekunci atau tetikus untuk Pi
- Memproses perisian ARM
Catatan: Wajib mempunyai paparan yang disambungkan ke kabel melalui kabel semasa pengaturcaraan kerana barulah video kamera dapat dilihat
Menyiapkan Pemprosesan pada Raspberry Pi:
Seperti diberitahu sebelumnya, kami akan menggunakan lingkungan pemrosesan untuk Memprogram Pi Raspberry kami dan bukan cara default menggunakan python. Jadi, ikuti langkah-langkah di bawah:
Langkah 1: - Sambungkan Raspberry Pi anda ke monitor, papan kekunci dan tetikus dan hidupkan.
Langkah 2: - Pastikan anda Pi tersambung ke sambungan internet yang aktif kerana kami akan memuat turun beberapa perkara.
Langkah 3: - Klik pada Processing ARM, untuk memuat turun pemprosesan IDE untuk Raspberry Pi. Muat turun akan dalam bentuk fail ZIP.
Langkah 4: - Setelah dimuat turun, ekstrak fail dalam folder ZIP anda di direktori pilihan anda. Saya baru mengeluarkannya di desktop saya.
Langkah 5: - Sekarang, buka folder yang diekstrak dan klik pada fail bernama pemprosesan. Ia harus membuka tetingkap seperti yang ditunjukkan di bawah.
Langkah 6: - Ini adalah persekitaran di mana kita akan menaip kod kita. Bagi orang yang biasa dengan Arduino, jangan terkejut YA IDE kelihatan serupa dengan Arduino dan begitu juga programnya.
Langkah 7: - Kami memerlukan dua perpustakaan agar program bola kami berfungsi, untuk memasangnya kemudian klik pada Sketch -> Import Library -> Add Library . Kotak dialog berikut akan dibuka.
Langkah 8: - Gunakan kotak teks kiri atas untuk mencari Raspberry Pi dan tekan enter, hasil carian anda akan kelihatan seperti ini.
Langkah 9: - Cari perpustakaan yang bernama "GL Video" dan "Hardware I / O" dan klik pasang untuk memasangnya. Pastikan anda memasang kedua-dua perpustakaan.
Langkah 10: - Berdasarkan internet anda, pemasangan akan memakan masa beberapa minit. Setelah selesai kami bersedia untuk memproses perisian.
Rajah Litar:
Diagram litar Projek Penjejakan Bola Raspberry Pi ini ditunjukkan di bawah.
Seperti yang anda lihat litar ini melibatkan kamera PI, modul Pemandu Motor dan sepasang motor yang disambungkan ke Raspberry pi. Litar lengkap dikuasakan oleh Mobile Power bank (diwakili oleh bateri AAA di litar di atas).
Oleh kerana perincian pin tidak disebutkan pada Raspberry Pi, kami perlu mengesahkan pin menggunakan gambar di bawah
Untuk memandu Motor, kita memerlukan empat pin (A, B, A, B). Empat pin ini dihubungkan dari GPIO14,4,17 dan 18 masing-masing. Kawat jingga dan putih bersama-sama membentuk sambungan untuk satu motor. Oleh itu, kita mempunyai dua pasang sedemikian untuk dua motor.
Motor disambungkan ke modul Pemacu Motor L293D seperti yang ditunjukkan dalam gambar dan modul pemacu dikuasakan oleh power bank. Pastikan landasan power bank disambungkan ke ground Raspberry Pi, hanya sambungan anda yang akan berfungsi.
Selesai sahaja dengan sambungan Perkakasan kami, mari kembali ke persekitaran pemprosesan kami dan mulakan pengaturcaraan untuk mengajar robot kami bagaimana mengesan bola.
Program penjejakan Raspberry Pi Ball:
The program Pemprosesan lengkap projek ini diberikan pada akhir halaman ini, yang anda terus menggunakan. Lebih jauh di bawah, saya telah menerangkan cara kerja kod tersebut agar anda dapat menggunakannya untuk projek serupa yang lain.
The konsep program adalah sangat mudah. Walaupun tujuan projek ini adalah untuk mengesan bola, kita sebenarnya tidak akan melakukannya. Kami hanya akan mengenal pasti bola menggunakan warnanya. Seperti yang kita semua tahu, video hanyalah bingkai gambar yang berterusan. Oleh itu, kami mengambil setiap gambar dan membaginya menjadi piksel. Kemudian kami membandingkan setiap warna piksel dengan warna bola; jika perlawanan dijumpai maka kita boleh mengatakan bahawa kita telah menjumpai bola. Dengan maklumat ini kita juga dapat mengenal pasti posisi bola (warna piksel) di layar. Sekiranya kedudukannya paling kiri kita menggerakkan robot ke kanan, jika kedudukannya jauh ke kanan kita menggerakkan robot ke kiri sehingga kedudukan piksel selalu berada di tengah layar. Anda boleh menonton video Computer Vision Daniel shiffman untuk mendapatkan gambaran yang jelas.
Seperti biasa kita mulakan dengan mengimport dua perpustakaan yang kita muat turun. Ini dapat dilakukan dengan dua baris berikut. Perpustakaan Hardware I / O digunakan untuk mengakses pin GPIO PI secara langsung dari persekitaran pemprosesan, perpustakaan glvideo digunakan untuk mengakses modul kamera Raspberry Pi.
pemprosesan import.io. *; import gohai.glvideo. *;
Di dalam fungsi penyediaan, kami menginisialisasi pin output untuk mengendalikan motor dan juga mendapatkan video dari kamera pi dan ukurannya dalam tetingkap berukuran 320 * 240.
persediaan kosong () {saiz (320, 240, P2D); video = GLCapture baru (ini); video.start (); trackColor = warna (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
The seri tidak sah adalah seperti gelung tak terhingga kod di dalam gelung ini akan melaksanakan selagi program ditamatkan. Sekiranya sumber kamera tersedia, kita membaca video yang keluar dari situ
undian tidak sah () {latar belakang (0); jika (video.available ()) {video.read (); }}
Kemudian kami mula membahagikan bingkai video menjadi piksel. Setiap piksel mempunyai nilai merah, hijau dan biru. Nilai-nilai ini disimpan dalam pemboleh ubah r1, g1 dan b1
untuk (int x = 0; x <video.width; x ++) {untuk (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Apakah warna warna semasaColor = video.pixels; apungan r1 = merah (warna semasa); apungan g1 = hijau (warna semasa); apungan b1 = biru (warna semasa);
Untuk mengesan warna bola pada mulanya, kita harus mengklik warnanya. Setelah klik warna bola akan disimpan dalam pemboleh ubah yang disebut trackColour .
batal tetikusTekanan () {// Simpan warna di mana tetikus diklik dalam pemboleh ubah trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Setelah kita mempunyai warna trek dan warna semasa kita harus membandingkannya. Perbandingan ini menggunakan fungsi dist. Ia memeriksa seberapa dekat warna semasa dengan warna trek.
apungan d = dist (r1, g1, b1, r2, g2, b2);
Yang nilai dist akan menjadi sifar untuk padanan yang tepat. Oleh itu, jika nilai dist adalah kurang daripada nilai yang ditentukan (World Record) maka kita menganggap bahawa kita telah menemui warna trek. Kemudian kita mendapat lokasi piksel itu dan menyimpannya dalam pemboleh ubah X yang paling dekat dan Y yang paling hampir untuk mencari lokasi bola
jika (d <worldRecord) {worldRecord = d; terdekatX = x; terdekatY = y; }
Kami juga melukis elips di sekitar warna yang dijumpai untuk menunjukkan bahawa warna telah dijumpai. Nilai kedudukan juga dicetak pada konsol, ini akan banyak membantu semasa melakukan debug.
if (worldRecord <10) {// Lukis bulatan pada isi piksel yang dilacak (trackColor); berat badan (4.0); strok (0); elips (terdekatX, terdekatY, 16, 16); println (terdekatX, terdekatY);
Akhirnya kita dapat membandingkan kedudukan X yang terdekat dan Y yang paling dekat dan menyesuaikan motor sedemikian rupa sehingga warnanya sampai ke tengah skrin. Kod di bawah ini digunakan untuk membalikkan robot ke kanan kerana kedudukan X warna didapati berada di sebelah kiri skrin (<140)
jika (terdekatX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); kelewatan (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Belok Kanan"); }
Begitu juga kita dapat memeriksa kedudukan X dan Y untuk mengawal motor ke arah yang diperlukan. Seperti biasa anda boleh merujuk bahagian bawah halaman untuk program yang lengkap.
Kerja Robot Penjejakan Bola Raspberry Pi:
Setelah anda bersedia dengan perkakasan dan program, inilah masanya untuk bersenang-senang. Sebelum menguji bot kami di darat, kami harus memastikan semuanya berfungsi dengan baik. Sambungkan Pi anda untuk memantau dan melancarkan kod pemprosesan. Anda harus melihat suapan video pada tetingkap kecil. Sekarang, bawa bola ke dalam bingkai dan klik pada bola untuk mengajar robot bahawa ia harus mengesan warna tertentu ini. Sekarang gerakkan bola di sekitar skrin dan anda harus melihat roda berputar.
Sekiranya semuanya berfungsi seperti yang diharapkan, lepaskan bot di tanah dan mula bermain dengannya. Pastikan bilik diterangi secara merata untuk hasil terbaik. Kerja-kerja projek yang lengkap ditunjukkan dalam video di bawah. Harap anda memahami projek ini dan menikmati pembinaan sesuatu yang serupa. Sekiranya anda mempunyai masalah, sila hantarkannya di bahagian komen di bawah atau bantu.