Daftar Isi:

Teknisi Robo: 8 Langkah
Teknisi Robo: 8 Langkah

Video: Teknisi Robo: 8 Langkah

Video: Teknisi Robo: 8 Langkah
Video: Robot Spot Boston Dynamics | Semua RAHASIA Tekniknya! 2024, Juli
Anonim
Teknisi Robo
Teknisi Robo

Bayangkan sejenak bahwa Anda adalah salah satu astronot yang mendarat di Mars. Anda memiliki sejuta hal yang harus dilakukan, sampel untuk diambil, eksperimen untuk dijalankan, data untuk dikumpulkan, tetapi sekali atau dua kali sehari Anda perlu berkeliling di sekitar tempat tinggal dan/atau modul penelitian tempat Anda tinggal dan bekerja untuk memeriksanya. Itu perlu, seseorang harus memastikan bahwa benda itu dalam kondisi baik, bahwa ribuan bagian dan bagiannya berfungsi dan berada di tempatnya. Tetapi bagaimana jika ada pembantu otomatis untuk membebaskan Anda dari beberapa tugas tersebut. Bagaimana jika ada robot kecil yang bisa bergerak di dalam modul untuk memastikan semuanya ada di tempatnya, berfungsi, dan aman.

Robo-Teknisi untuk menyelamatkan.

Pada dasarnya, kode ini mengontrol Teknisi Robo karena mengikuti jalur berwarna terang di tanah. Ini akan mengikuti jalan ini sampai menemukan persimpangan di jalan atau belokan, yang akan meminta foto diambil untuk pemrosesan gambar agar Teknisi Robo membuat keputusan ke mana harus pergi selanjutnya. Sensor bump dan bump berfungsi untuk melindungi Teknisi Robo dari kerusakan, dan sensor bump mengontrol kapan foto diagnostik akan diambil. Secara keseluruhan, Robo-Technician dirancang untuk memperbesar modul Mar, membebaskan waktu astronot saat melakukan tugas dasar inspeksi, hanya meminta masukan manusia ketika menemukan sesuatu yang salah.

Sekali lagi sebagai peringatan, ini adalah pekerjaan yang sedang berjalan. Kode, seperti yang ada, berfungsi tetapi cegukan, terutama karena ada banyak program yang tumpang tindih yang terlibat. Juga, agar proyek ini berfungsi dalam misi Mars yang sebenarnya, sebuah robot perlu dibuat untuk tujuan khusus itu, jadi sekali lagi saya kira ini adalah pembuatan "bukti konsep".

Ada beberapa hal yang Anda perlukan untuk menjalankannya. Anda akan memerlukan program yang mahal, paket dukungan untuk program itu, dan sedikit latar belakang dalam pengkodean. Karena saya seorang siswa, dan beberapa kode lantai dasar telah disediakan (untuk raspberry pi), saya tidak akan secara khusus berbicara tentang pengaturannya. Anda dapat menemukan semua tautan untuk kode dasar itu di bawah. Mari kita masuk ke daftar bahan.

Perangkat keras

  • Raspberry Pi (kami menggunakan versi 3)
  • iRobot ®
  • semacam perangkat penahan untuk menjaga agar Raspberry Pi tetap terpasang pada Robo-Technician
  • Kamera Raspberry Pi (apa pun jenisnya, asalkan memiliki fokus otomatis dan resolusi gambar yang baik)
  • semacam penyangga atau holster untuk menjaga agar kamera tetap menghadap ke depan pada Teknisi Robo
  • bahan untuk digunakan sebagai strip, putih (atau berwarna sangat terang), yang dipegang ke lantai dengan aman. Itu harus sedikit lebih lebar dari ruang antara dua sensor tebing depan.
  • 4 tanda dengan teks yang sangat besar (dengan kata-kata GAMBAR, KANAN, KEMBALI, dan KIRI tercetak di atasnya)
  • Lembaran kertas berwarna (setidaknya tiga dan lebih disukai merah, hijau, dan biru)

Perangkat lunak

  • Matlab (2018a dan 2017b keduanya digunakan dan tampaknya membuat sedikit perbedaan)
  • Paket dukungan Raspberry Pi untuk Matlab
  • Kode Raspberry Pi untuk koneksi ke Matlab (tautan ke kode sumber yang disediakan di bawah)
  • Kotak Alat Pemrosesan Gambar untuk Matlab (Anda tidak dapat melakukan proyek ini tanpa kotak alat)
  • OPSIONAL: Matlab Mobile terinstal di ponsel Anda, yang akan saya jelaskan nanti

Langkah 1: Menyiapkan Perangkat Keras

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

Ini adalah tautan untuk kode dasar untuk memastikan bahwa iRobot® dapat berkomunikasi dengan Matlab, bersama dengan tutorial dasar. Seperti yang saya katakan sebelumnya, saya tidak akan membahas bagian khusus ini karena tutorialnya sudah ditata dengan sangat baik. Saya akan menyebutkan bahwa setelah Anda mengikuti langkah-langkah pada tautan, Anda dapat menggunakan perintah "doc" Matlab untuk melihat informasi yang disertakan. Secara khusus:

dok roomba

Dan satu lagi poin yang sangat penting.

Saat Anda mengunduh file dari tautan di atas, TEMPATKAN DI FOLDER YANG SAYA JELASKAN DI ATAS, karena Matlab mengharuskan file yang dibuat pengguna berada di folder kerja saat ini.

Dengan itu, mari kita beralih ke kode.

Langkah 2: Menemukan Semua Sensor Itu

Menemukan Semua Sensor Itu
Menemukan Semua Sensor Itu
Menemukan Semua Sensor Itu
Menemukan Semua Sensor Itu

Luangkan waktu sebentar dan periksa iRobot®. Baik untuk mengetahui di mana ini sehingga Anda memiliki gagasan tentang input yang diterima oleh Teknisi Robo, dan Anda akan dapat mengetahui mengapa benda itu berputar dalam lingkaran alih-alih mengikuti jalur yang akan Anda siapkan (ini mungkin atau mungkin tidak terjadi). Anda jelas akan melihat sensor benjolan fisik besar di bagian depan. Sensor tebing sedikit lebih sulit dilihat, Anda harus membaliknya dan mencari empat jendela plastik bening di dekat tepi depan. Sensor benturan ringan bahkan lebih tersembunyi, tetapi untuk saat ini sudah cukup untuk mengatakan bahwa pita hitam mengkilat hidup di sekitar bagian depan iRobot®, yang ada di bagian depan bilah sensor benturan fisik.

Ada sensor penurunan roda, tetapi ini tidak digunakan dalam proyek ini, jadi kami akan beralih ke pengujian sensor.

Langkah 3: Pengujian untuk Mengatur Parameter

Pengujian untuk Mengatur Parameter
Pengujian untuk Mengatur Parameter

Sebelum kita dapat mengirim Robo-Technician untuk melakukan tugasnya, kita perlu mencari tahu quirks dan rentang sensornya yang spesifik. Karena setiap iRobot® sedikit berbeda dan berubah selama masa pakai robot, kami perlu mengetahui bagaimana sensor membaca area yang akan dioperasikannya. Cara termudah untuk melakukannya adalah dengan menyiapkan jalur berwarna terang (Saya menggunakan potongan kertas printer putih tetapi apa pun yang berwarna terang dapat digunakan) pada permukaan yang akan dioperasikan oleh Teknisi Robo.

Jalankan Matlab dan buka skrip baru. Simpan skrip DI FOLDER SAMA YANG SAYA JELASKAN SEBELUMNYA dan beri nama apa pun yang Anda inginkan (cobalah untuk membuatnya singkat, karena nama file ini akan menjadi nama fungsi). Nyalakan robot dan gunakan pengaturan variabel roomba dari tutorial, ketikkan perintah ke jendela perintah.

Pastikan Raspberry Pi dicolokkan ke iRobot® dan komputer Anda terhubung ke koneksi internet yang sama. Anda akan menghabiskan lebih sedikit waktu untuk menarik rambut Anda mencoba mencari tahu mengapa Matlab tidak dapat terhubung

r = roomba(nomor yang Anda atur)

Variabel " r " dalam keadaan ini tidak diperlukan, Anda dapat menyebutnya apa pun yang Anda inginkan, tetapi itu membuat hidup lebih mudah untuk menggunakan variabel satu huruf.

Setelah jalur diatur, dan roomba telah berhasil terhubung, tempatkan Teknisi Robo masa depan di mana satu atau dua sensor tebing berada di atas jalur. Jelas itu berarti dua atau tiga lainnya berada di atas permukaan yang Anda pilih.

Sekarang mulai sensor uji dengan perintah:

r.testSensors

Ingatlah bahwa " r." adalah variabel yang Anda definisikan sebelumnya, jadi jika bukan ' r ' ubah ' r.' untuk apa pun yang Anda putuskan. Ini akan memunculkan layar sensor uji dengan banyak info.

Untuk proyek ini fokus pada bagian lightBumper, bumper, dan tebing. Gerakkan Robo-Technician untuk memastikan untuk melihat bagaimana sensor berubah pada permukaan yang berbeda, atau seberapa dekat suatu objek agar nilai ligthBumper berubah, dll. Ingatlah angka-angka ini (atau tuliskan) karena Anda akan membutuhkan mereka untuk mengatur parameter Anda dalam sedetik.

Langkah 4: Memulai Kode

Pertama Anda akan membangun sebuah fungsi. Saya menyebutnya "jalan" tetapi sekali lagi, nama itu tidak perlu, tetapi saya akan menyebutnya sebagai "jalan" mulai sekarang.

Bagian atas kode sedang menyiapkan beberapa opsi input pengguna. Itu membangun beberapa daftar yang akan digunakan di dalam listdlg dan kemudian menampilkan kotak dialog daftar. Ini memungkinkan pengguna untuk memilih warna jalur mana yang ingin mereka ikuti, yang akan dimainkan nanti.

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

problist = {'Casualty, Save Image', 'Component Out of Place, Save Image', 'Expected, Continue'} pathcolor = listdlg('PromptString', 'Select a Path Color', … 'SelectionMode', 'single', 'ListString', daftar) prob = 0; penggerak = ;

Variabel "prob" dan "driver" perlu dideklarasikan di sini karena akan digunakan di dalam loop while utama fungsi, tetapi sekali lagi, jika Anda ingin mengganti nama salah satu variabel ini atau mengubah pilihan daftar, tidak masalah asalkan Anda konsisten dalam sisa kode.

Langkah 5: Top of the While Loop: Sensor Bump Fisik

Bagian atas loop while berisi logika sensor bump fisik. Pada dasarnya, ketika Teknisi Robo menabrak sesuatu, ia berhenti (atau untuk sensor benturan depan mundur 0,1 meter), kemudian memposisikan dirinya untuk mengambil gambar. Mari kita bahas bagian kontrol kecepatan dan posisi terlebih dahulu.

Jika Anda menguji semua sensor pada Robo-Technician pada langkah sebelumnya, Anda akan tahu bahwa sensor bump memiliki nilai logika (0 atau 1) dengan nol yang mewakili posisi sensor yang normal dan tidak ditekan. Ingatlah hal itu untuk kodenya.

while true %main while loop %menerima info bumper S = r.getBumpers if S.left ~= 0 r.stop elseif S.right ~= 0 r.stop elseif S.front ~= 0 r.stop end

Ini adalah bagian dasar "jika mengenai sesuatu, hentikan". Jika sensor mendeteksi tabrakan, maka sensor bergerak ke bagian kode berikutnya, yang menyesuaikan kembali posisi Teknisi Robo untuk mendapatkan foto.

if S.left ~= 0 %jika loop mengambil info bumper dan menyelaraskan kamera untuk foto r.turnAngle(5) pause(0.5) img = r.getImage %mengambil foto dan menampilkan gambar(img) %kotak dialog prob = listdlg(' PromptString', 'Menemukan Kendala Tak Terduga, Harap Identifikasi'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.right ~=0 r.turnAngle(-5) pause(0.5) img = r. getImage image(img) prob = listdlg('PromptString', 'Menemukan Kendala Tak Terduga, Harap Identifikasi'…, 'SelectionMode', 'single', 'ListString', problist) elseif S.front ~= 0 r.moveDistance(- 0.1) pause(0.5) img = r.getImage image(img) prob = listdlg('PromptString', 'Menemukan Rintangan Tak Terduga, Harap Identifikasi'…, 'SelectionMode', 'single', 'ListString', problist) end

Pada dasarnya, setelah gambar diambil, kotak dialog lain akan muncul dengan tiga opsi. Dua opsi pertama menyimpan foto ke folder tertentu, yang akan saya bahas nanti, sedangkan opsi ketiga hanya menutup kotak dialog dan melanjutkan loop. Jika Anda tidak dapat mengingat opsi, lihat langkah sebelumnya.

Sekarang saya menyisipkan bagian kode di antara bagian bump sensor dan bagian penyimpanan foto. Ini mengambil nilai lightBumper dan menyetel kecepatan drive ke 0,025 meter/detik (sangat lambat), yang sebenarnya tidak diperlukan tetapi mengurangi Robo-Technician yang membenturkan benda dan akhirnya membuat sensor benturan fisik menjadi aus.

L = r.getLightBumpers jika L.left > 100 || L.kiriDepan >100 || L.kananDepan >100 || L.kanan >100 drive = 0,025 r.setDriveVelocity(0,025) selain itu drive = 0,1 akhir

Ini akan menjadi bagian di mana nilai-nilai yang Anda amati (dan mudah-mudahan ditulis) sebelumnya ikut bermain

"L.(sisi dan arah sensor) > 100" didasarkan pada nilai yang saya amati, jadi jika pengamatan Anda berbeda, ubah angka ini. Idenya adalah jika Teknisi Robo merasakan sesuatu beberapa sentimeter di depannya, itu akan melambat, lebih dari itu tidak diperlukan.

Bagian selanjutnya adalah tempat foto disimpan untuk nanti.

%jika opsi pertama atau kedua dipilih dalam dialog prob, menyimpan gambar jika prob == 1 %jika loop membuat info file untuk foto, menulis dengan stempel waktu t = jam; nama dasar = sprintf('\img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); folder = 'E:\UTK\Classes\fall 18\ef230\irobot\images'; fullFileName = fullfile(folder, nama dasar); imwrite(img, fullFileName) close Gambar 1 pause(2) elseif prob == 2 t = clock; nama dasar = sprintf('\img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); folder = 'E:\UTK\Classes\fall 18\ef230\irobot\images'; fullFileName = fullfile(folder, nama dasar); imwrite(img, fullFileName) tutup Gambar 1 jeda(2) akhir

Semua nama file dan lokasi tempat foto disimpan adalah opsional. Saya memilih folder yang bersarang di dalam folder roomba yang saya buat di langkah pendahuluan, tetapi bisa di mana saja yang Anda pilih. Juga, foto-foto disimpan dengan stempel waktu, tetapi itu tidak terlalu diperlukan (meskipun secara hipotesis berguna untuk misi Mars).

Dengan sensor bump fisik tertutup, kita bisa pindah ke sensor tebing dan mengikuti jalur.

Langkah 6: Mengikuti Jalan

Kode untuk sensor tebing diatur untuk membandingkan nilai dari dua nilai sensor depan dan dua sisi. Anda harus mengubah nilai ini (mungkin) berdasarkan nilai yang Anda amati. Anda juga mungkin perlu mengedit nilai ini setelah beberapa pengujian berjalan dan mengubahnya berdasarkan cahaya sekitar, waktu (tergantung seberapa baik pencahayaan area pengujian) atau saat jendela sensor kotor.

Sebelum kita sampai ke kode sensor tebing, ada segmen kode pendek yang saya masukkan untuk menghapus beberapa data yang tidak perlu dari Matlab. Bagian ini tidak diperlukan, tetapi saya menggunakannya untuk mengurangi penyimpanan yang diperlukan untuk menjalankan program.

clear img clear t clear basename clear fullFileName hapus folder

Segmen kode berikutnya adalah inti dari proyek. Hal ini memungkinkan Teknisi Robo untuk mengikuti jalur berwarna terang yang telah ditempatkan di lantai. Singkatnya, ia mencoba mengarahkan dirinya sendiri sehingga dua sensor tebing depan berada di atas ambang batas, berdasarkan nilai yang Anda amati, dan memungkinkan program untuk memulai langkah pemrosesan gambar sedikit kemudian.

C = r.getCliffSensors %jika loop mengikuti pita warna(putih) jika C.leftFront > 2000 && C.rightFront >2000 %panduan jalur lurus r.setDriveVelocity(drive) elseif C.leftFront 2000 %belok kanan jika robot terlalu jauh kiri r.turnAngle(-2.5) elseif C.leftFront >2000 && C.rightFront<2000%belok kiri jika robot terlalu jauh ke kanan r.turnAngle(2.5) elseif C.leftFront <2000 && C.rightFront 100 || L.kiriDepan >100 || L.kananDepan >100 || L.kanan >100 img = r.getImage end %memeriksa apakah ada tikungan di jalur jika C.left >2800 && C.kanan <2800 r.turnAngle(2.5) elseif C.left 2800 r.turnAngle(- 2.5) end %place holder untuk path image recognition disp('GETTING IMAGE') end end end

Perlu diingat bahwa nama variabel yang saya pilih adalah opsional, tetapi sekali lagi saya pikir itu membuat hidup lebih mudah untuk menggunakan variabel huruf tunggal bila memungkinkan

Untuk menjelaskan bagian tengah kode, ketika dua sensor depan keluar dari tepi jalan (ketika datang ke persimpangan atau ketika mencapai ujung jalan) itu terlihat untuk melihat apakah ada sesuatu di depannya.. Anda harus menempatkan objek di tanah di ujung jalan atau di persimpangan mana pun agar ini berfungsi.

Setelah foto diambil, ia menggunakan pengenalan gambar untuk mencari tahu apa yang harus dilakukan. Ada juga tempat penampung di bagian kode ini:

%tempat penampung untuk tampilan pengenalan gambar jalur('MENDAPATKAN GAMBAR')

Saya menggunakan ini untuk saat ini karena saya ingin berbicara secara khusus tentang pemrosesan teks dan warna yang terjadi, yang ada di langkah berikutnya.

Langkah 7: Pemrosesan Gambar

Ada dua bagian untuk pengolahan citra. Pertama adalah pengenalan warna, yang menghitung intensitas warna pada gambar untuk memutuskan apakah akan melanjutkan ke pengenalan teks atau tidak. Perhitungan warna didasarkan pada pilihan apa yang dibuat di kotak dialog pertama di awal (saya menggunakan merah, biru, hijau tetapi Anda dapat memilih warna apa pun yang Anda inginkan, selama nilai rata-rata untuk intensitas warna dapat dikenali oleh kamera Raspberry Pi).

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

Ini adalah pemeriksaan intensitas. Ini akan digunakan di segmen berikutnya untuk memutuskan apa yang ingin dilakukan.

jika merah > g && merah >b jika pathcolor == 1 imgc = imcrop(img, [0 30 512 354]) R = ocr(img) jika R. Words{1} == GAMBAR || R. Words{2} == GAMBAR || R. Words{3} ==GAMBAR t = jam; nama dasar = sprintf('\img_%d_%d_%d_%d_%d.png', t(1), t(2), t(3), t(4), t(5)); folder = 'E:\UTK\Classes\fall 18\ef230\irobot\images'; fullFileName = fullfile(folder, nama dasar); imwrite(img, fullFileName) pause(2) elseif R. Words{1} == KANAN || R. Words{2} == BENAR || R. Words{3} ==KANAN r.turnAngle(-75) elseif R. Words{1} == KIRI || R. Words{2} == KIRI || R. Words{3} == KIRI r.turnAngle(75) elseif R. Words{1} == BACK || R. Words{2} == KEMBALI || R. Words{3} ==BACK r.turnAngle(110) end else r.turnAngle(110) end end

Segmen ini memutuskan apakah warna yang dipilih di kotak dialog pertama cocok dengan warna yang dilihat kamera. Jika ya, itu menjalankan pengenalan teks. Itu terlihat untuk melihat kata mana (GAMBAR, KEMBALI, KANAN atau KIRI) yang muncul dan kemudian berbalik (untuk kanan dan kiri), berputar (untuk belakang) atau mengambil gambar dan menyimpannya dengan cara yang sama seperti sebelumnya.

Saya hanya menyediakan satu bagian kode untuk warna yang berbeda

Untuk memungkinkan kode mengenali biru dan hijau, cukup salin kode dan ubah pemeriksaan logika di bagian atas segmen dan atur " pathcolor == (angka) " agar sesuai dengan pilihan warna dari kotak dialog atas (untuk kode seperti yang ditampilkan, biru akan menjadi 2 dan hijau akan menjadi 3).

Langkah 8: Produk Jadi

Produk jadi
Produk jadi

Sekarang Robo-Technician harus memperbesar modul misi Mars dan melaporkan kembali ke astronot ketika ada yang tidak pada tempatnya.

Ingat, semua nilai sensor tebing dan lightBumper perlu diubah ke nilai pengamatan Anda. Juga, dari pengalaman saya merasa lebih baik untuk menguji proyek ini di lantai berwarna gelap dan bahkan lebih baik jika lantai itu tidak reflektif. Ini membuat kontras meningkat antara jalan dan lantai yang membuatnya lebih mungkin bahwa Teknisi Robo akan mengikutinya dengan benar.

Semoga Anda menikmati menyiapkan pembantu kecil untuk misi Mars, dan bersenang-senang membangun.

Direkomendasikan: