Daftar Isi:

Pemindai Laser Raspberry Pi: 9 Langkah (dengan Gambar)
Pemindai Laser Raspberry Pi: 9 Langkah (dengan Gambar)

Video: Pemindai Laser Raspberry Pi: 9 Langkah (dengan Gambar)

Video: Pemindai Laser Raspberry Pi: 9 Langkah (dengan Gambar)
Video: DIY Laser Scanner with TfMini and Raspberry Pi | ROS Tutorial for beginners #7 2024, Juli
Anonim
Image
Image
Pemindai Laser Raspberry Pi
Pemindai Laser Raspberry Pi

Pemindai Laser adalah perangkat sistem tertanam Raspberry Pi yang mampu mendigitalkan objek menjadi file.obj mesh untuk reproduksi menggunakan pencetakan 3D. Perangkat melakukan ini dengan memanfaatkan laser garis dan PiCam terintegrasi untuk melakukan visi komputer. Laser diposisikan 45 derajat miring dari laser dan memproyeksikan garis merah terang pada satu irisan vertikal objek. Kamera mendeteksi jarak irisan dari pusat untuk memberikan irisan jala. Objek diputar pada baki yang berputar dan proses ini diulang sampai objek penuh dipindai. File.obj yang dihasilkan akhirnya dikirim melalui email ke pengguna, membuat sistem sepenuhnya mandiri dan tertanam.

Instruksi ini akan menjelaskan bagaimana perangkat dibuat, beberapa hasil, dan langkah selanjutnya.

Langkah 1: Inspirasi

Inspirasi
Inspirasi
Inspirasi
Inspirasi

Sebagai pembuat yang rajin, saya telah mencetak 3D dan pemodelan solid selama beberapa tahun sekarang. Saya telah bekerja dengan banyak alat pembuatan prototipe yang berbeda dari router CNC hingga pemotong laser hingga printer 3D. Satu perangkat yang belum dibeli oleh pembuat lokal saya adalah pemindai 3D - dan saya dapat memberi tahu Anda alasannya.

Yang lebih murah (beberapa ratus dolar) tidak dapat diandalkan, membutuhkan kondisi yang sempurna, dan masih menghasilkan hasil yang cukup buruk. Yang mahal adalah… yah, mahal, berkisar hingga beberapa ribu dolar, membuat fungsinya tidak sepadan dalam banyak kasus. Selain itu, lebih sering daripada tidak, saya memilih untuk melakukan pengukuran dan merancang model dari awal daripada berurusan dengan jaring permukaan yang dihasilkan dari pemindaian.

Karena itu, saya ingin membuat pemindai mandiri anggaran untuk melihat seberapa baik saya dapat memindai objek menggunakan komponen rak.

Setelah melakukan beberapa penelitian, saya melihat bahwa banyak pemindai 3D menggunakan platform berputar dan kemudian berbagai sensor berbeda untuk mengukur jarak dari pusat untuk membangun model rotasi. Banyak di antaranya menggunakan kamera ganda yang mirip dengan Kinect. Saya akhirnya menemukan Yscanner yang merupakan pemindai resolusi rendah yang menggunakan laser. Melihat kesederhanaan dan kelayakan, teknik laser ini, di mana laser disinarkan secara offset relatif terhadap kamera untuk mengukur jarak dari pusat, tampak seperti jalur yang jelas ke depan.

Langkah 2: Alat dan Suku Cadang

Bagian:

  • Raspberry Pi $35.00
  • Kamera Raspberry Pi V2 $30,00
  • LED, Resistor, dan Kabel
  • Filamen pencetakan 3D
  • 12x12x0.125 lembaran kayu
  • perangkat keras M3
  • Motor Stepper - $14
  • Garis Laser - $8
  • Driver Motor Stepper LN298 - $2,65
  • Tombol Tekan Logam - $5

Peralatan:

  • Besi solder
  • Pemotong laser
  • pencetak 3D
  • Obeng
  • Tang

Langkah 3: Desain Tingkat Tinggi

Desain Tingkat Tinggi
Desain Tingkat Tinggi
Desain Tingkat Tinggi
Desain Tingkat Tinggi

Komponen utama dalam desain ini adalah laser garis yang diproyeksikan pada irisan vertikal objek. Proyeksi ini dapat ditangkap pada picamera, perspektifnya dikoreksi, dan kemudian difilter sebelum pemrosesan gambar. Dalam pengolahan citra, jarak antara setiap segmen garis dari pusat objek dapat dikumpulkan. Dalam koordinat radial, gambar ini akan menghasilkan komponen r dan z. Dimensi ketiga,, kemudian dicapai dengan memutar objek ke irisan baru. Konsep ini ditunjukkan pada gambar pertama.

Untuk melakukan tindakan yang dijelaskan di atas, saya menggunakan Raspberry Pi sebagai unit komputasi pusat kami. Saya memasang motor stepper dan driver motor ke Pi, ditenagai oleh catu 5V eksternal dan dikendalikan oleh pin GPIO Pi. Laser garis diletakkan pada garis 3,3 V pada Pi dan PiCam dipasang ke input kamera pada Pi. Terakhir, tombol sederhana yang ditarik ke bawah dipasang dan LED status untuk menunjukkan kepada pengguna status sistem. Sistem lengkap diringkas dalam diagram blok sistem.

Sejak awal, direncanakan untuk menempatkan elektronik dalam kotak potong laser yang disatukan dengan slot-T dan perangkat keras M3. Elektronik akan disembunyikan dari pandangan di kompartemen bawah dan penutup akan memungkinkan akses mudah ke penempatan objek pada baki yang berputar. Tutup ini diperlukan untuk meminimalkan jumlah cahaya yang bocor ke dalam sistem, karena cahaya eksternal ini dapat menghasilkan noise pada pemindaian akhir.

Langkah 4: Perangkat Keras

Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras
Perangkat keras

Seperti yang terlihat di atas, sebelum saya memulai pemotongan laser atau pencetakan 3D, saya menggunakan Autodesk Fusion 360 untuk membuat model 3D mendetail dari desain kami. Sebagai gambaran, perangkat ini adalah kotak sederhana dengan penutup dengan engsel potong laser. Ada dua lapisan utama perangkat: tempat tidur elektronik dan tempat tidur utama, dengan lubang untuk kabel untuk berjalan di antara dua lapisan.

Sebagian besar kotak kami diproduksi dengan pemotong laser, dengan desain yang diproduksi di Fusion 360 dan dipotong dengan pemotong laser Epilog Zing 40 W. Desain kami ditunjukkan pada gambar di atas. Dari kiri atas bergerak ke kanan, potongan-potongan itu adalah tempat tidur utama, tempat tidur elektronik, dua bagian untuk tutupnya, bagian belakang, bagian depan, dan dua bagian samping. Di tempat tidur utama, ada tiga guntingan utama: satu untuk memasang motor stepper, satu untuk merutekan kabel dari laser, dan satu untuk merutekan kabel lebar PiCam. Bagian tempat tidur memiliki lubang pemasangan untuk mengamankan Pi, papan tempat memotong roti, dan driver motor dan potongan yang lebih besar untuk mengakses motor stepper. Potongan tutupnya menyatu hanya untuk membentuk potongan segitiga yang terlihat di atas dan engselnya adalah ekstrusi sederhana yang merupakan lebar diameter lubang papan samping. Bagian belakang dan salah satu bagian samping memiliki slot di bagian samping sehingga port Pi (HDMI, USB, Ethernet, Power) dapat diakses dengan mudah. Bagian depan adalah bagian sederhana yang akhirnya saya buat lubang dengan bor tangan untuk memasang tombol dan LED. Seperti yang terlihat pada semua bagian, bagian kami disatukan oleh perangkat keras M3 menggunakan T-Joint dan slot. Ini adalah metode memegang potongan laser secara ortogonal dan aman. Sirip potongan berbaris dengan slot potongan lainnya dan potongan berbentuk t di tepinya memberi ruang bagi mur M3 untuk dijepit ke dalamnya tanpa berputar. Hal ini memungkinkan kita untuk kemudian menggunakan sekrup M3 untuk mengunci potongan bersama-sama dengan ruang gerak yang sangat sedikit tanpa perakitan sepenuhnya permanen.

Saya memilih untuk mengerjakan sebagian besar karya kami dengan pemotong laser karena kecepatan dan kemudahannya. Namun, saya masih harus mencetak 3D beberapa bagian karena geometri 3D mereka yang akan lebih sulit dibuat pada pemotong. Bagian pertama adalah pemegang laser garis. Potongan ini harus dipasang di tempat tidur utama pada 45 derajat dari pandangan kamera dan memiliki lubang sedemikian rupa sehingga laser bisa masuk dengan pas gesekan ke dalamnya. Saya juga harus membuat dudukan motor karena poros motor sangat panjang. Gesekan pemasangan masuk ke dalam potongan potongan laser dan menurunkan bidang tempat motor terpasang sedemikian rupa sehingga platform berputar rata dengan alas utama.

Langkah 5: Elektronik

Elektronik
Elektronik

Perangkat keras pengkabelan proyek ini sangat sederhana karena pemindai 3D tidak memerlukan terlalu banyak periferal. Motor, tombol, LED, laser, dan kamera perlu dihubungkan ke Pi. Seperti yang ditunjukkan, saya memastikan untuk menghubungkan resistor secara seri dengan setiap pin yang kami gunakan untuk melindungi pin. Satu pin GPIO didedikasikan untuk mengontrol LED status, yang akan menyala saat perangkat siap digunakan dan berdenyut dengan PWM saat perangkat beroperasi. Pin GPIO lain terhubung ke tombol yang ditarik, mendaftarkan HIGH saat tombol tidak ditekan dan LOW saat tombol ditekan. Terakhir, saya mendedikasikan empat pin GPIO untuk menggerakkan motor stepper.

Karena motor kami hanya perlu melangkah sampai batas tertentu tanpa memerlukan kontrol kecepatan, kami memilih driver motor stepper yang lebih sederhana (L298N) yang hanya meningkatkan jalur kontrol untuk memasukkan input motor. Untuk mempelajari tentang cara mengoperasikan motor stepper pada tingkat yang sangat rendah, kami merujuk pada lembar data L298N dan perpustakaan Arduino. Motor stepper memiliki inti magnet dengan jari-jari yang menonjol dari polaritas bolak-balik. Keempat kabel dibungkus untuk mengontrol dua elektromagnet yang masing-masing menggerakkan setiap jari yang berlawanan di motor. Jadi, dengan mengganti polaritas jari, kita bisa mendorong stepper satu langkah. Dengan pengetahuan tentang cara kerja stepper ini dari tingkat perangkat keras, kami dapat mengontrol stepper dengan lebih mudah. Kami memilih untuk mematikan motor stepper kami dari catu daya 5V di lab daripada Pi karena penarikan arus maksimumnya sekitar 0,8 A, yang lebih dari yang dapat disuplai oleh Pi.

Langkah 6: Perangkat Lunak

Perangkat lunak
Perangkat lunak
Perangkat lunak
Perangkat lunak
Perangkat lunak
Perangkat lunak
Perangkat lunak
Perangkat lunak

Perangkat lunak untuk proyek ini dapat dipecah menjadi empat komponen utama yang berinteraksi bersama: Pemrosesan Gambar, Kontrol Motor, Pembuatan Mesh, dan Fungsi Tertanam.

Sebagai ringkasan dari perangkat lunak, kita dapat melihat ke gambar pertama. Saat sistem melakukan booting,.bashrc secara otomatis masuk ke Pi dan mulai menjalankan kode python kami. Sistem menyalakan lampu status untuk memberi tahu pengguna bahwa itu telah di-boot dengan benar dan menunggu tombol ditekan. Pengguna kemudian dapat menempatkan item yang akan dipindai dan menutup penutupnya. Setelah menekan tombol, LED berdenyut untuk memberi tahu pengguna bahwa perangkat berfungsi. Perangkat akan mengulang antara pemrosesan gambar dan kontrol motor hingga putaran penuh selesai dan semua data objek dikumpulkan. Akhirnya, mesh dibuat dan file dikirim melalui email ke email yang telah dipilih sebelumnya. Ini memulai kembali siklus dan mesin siap melakukan pemindaian lain dengan menekan tombol.

Pengolahan citra

Hal pertama yang diterapkan adalah memproses gambar yang diambil untuk mengekstrak informasi yang disimpan dalam gambar ke dalam bentuk yang dapat digunakan untuk membuat array titik di ruang angkasa. Untuk melakukan ini, saya mulai dengan mengambil gambar objek pada platform bersama dengan semua kebisingan latar belakang yang dibuat oleh laser yang menyinari bagian belakang kotak dan menyebar. Gambar ini memiliki dua masalah utama dalam bentuk mentahnya. Pertama, objek dilihat dari sudut dengan perspektif yang ditinggikan dan kedua, ada banyak kebisingan latar belakang. Hal pertama yang perlu saya lakukan adalah memperhitungkan sudut pandang ini karena menggunakan foto apa adanya tidak akan memungkinkan kita untuk menentukan ketinggian objek yang konsisten. Seperti yang terlihat pada gambar kedua, ketinggian bentuk "L" terbalik konsisten; namun karena satu sisi lebih panjang dari yang lain, mereka tampaknya memiliki ketinggian yang berbeda di tepi yang paling dekat dengan pemirsa.

Untuk memperbaikinya, saya harus mengubah ruang kerja pada gambar menjadi persegi panjang dari bentuk trapesium sebelumnya. Untuk melakukan ini, saya menggunakan kode yang disediakan oleh tautan ini, yang ketika diberi gambar dan empat titik, memotong gambar di antara empat titik dan mengubah gambar yang dipotong untuk mengimbangi perspektif. Transformasi ini menggunakan empat titik untuk membuat persegi panjang alih-alih bentuk tipe trapesium seperti yang terlihat pada gambar ketiga.

Masalah berikutnya yang perlu dipecahkan adalah kebisingan latar belakang berupa cahaya luar dan cahaya yang dipantulkan oleh laser itu sendiri. Untuk melakukan ini, saya memfilter cahaya menggunakan fungsi inRange() dari OpenCV. Saya menetapkan ambang batas untuk hanya mengambil lampu merah pada tingkat tertentu. Untuk mendapatkan nilai yang benar, saya mulai dengan ambang batas ringan dan terus meningkatkan tingkat ambang batas sampai satu-satunya cahaya yang diambil adalah sinar laser pada objek yang dipindai. Setelah saya mendapatkan gambar ini, saya menemukan piksel paling terang di setiap baris untuk dapatkan garis satu piksel per baris yang berbatasan dengan sisi paling kiri dari garis laser. Setiap piksel kemudian diubah menjadi simpul dalam ruang 3D dan disimpan dalam larik, seperti yang dijelaskan di bagian pembuatan jala. Hasil dari langkah-langkah tersebut dapat dilihat pada gambar keempat.

Kontrol Motor

Setelah berhasil memproses satu gambar untuk mendapatkan potongan objek, saya harus bisa memutar objek untuk mengambil gambar baru dengan sudut yang berbeda. Untuk melakukan ini, saya mengontrol motor stepper di bawah platform tempat objek yang dipindai berada. Saya membangun fondasi fungsi stepping kami dengan membuat variabel untuk melacak status motor dan microstepping dengan mengaktifkan masing-masing dari empat input motor.

Pembuatan MeshUntuk membuat mesh dari semua gambar yang diproses, pertama-tama saya harus mengonversi setiap piksel putih dalam gambar yang diproses menjadi titik dalam ruang 3D. Karena saya mengumpulkan irisan individu objek dengan simetri silinder, masuk akal untuk mulai mengumpulkan koordinat silinder. Hal ini masuk akal karena ketinggian gambar dapat mewakili sumbu z, jarak dari pusat meja putar dapat mewakili sumbu R, dan putaran motor stepper dapat mewakili sumbu teta. Namun, karena saya menyimpan data kami dalam koordinat silinder, saya harus mengubah setiap simpul ini menjadi koordinat kartesius.

Setelah simpul ini dibuat, mereka disimpan dalam daftar dan daftar tersebut disimpan dalam daftar lain yang berisi daftar simpul yang dibuat untuk setiap gambar yang diambil. Setelah semua gambar diproses dan diubah menjadi simpul, saya harus memilih simpul yang sebenarnya ingin saya wakili di mesh terakhir. Saya ingin vertex atas dan vertex bawah disertakan dan kemudian berdasarkan resolusi saya memilih jumlah verteks dengan jarak yang sama untuk digunakan untuk setiap gambar. Karena tidak semua daftar simpul memiliki panjang yang sama, saya harus menyamakannya dengan mencari daftar dengan jumlah simpul terkecil dan menghapus simpul dari semua daftar lainnya sampai semuanya genap. Dengan daftar simpul yang dibuat, saya sekarang dapat membuat jaring. Saya memilih untuk memformat mesh kami dengan standar file.obj karena sederhana dan dapat dicetak 3D.

Fungsi Tertanam

Setelah perangkat berfungsi, saya memolesnya dengan menambahkan fungsionalitas tertanam penuh. Ini berarti menghapus keyboard, mouse, dan monitor, dan mengirimkannya secara nirkabel kepada kami file.obj setelah menyelesaikan pemrosesan. Untuk memulai, saya mengubah kode.bashrc untuk masuk secara otomatis dan meluncurkan program python utama saat startup. Ini dilakukan dengan menggunakan sudo raspi-config dan memilih "Console Autologin" dan dengan menambahkan baris "Sudo python /home/pi/finalProject/FINAL.py" ke /home/pi/.bashrc. Selain itu, saya juga menambahkan tombol dan LED status untuk input dan output pengguna. Tombol akan membiarkan pengguna memberi tahu perangkat kapan harus mulai memindai dan LED akan memberi tahu pengguna status mesin. Jika LED menyala, perangkat siap untuk memulai pemindaian baru. Jika LED berkedip, perangkat sedang memindai. Jika LED kantor, ada kesalahan perangkat lunak, meminta restart sistem. Terakhir, saya mengaktifkan perangkat untuk mengirim file.obj melalui email. Ini dilakukan dengan menggunakan perpustakaan smtplib dan email. Kemampuan mengirim email ini memberi kami cara yang sangat nyaman dan nirkabel untuk mengirimkan file yang dihasilkan kepada pengguna untuk diakses di berbagai platform.

Langkah 7: Integrasi

Integrasi
Integrasi

Setelah membuat berbagai bagian perangkat, saya merakitnya bersama. Gambar di atas menunjukkan secara berurutan:

(a) kotak rakitan di luar

(b) kotak rakitan di dalam dengan kamera dan laser

(c) tampilan bagian dalam tempat tidur elektronik

(d) bagian belakang Pi dengan akses ke port Pi dan input motor 5V

(e) tekan tombol dengan cincin LED dan lampu status di bagian depan perangkat

Langkah 8: Hasil

Hasil
Hasil
Hasil
Hasil
Hasil
Hasil
Hasil
Hasil

Pemindai laser 3D mampu memindai objek dengan presisi yang layak. Fitur objek berbeda dan dapat dikenali dan bagian-bagiannya sangat mudah untuk dicetak 3D menggunakan perangkat lunak pengiris seperti Repetier. Gambar di atas menunjukkan beberapa contoh pindaian sepotong kayu dan bebek karet.

Salah satu temuan dan keberhasilan terbesar kami yang saya temukan selama pengujian adalah konsistensi perangkat. Selama beberapa percobaan dari objek yang sama, pemindai mampu menghasilkan file.obj yang sangat mirip setiap kali, bahkan jika kami sedikit mengubah penempatan objek. Seperti yang terlihat dalam tiga pemindaian terpisah, semuanya terlihat sangat mirip, menangkap detail yang sama dan jumlah detail yang sama. Secara keseluruhan saya sangat terkesan dengan konsistensi dan ketahanan sistem kami.

Salah satu variabel yang benar-benar dapat saya atur adalah resolusi pindaian. Karena ada 400 langkah di stepper, saya dapat memilih seberapa besar setiap untuk menentukan resolusi sudut. Secara default, saya mengatur resolusi sudut ke 20 iterasi, artinya setiap frame, motor berputar 20 langkah (400/20 = 20). Ini dipilih terutama untuk kepentingan waktu - dibutuhkan sekitar 45 detik untuk menyelesaikan pemindaian dengan cara ini. Namun, jika saya menginginkan pemindaian dengan kualitas yang jauh lebih tinggi, saya dapat meningkatkan jumlah iterasi hingga 400. Ini memberikan lebih banyak poin untuk menyusun model, membuat pemindaian yang jauh lebih detail. Selain resolusi sudut, saya juga dapat menyesuaikan resolusi vertikal, atau berapa banyak titik berbeda yang saya pilih untuk disurvei di sepanjang irisan laser. Untuk minat yang sama dalam waktu, saya menetapkan default ini ke 20 tetapi saya dapat meningkatkannya untuk hasil yang lebih baik. Dalam bermain dengan parameter resolusi sudut dan resolusi spasial ini, saya dapat mengkompilasi hasil pemindaian yang berbeda di bawah pada gambar terakhir. Setiap label diformat sedemikian rupa sehingga merupakan resolusi sudut x resolusi spasial. Seperti yang terlihat pada pengaturan pemindaian default, fitur bebek dapat dikenali tetapi tidak detail. Namun, saat saya meningkatkan resolusi, fitur individual yang tepat mulai terlihat, termasuk mata, paruh, ekor, dan sayap pada bebek. Gambar resolusi tertinggi membutuhkan waktu sekitar 5 menit untuk memindai. Melihat resolusi yang dapat dicapai setinggi ini adalah kesuksesan yang sangat besar.

Keterbatasan

Meskipun hasil proyek berhasil, masih ada beberapa keterbatasan desain dan implementasi. Dengan penggunaan laser muncul banyak masalah dengan bagaimana cahaya menyebar. Banyak objek yang saya coba pindai yang tembus cahaya, mengkilat, atau sangat gelap terbukti mengganggu bagaimana cahaya dipantulkan ke permukaan. Jika objek itu tembus cahaya, cahaya akan diserap dan tersebar, membuat pembacaan irisan menjadi sangat bising. Pada objek yang mengkilat dan gelap, cahaya akan dipantulkan atau diserap ke titik yang sulit ditangkap. Selain itu, karena saya menggunakan kamera untuk menangkap fitur objek, penginderaannya dibatasi oleh garis pandangnya, artinya objek cekung dan sudut tajam sering terhalang oleh bagian lain dari objek. Ini ditunjukkan dalam contoh bebek karet kami karena terkadang ekornya akan kehilangan kelengkungannya dalam pemindaian. Kamera juga hanya dapat mendeteksi struktur permukaan yang berarti bahwa lubang atau geometri internal tidak dapat ditangkap. Namun, ini adalah masalah umum yang juga dimiliki banyak solusi pemindaian lainnya.

Langkah selanjutnya

Meskipun saya senang dengan hasil proyek kami, ada beberapa hal yang dapat diterapkan untuk membuatnya lebih baik. Sebagai permulaan, dalam keadaan saat ini, resolusi pindaian hanya dapat diubah dengan mengubah variabel resolusi hard-coded dalam kode kita. Untuk membuat proyek lebih tertanam, potensiometer resolusi dapat dimasukkan sehingga pengguna dapat mengubah resolusi tanpa harus mencolokkan monitor dan keyboard ke pemindai. Selain itu, pemindai membuat gambar yang terkadang terlihat bergerigi. Untuk memperbaikinya, teknik perataan mesh dapat diterapkan untuk menghaluskan ketidakteraturan dan sudut yang kasar. Terakhir, saya menemukan bahwa koordinat piksel tidak berskala dengan baik ke dunia nyata. Jaring yang saya buat 6 sampai 7 kali lebih besar dari objek sebenarnya. Di masa depan akan menguntungkan untuk menerapkan cara penskalaan jerat sehingga lebih akurat dengan ukuran objek yang sebenarnya.

Langkah 9: Sumber Daya

Saya telah menyertakan kode, file STL untuk pencetakan, dan file DXF untuk pemotongan untuk keseluruhan proyek.

Kontes Raspberry Pi 2020
Kontes Raspberry Pi 2020
Kontes Raspberry Pi 2020
Kontes Raspberry Pi 2020

Hadiah Pertama dalam Kontes Raspberry Pi 2020

Direkomendasikan: