Isi kandungan:

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

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

Video: Pengimbas Laser Raspberry Pi: 9 Langkah (dengan Gambar)
Video: Escáner Láser 3D Modelo RTC360 #bim #modelado3d #revit 2024, Julai
Anonim
Image
Image
Pengimbas Laser Raspberry Pi
Pengimbas Laser Raspberry Pi

Laser Scanner adalah peranti sistem terbenam Raspberry Pi yang dapat mendigitalkan objek ke dalam fail mesh.obj untuk pembiakan menggunakan percetakan 3D. Peranti melakukan ini dengan menggunakan laser garis dan PiCam bersepadu untuk melaksanakan penglihatan komputer. Laser diletakkan 45 darjah askew dari laser dan memproyeksikan garis merah terang pada satu kepingan menegak objek. Kamera mengesan jarak potongan dari pusat untuk memberikan potongan mesh. Objek dipintal pada dulang berputar dan prosesnya diulang sehingga objek penuh diimbas. Fail.obj yang dihasilkan akhirnya dihantar melalui e-mel kepada pengguna, menjadikan sistem sepenuhnya mandiri dan terbenam.

Instructable ini akan menerangkan bagaimana peranti ini dibina, beberapa hasil dan langkah-langkah yang akan datang.

Langkah 1: Inspirasi

Inspirasi
Inspirasi
Inspirasi
Inspirasi

Sebagai pembuat yang gemar, saya telah mencetak 3D dan pemodelan padat selama beberapa tahun sekarang. Saya telah bekerja dengan banyak alat prototaip dari router CNC hingga pemotong laser hingga pencetak 3D. Satu peranti yang belum dibeli oleh ruang pembuat tempatan saya ialah pengimbas 3D - dan saya boleh memberitahu anda mengapa.

Yang lebih murah (beberapa ratus dolar) tidak boleh dipercayai, memerlukan keadaan sempurna, dan masih menghasilkan hasil yang sangat buruk. Yang mahal adalah… baik, mahal, antara beberapa ribu dolar, menjadikan fungsinya tidak berbaloi dalam banyak keadaan. Di samping itu, lebih banyak kali daripada tidak, saya memilih untuk mengambil ukuran dan merancang model dari awal daripada menangani mesh permukaan yang dihasilkan dari imbasan.

Oleh kerana itu, saya ingin membina pengimbas mandiri anggaran untuk melihat sejauh mana saya dapat mengimbas objek menggunakan komponen rak.

Setelah membuat kajian, saya melihat banyak pengimbas 3D menggunakan platform berputar dan kemudian pelbagai sensor yang berbeza untuk mengukur jarak dari pusat untuk membina model putaran. Sebilangan besar kamera dwi ini serupa dengan Kinect. Saya akhirnya menemui Yscanner yang merupakan pengimbas resolusi rendah yang menggunakan laser. Melihat kesederhanaan dan kelayakan, teknik laser ini, di mana laser disinari secara relatif berbanding dengan kamera untuk mengukur jarak dari pusat, kelihatan seperti jalan yang jelas ke depan.

Langkah 2: Alat dan Bahagian

Bahagian:

  • Raspberry Pi $ 35.00
  • Kamera Raspberry Pi V2 $ 30.00
  • LED, Perintang dan Wayar
  • Filamen percetakan 3D
  • Kepingan kayu 12x12x0.125
  • Perkakasan M3
  • Motor Stepper - $ 14
  • Line Line - $ 8
  • Pemacu Motor Stepper LN298 - $ 2,65
  • Butang Logam - $ 5

Alat:

  • Besi pematerian
  • Pemotong laser
  • Pencetak 3D
  • Pemutar skru
  • Tang

Langkah 3: Reka Bentuk Tahap Tinggi

Reka Bentuk Tahap Tinggi
Reka Bentuk Tahap Tinggi
Reka Bentuk Tahap Tinggi
Reka Bentuk Tahap Tinggi

Komponen utama dalam reka bentuk ini adalah laser garis yang memproyeksikan kepingan objek secara menegak. Unjuran ini dapat dirakam pada picamera, perspektifnya diperbetulkan, dan kemudian disaring sebelum pemprosesan gambar. Dalam pemprosesan gambar, 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 potongan baru. Konsep ini ditunjukkan dalam rajah pertama.

Untuk melakukan tindakan yang dinyatakan di atas, saya menggunakan Raspberry Pi sebagai unit pengkomputeran pusat kami. Saya memasang motor stepper dan pemandu motor ke Pi, dikuasakan oleh bekalan 5V luaran dan dikendalikan oleh pin GPIO Pi. Laser garis diletakkan pada garis 3.3 V pada Pi dan PiCam dilekatkan pada input kamera pada Pi. Terakhir, butang mudah diturunkan dipasang dan LED status untuk menunjukkan kepada pengguna keadaan sistem. Sistem penuh diringkaskan dalam gambarajah blok sistem.

Sejak awal, ia dirancang untuk menempatkan elektronik dalam kotak potong laser yang disatukan dengan slot-T dan perkakasan M3. Elektronik akan tersembunyi dari pandangan di ruang bawah dan penutup akan membolehkan akses mudah ke penempatan objek pada dulang berputar. Tudung ini diperlukan untuk meminimumkan jumlah cahaya yang bocor ke dalam sistem, kerana lampu luaran ini dapat menghasilkan bunyi pada akhir imbasan.

Langkah 4: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan

Seperti yang dilihat di atas, sebelum saya memulakan pemotongan laser atau percetakan 3D, saya menggunakan Autodesk Fusion 360 untuk membuat model 3D terperinci reka bentuk kami. Sebagai gambaran keseluruhan, peranti ini adalah kotak sederhana dengan penutup dengan engsel potong laser. Terdapat dua lapisan utama peranti: tempat tidur elektronik dan tempat tidur utama, dengan lubang agar wayar dapat berjalan di antara kedua-dua lapisan.

Sebahagian besar kotak kami dihasilkan dengan pemotong laser, dengan reka bentuk dihasilkan di Fusion 360 dan dipotong pada pemotong laser Epilog Zing 40 W. Reka bentuk kami ditunjukkan dalam gambar di atas. Dari kiri atas bergerak ke kanan, potongannya adalah tempat tidur utama, tempat tidur elektronik, dua keping untuk penutup, bahagian belakang, bahagian depan, dan dua bahagian sisi. Di tempat tidur utama, terdapat tiga potongan utama: satu untuk memasang motor stepper, satu untuk mengarahkan wayar dari laser, dan satu untuk mengarahkan kabel lebar PiCam. Potongan tempat tidur mempunyai lubang pemasangan untuk mengamankan Pi, papan roti, dan pemandu motor dan potongan yang lebih besar untuk mengakses motor stepper. Potongan penutup bergelombang hanya untuk membentuk kepingan segitiga yang dilihat di atas dan engselnya adalah penyemperitan sederhana iaitu lebar diameter lubang papan sisi. Bahagian belakang dan salah satu bahagian sisi mempunyai slot di sisi sehingga port Pi (HDMI, USB, Ethernet, Power) dapat diakses dengan mudah. Bahagian depan adalah bahagian sederhana yang akhirnya saya membuat lubang dengan gerudi tangan untuk memasang butang dan LED. Seperti yang dilihat pada semua bahagian, bahagian kami dipegang bersama oleh perkakasan M3 menggunakan T-Sendi dan slot. Ini adalah kaedah memegang potongan potong laser secara ortogon dan selamat. Sirip kepingan sejajar dengan celah potongan lain dan potongan berbentuk t di tepinya memberi ruang agar kacang M3 dimasukkan ke dalamnya tanpa berputar. Ini membolehkan kita kemudian menggunakan skru M3 untuk mengunci kepingannya dengan ruang goyangan yang sangat sedikit tanpa pemasangannya tetap sepenuhnya.

Saya memilih untuk membuat sebahagian besar potongan kami dengan pemotong laser kerana kelajuan dan kemudahannya. Walau bagaimanapun, saya masih perlu mencetak 3D beberapa keping kerana geometri 3D mereka yang lebih sukar dibuat pada pemotong. Bahagian pertama adalah pemegang laser garis. Bahagian ini harus dipasang di tempat tidur utama pada jarak 45 darjah dari pandangan kamera dan mempunyai lubang sehingga laser boleh geser masuk dengan pantas ke dalamnya. Saya juga terpaksa membuat pelekap motor kerana poros motornya begitu panjang. Geseran pemasangan masuk ke dalam potongan laser dan menurunkan bidang yang disambungkan oleh motor sehingga platform berputar menyala dengan tempat tidur utama.

Langkah 5: Elektronik

Elektronik
Elektronik

Perkakasan pendawaian projek ini sangat mudah kerana pengimbas 3D tidak memerlukan terlalu banyak periferal. Motor, butang, LED, laser, dan kamera perlu disambungkan ke Pi. Seperti yang ditunjukkan, saya memastikan untuk menghubungkan perintang secara bersiri dengan setiap pin yang kami gunakan untuk melindungi pin. Satu pin GPIO didedikasikan untuk mengendalikan LED status, yang akan menyala ketika perangkat siap digunakan dan berdenyut dengan PWM ketika perangkat beroperasi. Pin GPIO yang lain disambungkan ke butang yang ditarik ke atas, mendaftar TINGGI ketika butang tidak ditekan dan RENDAH ketika butang ditekan. Terakhir, saya mendedikasikan empat pin GPIO untuk menggerakkan motor stepper.

Oleh kerana motor kita hanya perlu melangkah ke tahap tertentu tanpa memerlukan kawalan kelajuan, kita memilih pemandu motor stepper yang lebih sederhana (L298N) yang hanya menaikkan garis kawalan untuk memasukkan input motor. Untuk mengetahui cara mengoperasikan motor stepper pada tahap yang sangat rendah, kami merujuk pada lembaran data L298N dan perpustakaan Arduino. Motor Stepper mempunyai teras magnetik dengan jari-jari kekutuban yang bergantian. Keempat wayar dibungkus untuk mengawal dua elektromagnet yang masing-masing menggerakkan jari lawan yang lain di motor. Oleh itu, dengan menukar kekutuban jari, kita dapat mendorong stepper satu langkah. Dengan pengetahuan ini tentang bagaimana stepper berfungsi dari peringkat perkakasan, kami dapat mengawal stepper dengan lebih mudah. Kami memilih untuk mematikan motor stepper dari bekalan kuasa 5V di makmal dan bukannya Pi kerana tarikan arus maksimum sekitar 0.8 A, yang lebih banyak daripada yang dapat dibekalkan oleh Pi.

Langkah 6: Perisian

Perisian
Perisian
Perisian
Perisian
Perisian
Perisian
Perisian
Perisian

Perisian untuk projek ini dapat dipecah menjadi empat komponen utama yang saling berinteraksi: Pemprosesan Imej, Kawalan Motor, Penciptaan Mesh, dan Fungsi Tertanam.

Sebagai ringkasan perisian, kita dapat melihat angka pertama. Semasa sistem boot,.bashrc secara automatik masuk ke Pi dan mula menjalankan kod python kami. Sistem menyalakan lampu status untuk memberi tahu pengguna bahawa ia telah di boot dengan betul dan menunggu tekan butang. Pengguna kemudian boleh meletakkan item yang akan diimbas dan menutup penutupnya. Setelah menekan butang, denyutan LED untuk memberitahu pengguna bahawa peranti berfungsi. Peranti akan beralih antara pemprosesan gambar dan kawalan motor sehingga putaran penuh selesai dan semua data objek dikumpulkan. Akhirnya, mesh dibuat dan fail dihantar melalui e-mel ke e-mel terpilih. Ini memulakan semula kitaran dan mesin siap melakukan imbasan lain dengan menekan butang.

Pemprosesan imej

Perkara pertama yang dilaksanakan adalah memproses gambar yang ditangkap untuk mengekstrak maklumat yang disimpan dalam gambar menjadi bentuk yang dapat digunakan untuk membuat susunan titik di ruang angkasa. Untuk melakukan ini, saya mula dengan mengambil gambar objek di platform bersama dengan semua bunyi latar yang dihasilkan oleh laser yang bersinar ke bahagian belakang kotak dan bersurai. Gambar ini mempunyai dua masalah utama dalam bentuk mentahnya. Pertama, objek dilihat pada sudut dengan perspektif yang tinggi dan kedua, terdapat banyak bunyi latar. Perkara pertama yang perlu saya lakukan adalah memperhatikan sudut tontonan ini kerana menggunakan foto sebagaimana mestinya tidak akan membolehkan kita menentukan ketinggian objek yang konsisten. Seperti yang terlihat pada gambar kedua, ketinggian bentuk "L" yang terbalik adalah konsisten; namun kerana satu sisi lebih panjang daripada yang lain mereka kelihatan mempunyai ketinggian yang berbeza di tepi yang paling dekat dengan penonton.

Untuk memperbaikinya, saya harus mengubah ruang kerja dalam gambar menjadi segi empat tepat dari bentuk trapezoid yang sebelumnya. Untuk melakukan ini, saya menggunakan kod yang disediakan oleh pautan ini, yang apabila diberi gambar dan empat titik, memotong gambar antara empat titik dan mengubah gambar yang dipotong untuk mengimbangi perspektif. Transformasi ini menggunakan empat titik untuk membuat segi empat tepat dan bukannya bentuk jenis trapezoid seperti yang dilihat pada rajah ketiga.

Masalah seterusnya yang perlu diselesaikan adalah kebisingan latar dalam bentuk cahaya luar dan cahaya yang dipantulkan oleh laser itu sendiri. Untuk melakukan ini, saya menyaring cahaya menggunakan fungsi inRange () OpenCV. Saya menetapkan ambang untuk hanya mengambil lampu merah pada tahap tertentu. Untuk mendapatkan nilai yang betul, saya bermula dengan ambang batas dan terus meningkatkan tahap ambang sehingga satu-satunya cahaya yang diambil adalah cahaya laser pada objek yang sedang diimbas. Sebaik sahaja saya mempunyai gambar ini, saya dapati piksel paling terang di setiap baris hingga dapatkan garis satu piksel setiap baris yang bersebelahan dengan bahagian paling kiri garis laser. Setiap piksel kemudian diubah menjadi bucu dalam ruang 3D dan disimpan dalam array, seperti yang dijelaskan di bahagian penciptaan mesh. Hasil langkah-langkah ini dapat dilihat pada rajah keempat.

Kawalan Motor

Setelah berjaya memproses satu gambar untuk mendapatkan potongan objek, saya perlu dapat memutar objek untuk mengambil gambar baru dengan sudut yang berbeza. Untuk melakukan ini, saya mengawal motor stepper di bawah platform tempat objek yang diimbas berada. Saya membina asas fungsi melangkah kami dengan membuat pemboleh ubah untuk mengesan keadaan motor dan mikrostepping dengan menukar setiap daripada empat input motor.

Penciptaan MeshUntuk membuat jejaring dari semua gambar yang diproses, pertama saya harus menukar setiap piksel putih dalam gambar yang diproses menjadi bucu di ruang 3D. Kerana saya mengumpulkan kepingan objek secara individu dengan simetri silinder, masuk akal untuk mula mengumpulkan koordinat silinder. Ini masuk akal kerana ketinggian gambar dapat mewakili paksi-z, jarak dari pusat meja berputar dapat mewakili sumbu R, dan putaran motor stepper dapat mewakili sumbu theta. Namun, kerana saya menyimpan data kami dalam koordinat silinder, saya terpaksa menukar setiap bucu ini menjadi koordinat kartesian.

Setelah simpul ini dibuat, mereka disimpan dalam senarai dan senarai tersebut disimpan dalam senarai lain yang mengandungi senarai bucu yang dibuat untuk setiap gambar yang diambil. Setelah semua gambar diproses dan ditukarkan ke bucu, saya harus memilih bucu yang sebenarnya saya mahukan diwakili di jaring akhir. Saya mahukan bucu atas dan bucu bawah disertakan dan kemudian berdasarkan ketetapannya, saya memilih sebilangan bucu yang sama jaraknya untuk digunakan untuk setiap gambar. Oleh kerana tidak semua senarai bucu sama panjangnya, saya harus menyenaraikannya dengan mencari senarai dengan bilangan bucu terkecil dan mengeluarkan bucu dari semua senarai lain sehingga semuanya sama rata. Dengan senarai bucu yang dibuat, saya kini dapat buat mesh. Saya memilih untuk memformat jejaring kami dengan standard fail.obj kerana mudah dan boleh dicetak 3D.

Fungsi Terbenam

Setelah peranti berfungsi, saya menggilapnya dengan menambahkan fungsi tertanam sepenuhnya. Ini bermaksud mengeluarkan papan kekunci, tetikus, dan monitor, dan memilikinya tanpa wayar menghantar fail.obj kepada kami setelah selesai memproses. Untuk memulakan, saya menukar kod.bashrc untuk log masuk secara automatik dan melancarkan program python utama pada permulaan. 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 menambah butang dan LED status untuk input dan output pengguna. Butang tersebut akan membolehkan pengguna memberitahu peranti kapan hendak memulakan pemindaian dan LED akan memberitahu pengguna keadaan mesin. Sekiranya LED menyala, peranti bersedia untuk memulakan imbasan baru. Sekiranya LED berdenyut, peranti sedang melakukan imbasan. Sekiranya LED di pejabat, terdapat ralat perisian, yang memerlukan sistem dimulakan semula. Terakhir, saya mengaktifkan peranti untuk menghantar fail.obj melalui e-mel. Ini dilakukan dengan menggunakan perpustakaan smtplib dan e-mel. Keupayaan untuk menghantar e-mel ini memberi kita cara yang sangat mudah dan tanpa wayar untuk menyampaikan fail yang dihasilkan kepada pengguna untuk diakses di banyak platform yang berbeza.

Langkah 7: Integrasi

Kesepaduan
Kesepaduan

Setelah mengeluarkan pelbagai kepingan peranti, saya memasangnya bersama. Gambar di atas menunjukkan mengikut urutan:

(a) kotak yang dipasang di luar

(b) kotak yang dipasang di dalam dengan kamera dan laser

(c) pandangan dalam tempat tidur elektronik

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

(e) butang tekan dengan cincin LED dan lampu status di bahagian depan peranti

Langkah 8: Hasil

Keputusan
Keputusan
Keputusan
Keputusan
Keputusan
Keputusan
Keputusan
Keputusan

Pengimbas 3D laser dapat mengimbas objek dengan ketepatan yang baik. Ciri-ciri objek berbeza dan dikenali dan bahagian-bahagiannya sangat mudah dicetak 3D menggunakan perisian mengiris seperti Repetier. Gambar di atas menunjukkan beberapa contoh imbasan sekeping kayu dan bebek getah.

Salah satu penemuan dan kejayaan terbesar kami yang saya dapati semasa ujian adalah ketekalan peranti. Sepanjang beberapa percubaan objek yang sama, pengimbas dapat menghasilkan fail.obj yang sangat serupa setiap kali, walaupun kita sedikit mengubah penempatan objek. Seperti yang dilihat dalam tiga imbasan berasingan, semuanya kelihatan sangat mirip, menangkap perincian yang sama dan jumlah perincian yang sama. Saya secara keseluruhan sangat kagum dengan ketekalan dan ketahanan sistem kami.

Salah satu pemboleh ubah yang benar-benar dapat saya sesuaikan adalah penyelesaian imbasan. Oleh kerana terdapat 400 langkah di stepper, saya dapat memilih seberapa besar ΔΘ untuk menentukan resolusi sudut. Secara lalai, saya menetapkan resolusi sudut hingga 20 iterasi, yang bermaksud bahawa setiap bingkai, motor berputar 20 langkah (400/20 = 20). Ini dipilih terutama demi kepentingan masa - memerlukan sekitar 45 saat untuk menyelesaikan imbasan dengan cara ini. Walau bagaimanapun, jika saya mahukan imbasan berkualiti jauh lebih tinggi, saya dapat meningkatkan bilangan lelaran hingga 400. Ini memberikan banyak lagi poin untuk membina model dengan membuat imbasan yang lebih terperinci. Selain resolusi sudut, saya juga dapat menyesuaikan resolusi menegak, atau berapa banyak titik yang saya pilih untuk mengundi di sepanjang potongan laser. Untuk minat yang sama dalam masa, saya menetapkan default ini kepada 20 tetapi saya dapat meningkatkannya untuk hasil yang lebih baik. Semasa bermain dengan parameter resolusi sudut dan resolusi spasial ini, saya dapat mengumpulkan hasil imbasan yang berbeza di bawah pada gambar terakhir. Setiap label diformat sedemikian rupa sehingga berupa resolusi sudut x resolusi spasial. Seperti yang dilihat dalam tetapan imbasan lalai, ciri-ciri bebek dikenali tetapi tidak terperinci. Namun, ketika saya meningkatkan resolusi, ciri-ciri individu yang tepat mula ditunjukkan, termasuk mata, paruh, ekor, dan sayap pada bebek. Imej beresolusi tertinggi mengambil masa kira-kira 5 minit untuk mengimbas. Melihat resolusi tinggi yang boleh dicapai ini adalah kejayaan yang sangat besar.

Batasan

Walaupun hasil projek berjaya, masih ada beberapa batasan reka bentuk dan pelaksanaannya. Dengan penggunaan laser timbul banyak masalah mengenai bagaimana cahaya menyebar. Banyak objek yang saya cuba imbas sama ada tembus cahaya, berkilat, atau sangat gelap terbukti menyusahkan bagaimana cahaya dipantulkan dari permukaan. Sekiranya objek itu lut sinar, cahaya akan diserap dan tersebar, menjadikan bacaan irisan sangat bising. Dalam objek berkilat dan gelap, cahaya akan dipantulkan atau diserap ke titik yang sukar dinyalakan. Tambahan pula, kerana saya menggunakan kamera untuk menangkap ciri objek, penginderaannya dibatasi oleh garis penglihatannya, yang bermaksud bahawa objek cekung dan sudut tajam sering disekat oleh bahagian objek yang lain. Ini ditunjukkan dalam contoh bebek getah kami kerana ekor kadang-kadang akan kehilangan kelengkungannya semasa imbasan. Kamera juga hanya dapat mengesan struktur permukaan yang bermaksud bahawa lubang atau geometri dalaman tidak dapat ditangkap. Namun, ini adalah masalah biasa yang terdapat pada banyak penyelesaian pengimbasan lain.

Langkah seterusnya

Walaupun saya gembira dengan hasil projek kami, ada beberapa perkara yang dapat dilaksanakan untuk menjadikannya lebih baik. Sebagai permulaan, dalam keadaan sekarang, resolusi imbasan hanya dapat diubah dengan mengubah pemboleh ubah resolusi berkod keras dalam kod kami. Untuk membuat proyek lebih tertanam, potensiometer resolusi dapat disertakan sehingga pengguna dapat mengubah resolusi tanpa harus memasang monitor dan papan kekunci ke pemindai. Di samping itu, pengimbas membuat gambar yang kadang-kadang kelihatan bergerigi. Untuk memperbaikinya, teknik melicinkan jala dapat dilaksanakan untuk melancarkan penyelewengan dan sudut yang keras. Terakhir, saya dapati koordinat piksel tidak dapat ditingkatkan ke dunia nyata. Jaring yang saya buat adalah 6 hingga 7 kali lebih besar daripada objek sebenar. Di masa depan, adalah menguntungkan untuk menerapkan cara penskalaan jaring sehingga mereka lebih tepat dengan ukuran objek yang sebenarnya.

Langkah 9: Sumber

Saya telah memasukkan kod, fail STL untuk percetakan, dan fail DXF untuk memotong keseluruhan projek.

Peraduan Raspberry Pi 2020
Peraduan Raspberry Pi 2020
Peraduan Raspberry Pi 2020
Peraduan Raspberry Pi 2020

Hadiah Pertama dalam Peraduan Raspberry Pi 2020

Disyorkan: