Isi kandungan:

Juruteknik Robo: 8 Langkah
Juruteknik Robo: 8 Langkah

Video: Juruteknik Robo: 8 Langkah

Video: Juruteknik Robo: 8 Langkah
Video: Bedah Jurusan Teknik Pertambangan sampai GAJI! Review Jurusan Habis-Habisan Jamin Paham! 2024, November
Anonim
Juruteknik Robo
Juruteknik Robo

Bayangkan sebentar bahawa anda adalah salah seorang angkasawan yang mendarat di Marikh. Anda mempunyai satu juta perkara yang perlu dilakukan, contoh yang perlu diambil, eksperimen dijalankan, data untuk dikumpulkan, tetapi sekali atau dua kali sehari anda perlu menjalankan modul kediaman dan / atau penyelidikan tempat anda tinggal dan bekerja untuk memeriksanya. Yang perlu, seseorang harus memastikan bahawa barang itu dalam keadaan baik, bahawa beribu-ribu kepingan dan bahagian berfungsi dan berada di tempatnya. Tetapi bagaimana jika ada pembantu automatik untuk membebaskan anda dari beberapa tugas tersebut. Bagaimana jika ada robot kecil yang dapat bergerak di dalam modul untuk memastikan semuanya berada di tempat, berfungsi, dan selamat.

Robo-Juruteknik untuk menyelamatkan.

Pada dasarnya, kod ini mengawal Robo-Technician kerana mengikuti jalan berwarna terang di tanah. Ia akan mengikuti jalan ini sehingga ia menemui persimpangan di jalan atau giliran, yang akan mendorong gambar diambil untuk pemprosesan gambar untuk membolehkan Robo-Technician membuat keputusan tentang ke mana harus pergi seterusnya. Sensor bump dan bump light berfungsi untuk melindungi Robo-Technician dari kerosakan, dan sensor bump mengawal kapan foto diagnostik akan diambil. Secara keseluruhan, Robo-Technician dirancang untuk memperbesar modul Mar, membebaskan masa para angkasawan sambil melakukan tugas asas pemeriksaan, hanya meminta input manusia apabila mendapati sesuatu yang salah.

Sekali lagi sebagai amaran, ini adalah kerja yang sedang dijalankan. Kodnya, seperti ada, berfungsi tetapi memiliki cegukan, terutama kerana terdapat banyak program yang bertindih. Juga, agar projek ini berfungsi dalam misi Mars yang sebenar, robot perlu dibina untuk tujuan tertentu, jadi saya rasa ini adalah "bukti konsep" yang dibina.

Terdapat beberapa perkara yang anda perlukan untuk mengaktifkan dan menjalankannya. Anda memerlukan program yang mahal, pakej sokongan untuk program itu, dan sedikit latar belakang dalam pengekodan. Oleh kerana saya seorang pelajar, dan beberapa kod di tingkat bawah telah disediakan (untuk pi raspberry), saya tidak akan membincangkan secara khusus mengenai susunannya. Anda boleh mendapatkan semua pautan untuk kod asas tersebut di bawah. Mari masuk ke senarai bahan.

Perkakasan

  • Raspberry Pi (kami menggunakan versi 3)
  • iRobot ®
  • beberapa jenis alat pegangan untuk memastikan Raspberry Pi melekat pada Robo-Technician
  • Kamera Raspberry Pi (tidak kira jenis apa, asalkan mempunyai fokus automatik dan resolusi gambar yang baik)
  • semacam pendirian atau sarung untuk memastikan kamera menghadap ke hadapan pada Robo-Technician
  • bahan untuk digunakan sebagai jalur, berwarna putih (atau berwarna sangat ringan), yang dipegang ke lantai dengan selamat. Ia hanya perlu sedikit lebih lebar daripada jarak antara dua sensor tebing depan.
  • 4 tanda dengan teks yang sangat besar (dengan perkataan GAMBAR, KANAN, KEMBALI, dan KIRI dicetak di atasnya)
  • Helaian kertas berwarna (sekurang-kurangnya tiga dan lebih disukai merah, hijau, dan biru)

Perisian

  • Matlab (2018a dan 2017b kedua-duanya digunakan dan nampaknya tidak banyak perbezaan)
  • Pakej sokongan Raspberry Pi untuk Matlab
  • Kod Raspberry Pi untuk sambungan ke Matlab (pautan ke kod sumber yang disediakan di bawah)
  • Kotak Alat Pemprosesan Imej untuk Matlab (anda hampir tidak dapat melakukan projek ini tanpa kotak alat)
  • PILIHAN: Matlab Mobile dipasang pada telefon anda, yang akan saya terangkan kemudian

Langkah 1: Menyiapkan Perkakasan

ef.engr.utk.edu/ef230-2018-08/projeks/roo…

Ini adalah pautan untuk kod asas untuk memastikan bahawa iRobot® dapat berkomunikasi dengan Matlab, bersama dengan tutorial asas. Seperti yang saya katakan sebelumnya, saya tidak akan membahas bahagian khusus ini kerana tutorialnya sudah tersusun dengan sangat baik. Saya akan menyebutkan bahawa setelah anda mengikuti langkah-langkah di pautan, anda boleh menggunakan perintah "doc" Matlab untuk melihat maklumat yang disertakan. Khususnya:

doc roomba

Dan satu perkara yang lebih penting.

Apabila anda memuat turun fail dari pautan di atas, letakkannya di dalam folder yang saya jelaskan di atas, kerana Matlab menghendaki fail yang dihasilkan pengguna berada dalam folder kerja semasa.

Dengan itu, mari kita beralih ke kodnya.

Langkah 2: Mencari Semua Sensor Itu

Mencari Semua Sensor Itu
Mencari Semua Sensor Itu
Mencari Semua Sensor Itu
Mencari Semua Sensor Itu

Luangkan sedikit masa dan beri pemeriksaan pada iRobot®. Adalah baik untuk mengetahui di mana ini jadi anda mempunyai idea mengenai input yang diterima oleh Robo-Technician, dan anda akan dapat mengetahui mengapa perkara itu berputar dalam bulatan dan bukannya mengikuti jalan yang akan anda atur (ini mungkin atau mungkin tidak berlaku). Anda pasti akan melihat sensor lebam fizikal yang besar di bahagian depan. Sensor tebing sedikit lebih sukar dilihat, anda perlu membalikkannya dan mencari empat tingkap plastik jernih berhampiran tepi depan. Sensor benjolan cahaya lebih tersembunyi, tetapi buat masa ini sudah cukup untuk mengatakan bahawa live di jalur hitam berkilat berjalan di bahagian depan iRobot®, yang berada di bahagian depan bar sensor bump fizikal.

Terdapat sensor penurunan roda, tetapi ini tidak digunakan dalam projek ini, jadi kami akan terus menguji sensor.

Langkah 3: Ujian untuk Menetapkan Parameter

Ujian untuk Menetapkan Parameter
Ujian untuk Menetapkan Parameter

Sebelum kita dapat menghantar Robo-Technician untuk melakukan tugasnya, kita perlu mengetahui kebiasaan dan julat sensornya. Oleh kerana setiap iRobot® sedikit berbeza dan berubah sepanjang hayat robot, kita perlu mengetahui bagaimana sensor membaca kawasan yang akan beroperasi. Cara termudah untuk melakukan ini adalah dengan menyediakan jalan berwarna terang (Saya menggunakan helai kertas pencetak putih tetapi apa sahaja yang berwarna terang) di permukaan yang akan dikendalikan oleh Robo-Technician.

Mulakan Matlab dan buka skrip baru. Simpan skrip DALAM FOLDER YANG SAMA Saya Jelaskan EARLIER dan namakan apa sahaja yang anda mahukan (cuba tetap pendek, kerana nama fail ini akan menjadi nama fungsi). Hidupkan robot dan gunakan persediaan pemboleh ubah roomba dari tutorial, menaip perintah ke tetingkap perintah.

Pastikan Raspberry Pi dipasang ke iRobot® dan komputer anda disambungkan ke sambungan internet yang sama. Anda akan menghabiskan lebih sedikit masa untuk mencabut rambut anda untuk mencari tahu mengapa Matlab tidak akan bersambung

r = roomba (nombor yang anda tetapkan)

Pemboleh ubah "r" dalam keadaan ini tidak perlu, anda boleh menyebutnya apa sahaja yang anda mahukan, tetapi ini menjadikan hidup lebih mudah untuk menggunakan pemboleh ubah satu huruf.

Setelah jalan disiapkan, dan roomba berjaya disambungkan, letakkan Robo-Technician masa depan di mana satu atau dua sensor tebing berada di atas jalan. Jelas itu bermakna dua atau tiga yang lain berada di atas permukaan yang anda pilih.

Sekarang mulakan sensor ujian dengan arahan:

r.testSensors

Perlu diingat bahawa "r." Adalah pemboleh ubah yang anda tentukan sebelumnya, jadi jika tidak 'r' ubah 'r'. kepada apa sahaja yang anda putuskan. Ini akan memaparkan skrin sensor ujian dengan banyak maklumat.

Untuk projek ini fokus pada bahagian lightBumpers, bumper, dan tebing. Gerakkan Robo-Technician untuk memastikan bagaimana melihat sensor berubah pada permukaan yang berbeza, atau seberapa dekat objek yang perlu ada agar nilai ligthBumper berubah, dll. Ingatlah nombor-nombor ini (atau tuliskan) kerana anda akan memerlukannya untuk menetapkan parameter anda dalam sekejap.

Langkah 4: Memulakan Kod

Pertama anda akan membina fungsi. Saya memanggilnya "jalan" tetapi sekali lagi, namanya tidak perlu, tetapi saya akan merujuknya sebagai "jalan" mulai sekarang.

Bahagian atas kod adalah menetapkan beberapa pilihan input pengguna. Ia membina beberapa senarai yang akan digunakan dalam listdlg dan kemudian memunculkan kotak dialog senarai. Ini membolehkan pengguna memilih warna jalan mana yang ingin mereka ikuti, yang akan dimainkan kemudian.

senarai = {'Merah', 'Biru', 'Hijau'}

problist = {'Casualty, Save Image', 'Component Out of Place, Save Image', 'Dijangka, Terus'} pathcolor = listdlg ('PromptString', 'Select a Path Colour', … 'SelectionMode', 'single', 'ListString', list) prob = 0; driv = ;

Pemboleh ubah "prob" dan "driv" perlu dinyatakan di sini kerana ia akan digunakan di dalam gelung semasa fungsi utama, tetapi sekali lagi, jika anda mahu menamakan semula mana-mana pemboleh ubah ini atau mengubah pilihan senarai, tidak mengapa selagi anda konsisten dalam kod yang lain.

Langkah 5: Gelung Teratas: Sensor Bump Fizikal

Bahagian atas gelung sementara mengandungi logik sensor bump fizikal. Pada dasarnya, apabila Robo-Technician mengalami sesuatu ia berhenti (atau untuk sensor bump depan ia mundur 0,1 meter), kemudian meletakkan dirinya untuk mengambil gambar. Mari menutup bahagian kawalan halaju dan kedudukan terlebih dahulu.

Sekiranya anda menguji semua sensor pada Robo-Technician pada langkah-langkah sebelumnya, anda akan mengetahui bahawa sensor bump mempunyai nilai logik (0 atau 1) dengan sifar mewakili kedudukan sensor normal dan tidak ditekan. Perlu diingat untuk kod tersebut.

sementara benar% utama sementara gelung% menerima maklumat bumper S = r.getBumpers jika S.left ~ = 0 r.stop elseif S.right ~ = 0 r.stop elseif S.front ~ = 0 r.stop end

Ini adalah bahagian asas "jika memukul sesuatu, hentikan". Sekiranya sensor mengesan perlanggaran, maka ia bergerak ke bahagian seterusnya kod, yang menyesuaikan kedudukan Robo-Technician untuk mendapatkan foto.

jika S.left ~ = 0% jika loop mengambil maklumat bumper dan menyelaraskan kamera untuk foto r.turnAngle (5) pause (0.5) img = r.getImage% mengambil foto dan memaparkan gambar (img)% kotak dialog prob = listdlg (' PromptString ',' Menemukan Halangan Tidak dijangka, Sila Kenali '…,' SelectionMode ',' single ',' ListString ', problist) elseif S.right ~ = 0 r.turnAngle (-5) pause (0.5) img = r. getImage image (img) prob = listdlg ('PromptString', 'Found of a Un dijangka Halstacle, Please Identify' …, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~ = 0 r.moveDistance (- 0.1) jeda (0,5) img = r.getImage image (img) prob = listdlg ('PromptString', 'Found a Unsted Halstacle, Please Identify' …, 'SelectionMode', 'single', 'ListString', problist) akhir

Pada dasarnya, setelah gambar diambil kotak dialog lain akan muncul dengan tiga pilihan. Dua pilihan pertama menyimpan foto ke folder yang ditentukan, yang akan saya bahas kemudian, sementara pilihan ketiga hanya menutup kotak dialog dan terus berlanjutan. Sekiranya anda tidak ingat pilihannya, lihatlah langkah sebelumnya.

Sekarang saya memasukkan bahagian kod di antara bahagian sensor bump dan bahagian simpanan foto. Ini mengambil nilai lightBumper dan menetapkan kelajuan pemacu hingga 0,025 meter / saat (sangat perlahan), yang sebenarnya tidak diperlukan tetapi ia mengurangkan Robo-Technician yang mengalami masalah dan akhirnya memakai sensor lebam fizikal.

L = r.getLightBumpers jika L.kiri> 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 driv = 0.025 r.setDriveVelocity (0.025) driv lain = 0.1 akhir

Ini akan menjadi bahagian di mana nilai-nilai yang anda perhatikan (dan semoga ditulis) dimulakan

"L. (sisi dan arah sensor)> 100" didasarkan pada nilai yang saya perhatikan, jadi jika pemerhatian anda berbeza, ubah nombor ini. Ideanya adalah bahawa jika Robo-Technician merasakan sesuatu beberapa sentimeter di hadapannya, ia akan menjadi perlahan, lebih dari itu tidak perlu.

Bahagian seterusnya adalah di mana foto disimpan untuk kemudian.

% jika pilihan pertama atau kedua dipilih dalam dialog prob, menyimpan gambar jika prob == 1% jika gelung membina maklumat fail untuk foto, menulis dengan cap waktu t = jam; nama basen = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Class / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (folder, nama asas); imwrite (img, fullFileName) tutup Gambar 1 jeda (2) elseif prob == 2 t = jam; nama basen = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Class / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (folder, nama asas); imwrite (img, fullFileName) tutup Gambar 1 jeda (2) akhir

Semua nama fail dan lokasi di mana foto disimpan adalah pilihan. Saya memilih folder yang bersarang di dalam folder roomba yang saya buat pada langkah pengenalan, tetapi ia boleh berada di mana sahaja yang anda pilih. Juga, foto disimpan dengan cap waktu, tetapi itu tidak terlalu diperlukan (walaupun akan berguna secara hipotesis untuk misi Mars).

Dengan penutup bump sensor fizikal, kita dapat bergerak ke sensor tebing dan mengikuti jalan.

Langkah 6: Mengikuti Jalan

Kod untuk sensor tebing disediakan untuk membandingkan nilai dua nilai sensor depan dan dua sisi. Anda perlu mengubah nilai ini (mungkin) berdasarkan nilai yang anda perhatikan. Anda juga mungkin perlu mengedit nilai ini setelah beberapa ujian dijalankan dan mengubahnya berdasarkan cahaya sekitar, waktu dalam sehari (bergantung pada seberapa baik kawasan ujian) atau ketika tingkap sensor kotor.

Sebelum kita sampai ke kod sensor tebing, ada segmen kod pendek yang saya masukkan untuk membuang beberapa data yang tidak perlu dari Matlab. Bahagian ini tidak diperlukan, tetapi saya menggunakannya untuk mengurangkan simpanan yang diperlukan untuk menjalankan program.

clear img clear t clear basename clear fullFileName folder yang jelas

Segmen kod seterusnya adalah daging projek. Ini membolehkan Robo-Technician mengikuti jalan berwarna terang yang telah diletakkan di lantai. Ringkasnya, ia cuba mengarahkan diri sehingga dua sensor tebing depan berada di atas ambang, berdasarkan nilai yang anda perhatikan, dan membolehkan program memulakan langkah pemprosesan gambar sedikit kemudian.

C = r.getCliffSensors% if loop mengikuti jalur warna (putih) jika C.leftFront> 2000 && C.rightFront> 2000% panduan jalan lurus r.setDriveVelocity (driv) elseif C.leftFront 2000% berpusing ke kanan jika robot terlalu jauh kiri r.turnAngle (-2.5) elseif C.leftFront> 2000 && C.rightFront <2000% membelok ke kiri jika robot bergerak terlalu jauh ke kanan r.turnAngle (2.5) elseif C.leftFront <2000 && C.rightFront 100 || L.leftFront> 100 || L.rightFront> 100 || L.right> 100 img = r.getImage akhir% memeriksa untuk melihat sama ada terdapat selekoh di jalan jika C.left> 2800 && C.right <2800 r.turnAngle (2.5) elseif C.left 2800 r.turnAngle (- 2.5) pemegang tempat% akhir untuk disp pengecaman imej jalan ('MENDAPATKAN GAMBAR') hujung akhir

Perlu diingat bahawa nama pemboleh ubah yang saya pilih adalah pilihan, tetapi sekali lagi saya rasa ini menjadikan hidup lebih mudah untuk menggunakan pemboleh ubah huruf tunggal apabila mungkin

Untuk menjelaskan bahagian tengah kod, ketika kedua sensor depan melarikan diri dari pinggir jalan (ketika sampai di persimpangan atau ketika sampai di hujung jalan) kelihatannya ada sesuatu di hadapannya. Anda perlu meletakkan objek di tanah di hujung jalan atau di mana-mana persimpangan untuk berfungsi.

Setelah foto diambil, ia menggunakan pengecaman gambar untuk mengetahui apa yang harus dilakukan. Terdapat pemegang tempat di bahagian kod ini juga:

% pemegang tempat untuk pengecaman gambar laluan ('MENDAPATKAN GAMBAR')

Saya menggunakan ini buat masa ini kerana saya ingin membincangkan secara khusus mengenai pemprosesan teks dan warna yang berlaku, yang merupakan langkah seterusnya.

Langkah 7: Pemprosesan Imej

Terdapat dua bahagian untuk pemprosesan gambar. Pertama ialah pengecaman warna, yang mengira intensiti warna dalam gambar untuk memutuskan sama ada meneruskan atau tidak ke pengenalan teks. Pengiraan warna didasarkan pada pilihan apa yang dibuat di kotak dialog pertama pada awalnya (saya menggunakan warna merah, biru, hijau tetapi anda boleh memilih warna apa sahaja yang anda mahukan, selagi nilai min untuk intensiti warna dapat dikenali oleh Kamera Raspberry Pi).

img = r.getImage img = imcrop (img, [0 30 512 354]) imgb = imcrop (img, [0 30 512 354]) imgt = imcrop (img, [0 30 512 354]) merah = min (min (imgb (:,:, 1))); g = min (min (imgb (:,:, 2))); b = min (min (imgb (:,:, 3)));

Ini adalah pemeriksaan intensiti. Ini akan digunakan di segmen seterusnya untuk memutuskan apa yang ingin dilakukannya.

jika merah> g && red> b if pathcolor == 1 imgc = imcrop (img, [0 30 512 354]) R = ocr (img) if R. Words {1} == GAMBAR || R. Kata {2} == GAMBAR || R. Kata {3} == GAMBAR t = jam; nama basen = sprintf ('\ img_% d_% d_% d_% d_% d.png', t (1), t (2), t (3), t (4), t (5)); folder = 'E: / UTK / Class / fall 18 / ef230 / irobot / images'; fullFileName = fullfile (folder, nama asas); imwrite (img, fullFileName) jeda (2) elseif R. Words {1} == KANAN || R. Kata {2} == KANAN || R. Words {3} == KANAN r.turnAngle (-75) lain jika R. Kata {1} == KIRI || R. Kata {2} == KIRI || R. Words {3} == KIRI r.turnAngle (75) lain jika R. Kata {1} == KEMBALI || R. Kata {2} == KEMBALI || R. Kata {3} == KEMBALI r.turnAngle (110) hujung lain r.turnAngle (110) hujung akhir

Segmen ini memutuskan apakah warna yang dipilih dalam kotak dialog pertama sesuai dengan warna yang dilihat kamera. Sekiranya ia berlaku, pengecaman teks. Ia kelihatan untuk melihat kata mana (GAMBAR, KEMBALI, KANAN atau KIRI) muncul dan kemudian berpusing (untuk kanan dan kiri), berputar (untuk belakang) atau mengambil gambar dan menyimpannya dengan cara yang sama seperti sebelumnya.

Saya hanya memberikan satu bahagian kod untuk pelbagai warna

Untuk membolehkan kod mengenali biru dan hijau, cukup salin kod tersebut dan ubah logik cek di bahagian atas segmen dan tetapkan "pathcolor == (number)" agar sesuai dengan pilihan warna dari kotak dialog atas (untuk kod seperti yang dipaparkan, biru akan menjadi 2 dan hijau akan menjadi 3).

Langkah 8: Produk Selesai

Produk Selesai
Produk Selesai

Kini Robo-Technician harus melihat modul misi Mars dan melaporkan kembali kepada angkasawan apabila ada sesuatu yang tidak sesuai.

Ingat, semua nilai sensor tebing dan lightBumper perlu diubah kepada nilai yang diperhatikan. Juga, dari pengalaman saya mendapati lebih baik menguji projek ini di lantai berwarna gelap dan lebih baik lagi jika lantai itu tidak mencerminkan. Ini memberi kontras untuk meningkat antara jalan dan lantai yang menjadikannya lebih mungkin bahawa Robo-Technician akan mengikutinya dengan betul.

Semoga anda menikmati penyediaan sedikit pembantu untuk misi Mars, dan bersenang-senang membangun.

Disyorkan: