Isi kandungan:

Bot Pembantu Taman Roomba: 8 Langkah
Bot Pembantu Taman Roomba: 8 Langkah

Video: Bot Pembantu Taman Roomba: 8 Langkah

Video: Bot Pembantu Taman Roomba: 8 Langkah
Video: torang pasukan damai batudaa versi robot Transformers optimus prime 2024, November
Anonim
Pembantu Taman Roomba Bot
Pembantu Taman Roomba Bot

Kiara Myers, Ahmad Alghadeer, dan Madison Tippet

Tujuan:

Instruksional ini akan mengajar anda cara memprogram Bot Roomba, menggunakan MATLAB, untuk menavigasi taman, mengesan buah / sayur berbentuk bulat yang cukup matang untuk dipetik berdasarkan ukurannya. Robot ini juga menghantar e-mel kepada anda, memberitahu anda berapa buah yang siap dipetik dan jalan di mana ia dilalui.

Ciri-ciri:

  • Menggunakan sensor cahaya untuk mengesan dinding dan berpusing sedikit agar tidak memukulnya
  • Menggunakan sensor bump untuk mematahkan program ketika memukul batu di hujung kebun
  • Menggunakan pemprosesan gambar untuk mengesan bulatan di kebun dan kemudian menentukan jejarinya
  • Menggunakan sensor tebing untuk mengesan pita berwarna yang menunjukkan kehadiran buah

Langkah 1: Bahan dan Bekalan:

  • Satu Komputer riba
  • MATLAB 2017
  • Pembersih Vakum Roomba
  • Pai raspberi
  • Blok kayu
  • Kertas putih
  • Kertas Hitam
  • Pita berwarna / jalur nipis kertas berwarna
  • Batu Besar

Langkah 2:

Langkah 3: Menyusun "Taman" Anda

Menghimpunkan Anda
Menghimpunkan Anda
  1. Ambil kertas hitam anda dan potong bulatan dengan pelbagai saiz
  2. Ketatkan lingkaran hitam ini ke atas kertas putih yang besar

    Perbezaan ini akan diperlukan semasa mengesan buah

  3. Gunakan sekatan kayu anda untuk membina jalan kebun seperti labirin agar robot anda dapat menavigasi

    Kami memilih jalan berbentuk U seperti gambar di atas

  4. Di hujung kebun anda, tambahkan batu atau pintu atau objek lain agar robot anda mengetahui ia sudah selesai
  5. Pita kertas putih anda dengan bulatan ke dinding taman

    Kami menggunakan baldi untuk merakamnya kerana dinding kami terlalu pendek untuk kamera

  6. Letakkan pita berwarna / jalur nipis kertas berwarna di tanah di hadapan buah

Langkah 4: Menulis Kod

Melayari Taman

Menggunakan Sensor Bump: Untuk menjalankan program, kami meletakkan pengekodan dalam pernyataan sementara yang melingkari pelbagai pernyataan jika pernyataan sehingga kodnya rosak. Sekiranya salah satu bumper terkena, itu akan menghasilkan nilainya sama dengan benar (yang di Boolean adalah nilai 1). Pernyataan if digunakan untuk memecahkan kod apabila salah satu nilainya sama dengan 1.

Menggunakan Cliff Sensors: Dalam pernyataan sementara, kami menggunakan pernyataan if untuk memberitahu Roomba kapan ia tiba di lokasi kilang. Roomba mengesan pita berwarna di lantai dengan memeriksa ambang merah yang diambil oleh sensor tebing. Sekiranya sensor tebing kiri atau kanan mengesan warna dengan ambang yang lebih besar daripada permukaan tanah, maka ia akan menghentikan robot selama 2 saat (menggunakan perintah jeda). Selama 2 saat ini, Roomba akan mengambil dan memaparkan gambar buah. Dengan menggunakan perintah imfindcircles, tetapkan jarak untuk jari-jari lingkaran anda, dan Roomba anda akan menemui buah yang disebut.

Menggunakan Pemprosesan Imej: Dalam pernyataan if, kami menyertakan pernyataan if yang lain yang mengatakan: jika jari-jari yang dikesan, radii3, lebih besar daripada atau sama dengan keperluan minimum buah masak kami, r1 (anda memutuskan ini), kemudian hitung dan tampilkan Roomba berapa buah yang siap dan belok untuk terus melalui kebun. Sekiranya tidak, giliran untuk terus melalui kebun. Catatan: anda mungkin perlu menyesuaikan sudut yang anda putar kerana setiap Roomba berbeza

Menggunakan Light Bumpers: Dalam pernyataan if lain, bumper cahaya dianalisis untuk memastikan tidak ada yang menjadi lebih besar daripada ambang yang ditentukan kami. Sekiranya bumper cahaya kiri, kanan, kiri, tengah kanan, depan kiri, atau kanan depan berada di atas ambang pintu, maka Roomba akan berpusing sedikit pada sudut yang sesuai untuk mengelakkan memukul dinding. Oleh itu, menavigasi labirin.

Selebihnya kod digunakan untuk merancang jalan yang diambil oleh Roomba dan kemudian menghantar hasilnya ke e-mel anda

Langkah 5: Salin Kod

Tujuan: Berdasarkan ukurannya, roomba akan melalui kebun dan membezakan sayur-sayuran / buah-buahan yang siap dipetik. % Input: Sensor Lightbump, Sensor Cliff, Bump sensor, gambar dari kamera Kod itu pecah apabila roomba menabrak% objek, menghantar angkasawan e-mel mengenai berapa buah yang siap untuk dipetik dan pemetaan pergerakan roomba. % Penggunaan: Jika dan semasa pernyataan, merancang arahan, kod e-mel dari MATLAB

k = 0

tic

timerVal = tic

walaupun benar

v =.2; % halaju r.setDriveVelocity (v, v);% roomba maju L = r.getLightBumpers; LC = L.leftCenter; Rr = L. betul; Lf = L.kiri; RC = L.rightCenter; LF = L.leftFront; RF = L.rightFront; S = 75; ambang%. RTH = 30; Ambang merah tinggi RTL = 10; Ambang merah rendah B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; sekiranya S.leftFront> PL1 || S.rightFront> PL1% mengesan jika warna di atas tanah melebihi ambang r.stop jeda (2) berlaluTime = toc (timerVal-2) tic timerVal = tic% jeda selama 2 saat img = r.getImage; % take image imshow (img)% display image [center3, radii3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = lingkaran lingkaran (pusat3, jejari3); % cari bulatan jejari w / dalam julat yang ditentukan dalam gambar jika radii3> = r1 T = 1 k = k + 1 dist1 = 0.2. * berlaluSaat% Sekiranya jejari yang dikesan lebih besar daripada atau sama dengan minimum% keperluan buah masak, maka Roomba menghitung buah ini jika radii3 <= r3 T = 0 yang lain T = 0 dist2 = 0.2. * berlaluTime% Sekiranya tidak, maka ia tidak akan mengira hujung buahnya

jika T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Sekiranya buah dikesan, maka tunjukkan nombor di Roomba,% buat bising, dan putar elseif T == 2 r.turnAngle (78)% Sekiranya 2 buah dikesan, maka belok untuk meneruskan melalui% kebun lain jika LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) otherif RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) akhir% Sekiranya ada nilai bumper cahaya melebihi ambang, maka% Roomba akan berpusing sedikit ke arah yang sesuai untuk mengelakkan% memukul dinding

jika B.right == 1 || B.kiri == 1 || B.front == 1 dist3 = 0.2. * Berlalu Masa r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Sekiranya ada bilah dipukul, kemudian roomba memainkan bunyi, berputar,% dan memecahkan kodnya

akhir rehat

hamburan akhir (0,533, 0, '^') tahan pada penyebaran (0,533, dist1, '<') tahan pada hamburan (-dist2, dist1, 'v') tahan pada penyebaran (-dist2, 0, 'd') saveas (gcf, 'Movement.png')

kmsg = num2str (k) mail = '[email protected]' kata laluan = 'Srsora123 #' host = 'smtp.gmail.com' port = '465'

setpref ('Internet', 'E_mail', mel); setpref ('Internet', 'SMTP_Server', host) alat peraga = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', mel); props.setProperty ('mail.smtp.host', hos); props.setProperty ('mail.smtp.port', port); props.setProperty ('mail.smtp.starttls.enable', 'true'); props.setProperty ('mail.smtp.debug', 'true'); props.setProperty ('mail.smtp.auth', 'benar'); props.setProperty ('mail.smtp.socketFactory.port', port); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'false'); sendmail (mel, 'Hello Astronaut! Terdapat banyak buah di kebun', kmsg, {'movement.png'})

Disyorkan: