Isi kandungan:
- Langkah 1: Bekalan
- Langkah 2: Kembangkan Pengekodan untuk Memuaskan Hasil yang Diinginkan
- Langkah 3: Menguji
- Langkah 4: Perhatikan Output Visual
Video: IRobot Create-Mars Expedition Rover Mark I: 4 Steps
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
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
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
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
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
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:
Helmet Iron Man Mark II: 4 Langkah
Helmet Iron Man Mark II: Casco réplica mark II de 2 partes, casco y pulsera unidos por cadena que conduce el cableado, alimentado por 4 baterías AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido.Casco: Servomotores para el cierre anda
Mark Twain House Menghantui: 5 Langkah
Mark Twain House Haunting: Rumah Mark Twain dikhabarkan akan dihantui oleh pengarang terkenal. Dalam Instructable ini, saya telah " menemui " gambar lama yang membuktikan bahawa keraguan Twain memang menghantui rumah lama yang bersejarah ini
Mesin Ultimate Beer Pong - PongMate CyberCannon Mark III: 6 Steps (with Pictures)
Mesin Ultimate Beer Pong - PongMate CyberCannon Mark III: PengenalanPongMate CyberCannon Mark III adalah sekeping teknologi pong bir terbaru dan paling maju yang pernah dijual kepada orang ramai. Dengan CyberCannon baru, mana-mana orang boleh menjadi pemain yang paling ditakuti di meja bir pong. Bagaimana ini
Slave Trigger Flash Mark II: 6 Langkah (dengan Gambar)
Slave Trigger Flash Mark II: Dalam arahan ini saya akan menerangkan cara membuat flash trigger slave (optik) sebenar dengan minimum komponen. Terdapat banyak reka bentuk kompleks yang anda dapati di internet, reka bentuk ini sangat mudah dan berfungsi baik dalam envi terang dan redup
Penceramah Mark I Super Psyllium Passivia: 6 Langkah (dengan Gambar)
Penceramah Mark I Super Psyllium Passivia: Diilhamkan oleh pelbagai reka bentuk pembesar suara pada instruksional, cara apa yang lebih baik untuk memasuki seni Suara daripada membuat YAS (Namun Speaker lain)! Kami adalah orang biasa di Makmal Audio Biasa, dan mempunyai bekas kosong yang indah ini