Isi kandungan:

IRobot Create-Mars Expedition Rover Mark I: 4 Steps
IRobot Create-Mars Expedition Rover Mark I: 4 Steps

Video: IRobot Create-Mars Expedition Rover Mark I: 4 Steps

Video: IRobot Create-Mars Expedition Rover Mark I: 4 Steps
Video: Perseverance Mars Rover Landing- Inside Story 2024, November
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Instruksional ini akan mengajar anda cara mengatur Buat iRobot dengan menggunakan pengkodan MatLab. Robot anda akan mempunyai kemampuan untuk mencari mineral dengan membezakan bentuk, menggerakkan medan kasar melalui penggunaan sensor tebing, dan mempunyai kemampuan untuk dikendalikan secara manual melalui makanan langsung.

Langkah 1: Bekalan

Bekalan
Bekalan

Untuk projek ini, anda memerlukan iRobot Create, yang merupakan versi pembersih vakum robot Roomba yang dapat diprogramkan. Robot ini dilengkapi dengan semua sensor yang diperlukan untuk projek ini, khususnya sensor bump, sensor tebing dan sensor "Light Bump". Anda juga memerlukan Raspberry Pi dan kamera video, digunakan untuk komunikasi tanpa wayar, pengaturcaraan langsung, dan suapan video langsung. Terakhir, anda memerlukan pemasangan dicetak 3D untuk Raspberry Pi dan kamera.

Langkah 2: Kembangkan Pengekodan untuk Memuaskan Hasil yang Diinginkan

Kembangkan Pengekodan untuk Memuaskan Hasil yang Diinginkan
Kembangkan Pengekodan untuk Memuaskan Hasil yang Diinginkan

Setelah anda menyambungkan Roomba, anda perlu membuat kod Matlab yang akan memberikan output yang anda inginkan setelah input yang anda inginkan.

Kodnya dapat dilihat di sini:

% Projek Roomba% Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal (mheal)% 4/11/19% Keterangan Masalah: Buat rover untuk menolong manusia semasa% eksplorasi / tempat tinggal mars. Kaedah kaedah penyelesaian: Cari bahan organik (hijau) melalui penggunaan% bumper cahaya, sensor tebing dan kamera untuk memeriksa bahan organik. Benarkan% rover menavigasi medan kasar melalui penggunaan bumper, sensor% tebing, dan sensor ketinggian roda. Membolehkan manusia mengawal rover dari% jarak yang selamat dan mencari mineral secara manual. pilihan = {'KEHIDUPAN', 'TERRAIN ROUGH', 'PENGENDALIAN PENGGUNA'}; % Tiga pilihan dalam menu dialog Pengaturan = menu ('', pilihan) jika Pengaturan> 0% Jika pilihan yang dipilih meminta pilihan pengesahan pengguna2 = {'Ya', 'Tidak'}% Buat susunan sel untuk "ya" atau "Tidak "pilihan Confirm = menu (['Anda memilih"' pilihan {Setting} '"mode.'], pilihan2)% Sahkan pilihan tetapan pengguna jika Confirm == 1 jika Setting == 1% Periksa apakah tetapan" LIFE "dipilih i = 0 while i == 0 r.setLEDDigits (num2str ('LIFE'))% Display 'LIFE' pada LED untuk i = 1: 100 r.setDriveVelocity (0,05)% Gerakkan roomba ke hadapan pada 0,05 m / sy = r.getCliffSensors % Ambil dan simpan nilai sensor tebing dalam struktur sel "y" l = r.getLightBumpers)% Pindahkan roomba ke belakang 0.05 meter r.turnAngle (20)% Putar roomba 20 darjah CCW img = r.getImage% Dapatkan gambar dari kamera pai rasberry pada ruang roomba = [100 0 150 150]; img = imcrop (img, rect)% gambar tanaman untuk fokus pada tengah merah = min (min (img (:,:, 1)))% rata-rata intensiti merah hijau = min (min (img (:,:, 2)))% rata-rata intensiti hijau biru = min (mean (img (:,:, 3)))% rata-rata intensiti biru jika hijau> merah && hijau> biru% Periksa sama ada tumbuhan ada dalam gambar d = msgbox (['Kehidupan dijumpai! ']); % Paparkan kotak mesej yang mengatakan "Kehidupan dijumpai!" pelayan (d); end elseif l.leftFront> 100% Cek kiri / depan bumper lampu ditutup r.moveDistance (-0.05)% Pindahkan roomba ke belakang 0.05 meter img = r.getImage% Dapatkan gambar dari kamera pai rasberry di roomba dan simpan dalam img pemboleh ubah 'rect = [100 0 150 150]; img = imcrop (img, rect)% gambar tanaman untuk fokus pada tengah merah = min (min (img (:,:, 1)))% rata-rata intensiti merah hijau = min (min (img (:,:, 2)) % rata-rata intensiti hijau biru = min (min (img (:,:, 3)))% rata-rata intensiti biru jika hijau> merah && hijau> biru% Periksa sama ada tumbuhan ada dalam gambar d = msgbox (['Kehidupan dijumpai! ']); % Paparkan kotak mesej yang mengatakan "Kehidupan dijumpai!" pelayan (d); end elseif l.leftCenter> 100% Periksa sama ada bumper cahaya kiri / tengah ditutup r.moveDistance (-0.05)% Pindahkan roomba ke belakang 0.05 meter img = r.getImage% Dapatkan gambar dari kamera pai rasberry di roomba dan simpan dalam img pemboleh ubah 'rect = [100 0 150 150]; img = imcrop (img, rect)% gambar tanaman untuk fokus pada tengah merah = min (min (img (:,:, 1)))% rata-rata intensiti merah hijau = min (min (img (:,:, 2)))% rata-rata intensiti hijau biru = min (mean (img (:,:, 3)))% rata-rata intensiti biru jika hijau> merah && hijau> biru% Periksa sama ada tumbuhan ada dalam gambar d = msgbox (['Kehidupan dijumpai! ']); % Paparkan kotak mesej yang mengatakan "Kehidupan dijumpai!" pelayan (d); end elseif l.rightCenter> 100% Periksa sama ada bumper cahaya kanan / tengah ditutup r.moveDistance (-0.05)% Pindahkan roomba ke belakang 0.05 meter img = r.getImage% Dapatkan gambar dari kamera pai rasberry di roomba dan simpan dalam img pemboleh ubah 'rect = [100 0 150 150]; img = imcrop (img, rect)% gambar tanaman untuk fokus pada tengah merah = min (min (img (:,:, 1)))% rata-rata intensiti merah hijau = min (min (img (:,:, 2)) % rata-rata intensiti hijau biru = min (min (img (:,:, 3)))% rata-rata intensiti biru jika hijau> merah && hijau> biru% Periksa sama ada tumbuhan ada dalam gambar d = msgbox (['Kehidupan dijumpai! ']); % Paparkan kotak mesej yang mengatakan "Kehidupan dijumpai!" pelayan (d); end elseif l.rightFront> 100% Periksa sama ada bumper lampu kanan / depan ditutup r.moveDistance (-0.05)% Pindahkan roomba ke belakang 0.05 meter img = r.getImage% Dapatkan gambar dari kamera pai rasberry di roomba dan simpan dalam img pemboleh ubah 'rect = [100 0 150 150]; img = imcrop (img, rect)% gambar tanaman untuk fokus pada tengah merah = min (min (img (:,:, 1)))% rata-rata intensiti merah hijau = min (min (img (:,:, 2)))% rata-rata intensiti hijau biru = min (mean (img (:,:, 3)))% rata-rata intensiti biru jika hijau> merah && hijau> biru% Periksa sama ada tumbuhan ada dalam gambar d = msgbox (['Kehidupan dijumpai! ']); % Paparkan kotak mesej yang mengatakan "Kehidupan dijumpai!" pelayan (d); end elseif l.right> 100% Periksa sama ada bumper cahaya kanan ditutup r.moveDistance (-0.05)% Pindahkan roomba ke belakang 0.05 meter r.turnAngle (-20)% Putar roomba 20 darjah CW img = r.getImage% Dapatkan gambar dari kamera pai rasberry pada roomba dan simpan dalam pemboleh ubah 'img' rect = [100 0 150 150]; img = imcrop (img, rect)% gambar tanaman untuk fokus pada tengah merah = min (min (img (:,:, 1)))% rata-rata intensiti merah hijau = min (min (img (:,:, 2)) % rata-rata intensiti hijau biru = min (min (img (:,:, 3)))% rata-rata intensiti biru jika hijau> merah && hijau> biru% Periksa sama ada tumbuhan ada dalam gambar d = msgbox (['Kehidupan dijumpai! ']); % Paparkan kotak mesej yang mengatakan "Kehidupan dijumpai!" pelayan (d); end elseif y.leftFront <1500% Periksa sama ada bahagian kiri / depan roomba berada di tebing r.moveDistance (-0.1, 0.05)% Pindahkan roomba mundur 0.1 meter pada 0.05 m / s r.turnAngle (-5)% Putar roomba 5 darjah CW lain jika anda berada di hadapan <1500% Periksa sama ada bahagian kanan / depan roomba berada di tebing r.moveDistance (-0.1, 0.05)% Gerakkan roomba ke belakang 0.1 meter pada 0.05 m / s r.turnAngle (5)% Putar roomba 5 darjah CCW lain jika kiri <1000% Periksa sama ada bahagian kiri roomba berada di tebing r.moveDistance (-0.05, 0.05)% Pindahkan roomba mundur 0.05 meter pada 0.05 m / s r.turnAngle (-10)% Putar roomba 10 darjah CW elseif y.right0% Jalankan jika butang ditekan jika Terus == 1 i = 0% Terus mencari kehidupan yang lain i = 1% Mod HIDUP akhir hujung akhir lainif Tetapan == 2% Periksa sama ada tetapan "ROUGH TERRAIN" dipilih i = 0 while i == 0 r.setLEDDigits (num2str ('RGH'))% Display 'Rough' pada LED Display untuk i = 1: 1000 r.setDriveVelocity (0.05)% Tetapkan kelajuan pemacu roomba kepada 0.05 m / sx = r.getBumpers% Dapatkan dan simpan nilai sensor bumper dalam struktur "x" y = r.get CliffSensors% Ambil dan simpan nilai sensor tebing dalam struktur "y" jika x.right == 1% Periksa sama ada bumper kanan ditekan r.turnAngle (10)% Putar roomba 10 darjah CCW lainif x.left == 1% Periksa sama ada kiri bumper ditekan r.turnAngle (-10)% Putar roomba 10 darjah CW elseif x.front == 1% Periksa sama ada bumper depan ditekan r.turnAngle (20)% Putar roomba 20 darjah CCW elseif x.rightWheelDrop == 1% Periksa sama ada roda kanan telah jatuh r.turnAngle (-20)% Putar bilikba 20 darjah CW lainjika x.leftWheelDrop == 1% Periksa roda kiri telah turun r.turnAngle (20)% Putar bilikba 20 darjah CCW lain jika y.leftFront < 1500% Periksa sama ada bahagian kiri depan roomba berada di tebing r.moveDistance (-0.05, 0.05)% Pindahkan roomba mundur 0.05 meter pada 0.05 m / s r.turnAngle (-5)% Putar roomba 5 darjah CW lain sekiranya y.rightFront < 1500% Periksa sama ada bahagian depan kanan roomba berada di tebing r.moveDistance (-0.05, 0.05)% Pindahkan roomba mundur 0.05 meter pada 0.05 m / s r.turnAngle (5)% Putar roomba 5 darjah CCW lain jika kiri <1000 % Periksa sama ada bahagian kiri o f roomba berada di tebing r.moveDistance (-0.05, 0.05)% Pindahkan roomba ke belakang 0.05 meter pada 0.05 m / s r.turnAngle (-10)% Putar roomba 10 darjah CW lain jika y.right0 jika Terus == 1 i = 0 % Teruskan medan kasar yang lain i = 1% Tamat medan kasar hujung hujung yang lain% Mod Manual i = 0 r.setLEDDigits (num2str ('USER'))% Display 'USER' pada Paparan LED d = msgbox (['Tombol Panah - Bergerak; S - Hentikan Rover; ESC - Kawalan Pengguna Akhir; A - Cari Sumber ']); pelayan (d); sementara i == 0 r.showCamera% Buka suapan langsung kamera pie rasberry di tetingkap yang berasingan D = getkey (1)% Keluarkan semula ditekan oleh pengguna, simpan nilai ASCII sebagai pemboleh ubah D jika D == 30% Periksa apakah anak panah "atas" mempunyai telah ditekan r.setDriveVelocity (0.1)% Hantar roomba maju pada 0.2 m / s elseif D == 28% Periksa sama ada anak panah "kiri" ditekan r.setDriveVelocity (0)% Hentikan roomba daripada bergerak maju atau mundur r.turnAngle (15, 0,05)% Putar roomba 45 darjah CCW pada 0,05 m / s elseif D == 31% Periksa sama ada anak panah "bawah" ditekan r.setDriveVelocity (-0.1)% Pindahkan roomba ke belakang pada 0.2 m / s lainif D == 29% Periksa sama ada anak panah "kanan" ditekan r.setDriveVelocity (0)% Hentikan roomba daripada bergerak maju atau mundur r.turnAngle (-15, 0.05)% Putar roomba 45 darjah CW pada 0.05 m / s elseif D == 27% Periksa sama ada kekunci "esc" (melarikan diri) ditekan i = 1% Ubah nilai pemboleh ubah "i" untuk keluar gelung d = msgbox ('Keluar dari "Kawalan Pengguna"')% Beri tahu pengguna bahawa mod manual sedang dimatikan jika D == 115% Periksa sama ada kekunci "s" telah ditekan r.setDriveVelocity (0)% Hentikan roomba dari maju atau mundur lain jika D == 97% Periksa sama ada "a" telah ditekan gambar = r.getImage; imwrite (gambar, 'image.png') W = Kelaskan (gambar) K = mod (W) jika K == 3 d = msgbox ('Resource found')% Paparan jika sumber segiempat dikesan menunggu (d); % Tunggu pengguna menutup kotak mesej "d" elseif K == 0 d = msgbox ('Not Resource:(')% Paparan jika sumber segi empat tepat tidak dikesan menunggu (d);% Tunggu pengguna menutup kotak mesej "d" end else d = msgbox ('Bukan input kunci yang sah.')% Paparan jika pengguna menutup menu "select setting" tunggu (d);% Tunggu pengguna menutup kotak mesej "d" akhir tunggu (d);% Tunggu pengguna untuk menutup kotak mesej "d" hujung akhir akhir lain d = msgbox ('Selamat tinggal')% Mengucapkan selamat tinggal jika pilihan ditutup menunggu akhir (d);

Langkah 3: Menguji

Ujian
Ujian

Setelah kod anda ditulis, anda perlu menguji Roomba anda. Walaupun kod anda mungkin kelihatan betul, banyak nilai anda, terutama untuk warna atau bentuk, perlu diubah untuk mengenal pasti objek yang anda mahukan Roomba anda kenal pasti.

Langkah 4: Perhatikan Output Visual

Perhatikan Output Visual
Perhatikan Output Visual
Perhatikan Output Visual
Perhatikan Output Visual

Ini akan menjadi sangat jelas sama ada anda berjaya memprogram Roomba anda berdasarkan output visualnya.

Keluaran merangkumi:

  • Pengesanan Bentuk: Keupayaan Roomba untuk membezakan bentuk dengan betul untuk mencari mineral yang betul
  • Manuver Medan Kasar: Mengelakkan tebing atau kawasan gelap
  • Mod Manual: Suapan langsung dan keupayaan untuk mengawal Roomba
  • Gambar: Gambar mineral
  • Life Found !: Kotak teks MatLab yang menandakan bahawa tanaman anda telah mengenal pasti kehidupan organik.

Itulah akhir tutorial kami, nikmati Mars Expedition Rover baru anda!

Disyorkan: