Daftar Isi:

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

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

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

Instruksi ini akan mengajari Anda cara mengatur iRobot Create dengan menggunakan pengkodean MatLab. Robot Anda akan memiliki kemampuan untuk mencari mineral dengan membedakan bentuk, manuver medan kasar melalui penggunaan sensor tebing, dan memiliki kemampuan untuk dikontrol secara manual melalui umpan langsung.

Langkah 1: Persediaan

Perlengkapan
Perlengkapan

Untuk proyek ini, Anda memerlukan iRobot Create, yang merupakan versi penyedot debu robot Roomba yang dapat diprogram. Robot dilengkapi dengan semua sensor yang diperlukan untuk proyek ini, khususnya sensor benturan, sensor tebing, dan sensor "Light Bump". Anda juga memerlukan Raspberry Pi dan kamera video, yang digunakan untuk komunikasi nirkabel, pemrograman langsung, dan umpan video langsung. Terakhir, Anda memerlukan dudukan cetak 3D untuk Raspberry Pi dan kamera.

Langkah 2: Kembangkan Coding untuk Memuaskan Hasil yang Diinginkan

Kembangkan Coding untuk Memuaskan Hasil yang Diinginkan
Kembangkan Coding untuk Memuaskan Hasil yang Diinginkan

Setelah Anda menghubungkan Roomba Anda, Anda perlu membuat kode Matlab yang akan memberikan output yang Anda inginkan setelah input yang Anda inginkan.

Kodenya bisa dilihat di sini:

%Roomba Proyek%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal(mheal) %4/11/19 %Masalah Deskripsi: Buat rover untuk membantu manusia selama %exploration/habitation of mars. %Metode solusi: Cari bahan organik (hijau) melalui penggunaan % bumper ringan, sensor tebing, dan kamera untuk memeriksa bahan organik. Izinkan %penjelajah menavigasi medan kasar melalui penggunaan bemper, sensor %tebing, dan sensor ketinggian roda. Memungkinkan manusia untuk mengontrol rover dari %jarak aman dan mencari mineral secara manual. pilihan = {'LIFE', 'TERRAIN KASAR', 'USER CONTROL'}; %Tiga opsi dalam menu dialog Pengaturan = menu('', pilihan) jika Pengaturan>0 %Jika opsi yang dipilih meminta konfirmasi pengguna, pilihan2 = {'Ya', 'Tidak'} %Buat larik sel untuk "ya" atau "Tidak " choice Confirm = menu(['Anda memilih mode "' choice{Setting} '".'], options2) %Konfirmasi pilihan pengaturan pengguna jika Konfirmasi==1 jika Pengaturan==1 %Periksa apakah pengaturan "LIFE" dipilih i =0 while i==0 r.setLEDDigits(num2str('LIFE')) %Tampilkan 'LIFE' pada LED untuk i=1:100 r.setDriveVelocity(0.05) %Pindahkan roomba ke depan pada 0,05 m/sy = r.getCliffSensors %Ambil dan simpan nilai sensor tebing dalam struktur sel "y" l = r.getLightBumpers %Ambil dan simpan nilai benjolan ringan dalam struktur "f" jika l.kiri>100 %Periksa apakah bemper lampu kiri tertutup r.moveDistance(-0,05) %Pindahkan ruanganba ke belakang 0,05 meter r.turnAngle(20) %Putar ruanganba 20 derajat CCW img=r.getImage %Dapatkan gambar dari kamera pai rasberry di ruanganba rect = [100 0 150 150]; img = imcrop(img, rect) %crop gambar untuk fokus di tengah merah = mean(mean(img(:,:, 1))) %rata-rata intensitas merah hijau = mean(mean(img(:,:, 2))) %intensitas hijau rata-rata biru = mean(mean(img(:,:, 3))) %intensitas biru rata-rata jika hijau>merah && hijau>biru %Periksa apakah tanaman ada dalam gambar d=msgbox(['Kehidupan ditemukan! ']); %Menampilkan kotak pesan yang mengatakan "Kehidupan ditemukan!" tunggu(d); end elseif l.leftFront>100 %Cek kiri/lampu depan bumper tertutup r.moveDistance(-0.05) %Pindahkan roomba mundur 0,05 meter img=r.getImage %Dapatkan gambar dari kamera rasberry pie di roomba dan simpan di variabel 'img ' persegi = [100 0 150 150]; img = imcrop(img, rect) %crop gambar untuk fokus di tengah merah = mean(mean(img(:,:, 1))) %rata-rata intensitas merah hijau = mean(mean(img(:,:, 2))) %intensitas hijau rata-rata biru = mean(mean(img(:,:, 3))) %intensitas biru rata-rata jika hijau>merah && hijau>biru %Periksa apakah tanaman ada dalam gambar d=msgbox(['Kehidupan ditemukan! ']); %Menampilkan kotak pesan yang mengatakan "Kehidupan ditemukan!" tunggu(d); end elseif l.leftCenter>100 %Periksa apakah bumper lampu kiri/tengah tertutup r.moveDistance(-0.05) %Pindahkan roomba ke belakang 0,05 meter img=r.getImage %Dapatkan gambar dari kamera rasberry pie di roomba dan simpan di variabel 'img ' persegi = [100 0 150 150]; img = imcrop(img, rect) %crop gambar untuk fokus di tengah merah = mean(mean(img(:,:, 1))) %rata-rata intensitas merah hijau = mean(mean(img(:,:, 2))) %intensitas hijau rata-rata biru = mean(mean(img(:,:, 3))) %intensitas biru rata-rata jika hijau>merah && hijau>biru %Periksa apakah tanaman ada dalam gambar d=msgbox(['Kehidupan ditemukan! ']); %Menampilkan kotak pesan yang mengatakan "Kehidupan ditemukan!" tunggu(d); end elseif l.rightCenter>100 %Periksa apakah bumper lampu kanan/tengah tertutup r.moveDistance(-0.05)%Pindahkan roomba mundur 0,05 meter img=r.getImage %Dapatkan gambar dari kamera rasberry pie di roomba dan simpan di variabel 'img ' persegi = [100 0 150 150]; img = imcrop(img, rect) %crop gambar untuk fokus di tengah merah = mean(mean(img(:,:, 1))) %rata-rata intensitas merah hijau = mean(mean(img(:,:, 2))) %intensitas hijau rata-rata biru = mean(mean(img(:,:, 3))) %intensitas biru rata-rata jika hijau>merah && hijau>biru %Periksa apakah tanaman ada dalam gambar d=msgbox(['Kehidupan ditemukan! ']); %Menampilkan kotak pesan yang mengatakan "Kehidupan ditemukan!" tunggu(d); end elseif l.rightFront>100 %Periksa apakah bumper kanan/depan tertutup r.moveDistance(-0.05)%Pindahkan roomba ke belakang 0,05 meter img=r.getImage %Dapatkan gambar dari kamera rasberry pie di roomba dan simpan di variabel 'img ' persegi = [100 0 150 150]; img = imcrop(img, rect) %crop gambar untuk fokus di tengah merah = mean(mean(img(:,:, 1))) %rata-rata intensitas merah hijau = mean(mean(img(:,:, 2))) %intensitas hijau rata-rata biru = mean(mean(img(:,:, 3))) %intensitas biru rata-rata jika hijau>merah && hijau>biru %Periksa apakah tanaman ada dalam gambar d=msgbox(['Kehidupan ditemukan! ']); %Menampilkan kotak pesan yang mengatakan "Kehidupan ditemukan!" tunggu(d); end elseif l.kanan>100 %Periksa apakah bumper lampu kanan tertutup r.moveDistance(-0.05)%Pindah ruanganba mundur 0,05 meter r.turnAngle(-20)%Putar ruanganba 20 derajat CW img=r.getImage %Dapatkan gambar dari kamera pie rasberry di roomba dan simpan di variabel 'img' rect = [100 0 150 150]; img = imcrop(img, rect) %crop gambar untuk fokus di tengah merah = mean(mean(img(:,:, 1))) %rata-rata intensitas merah hijau = mean(mean(img(:,:, 2))) %intensitas hijau rata-rata biru = mean(mean(img(:,:, 3))) %intensitas biru rata-rata jika hijau>merah && hijau>biru %Periksa apakah tanaman ada dalam gambar d=msgbox(['Kehidupan ditemukan! ']); %Menampilkan kotak pesan yang mengatakan "Kehidupan ditemukan!" tunggu(d); end elseif y.leftFront<1500 %Periksa apakah bagian kiri/depan roomba keluar dari tebing r.moveDistance(-0.1, 0.05) %Pindahkan roomba mundur 0,1 meter pada 0,05 m/s r.turnAngle(-5) %Putar roomba 5 derajat CW elseif y.rightFront<1500 %Periksa apakah bagian kanan/depan roomba menjauhi tebing r.moveDistance(-0.1, 0.05) %Pindahkan roomba mundur 0,1 meter pada 0,05 m/s r.turnAngle(5) %Putar roomba 5 derajat CCW kalau tidak y.kiri<1000 %Periksa apakah sisi kiri roomba berada di luar 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 derajat CW elseif y.right0 %Run jika tombol ditekan jika Continue==1 i=0 %Lanjutkan mencari life else i=1 %End LIFE mode end end end end elseif Setting==2 %Periksa apakah pengaturan "ROUGH TERRAIN" dipilih i=0 while i==0 r.setLEDDigits(num2str('RGH')) %Tampilan 'Kasar' pada Layar LED untuk i=1:1000 r.setDriveVelocity(0,05) %Setel kecepatan drive roomba ke 0,05 m/sx = r.getBumpers %Mengambil dan menyimpan nilai sensor bumper dalam struktur "x" y = r.get CliffSensors %Ambil dan simpan nilai sensor tebing dalam struktur "y" jika x.kanan==1 %Periksa apakah bumper kanan ditekan r.turnAngle(10) %Putar ruanganba 10 derajat CCW jika tidak x.kiri==1 %Periksa jika kiri bumper ditekan r.turnAngle(-10) %Putar ruanganba 10 derajat CW lain jika x.depan==1 %Periksa apakah bumper depan ditekan r.turnAngle(20) %Putar ruanganba 20 derajat CCW elseif x.rightWheelDrop==1 % Periksa apakah roda kanan turun r.turnAngle(-20)%Putar ruanganba 20 derajat CW jika tidak x.leftWheelDrop==1 %Periksa apakah roda kiri turun r.turnAngle(20) %Putar ruanganba 20 derajat CCW jika tidak y.kiriDepan< 1500 %Periksa apakah bagian kiri depan roomba berada di luar tebing r.moveDistance(-0.05, 0.05) %Pindah roomba ke belakang 0,05 meter pada 0,05 m/s r.turnAngle(-5)%Putar roomba 5 derajat CW jika tidak y.kananDepan< 1500 %Periksa apakah bagian kanan depan roomba tidak berada di tebing %Periksa apakah bagian kiri o f roomba turun tebing r.moveDistance(-0.05, 0.05)%Pindah roomba mundur 0,05 meter pada 0,05 m/s r.turnAngle(-10)%Putar roomba 10 derajat CW jika tidak y.kanan0 jika Lanjutkan==1 i=0 %Lanjutkan medan kasar else i=1 %Akhiri medan kasar akhiri ujung lain %Mode Manual i=0 r.setLEDDigits(num2str('USER')) %Tampilkan 'USER' pada Tampilan LED d=msgbox(['Tombol Panah - Pindah; S - Berhenti Rover; ESC - Kontrol Pengguna Akhir; A - Cari Sumber Daya']); tunggu(d); sementara i==0 r.showCamera %Buka umpan langsung kamera pai rasberry di jendela terpisah D=getkey(1) %Retrieve key ditekan oleh pengguna, simpan nilai ASCII sebagai variabel D jika D==30 %Periksa apakah panah "atas" memiliki telah ditekan r.setDriveVelocity(0.1) %Kirim roomba maju dengan kecepatan 0,2 m/s jika D==28 %Periksa apakah panah "kiri" ditekan r.setDriveVelocity(0) %Hentikan roomba dari bergerak maju atau mundur r.turnAngle(15, 0.05)%Putar roomba 45 derajat CCW pada 0,05 m/s jika D==31 %Periksa apakah panah "bawah" ditekan r.setDriveVelocity(-0,1) %Pindahkan roomba mundur pada 0,2 m/s jika tidak D==29 % Periksa apakah panah "kanan" ditekan r.setDriveVelocity(0) %Hentikan roomba dari bergerak maju atau mundur r.turnAngle(-15, 0.05) %Putar roomba 45 derajat CW pada 0,05 m/s jika tidak D==27 %Periksa apakah tombol "esc" (escape) ditekan i=1 %Ubah nilai variabel "i" untuk keluar dari loop d=msgbox('Keluar dari "Kontrol Pengguna"') %Beri tahu pengguna bahwa mode manual sedang keluar jika tidak D== 115 %Periksa apakah tombol "s" telah ditekan r.setDriveVelocity(0) %Hentikan roomba dari maju atau mundur elseif D==97 %Periksa apakah "a" telah ditekan image = r.getImage; imwrite(image, 'image.png') W = Klasifikasi(gambar) K = mode(W) if K == 3 d=msgbox('Sumber daya ditemukan') %Tampilkan jika sumber daya persegi panjang terdeteksi waitfor(d); %Tunggu pengguna untuk menutup kotak pesan "d" elseif K == 0 d=msgbox('Not Resource:(') %Tampilkan jika sumber daya persegi tidak terdeteksi waitfor(d); %Tunggu pengguna untuk menutup kotak pesan "d" end else d=msgbox('Bukan input kunci yang valid.') %Tampilkan jika pengguna menutup menu "pilih pengaturan" waitfor(d); %Tunggu pengguna menutup kotak pesan "d" end waitfor(d); %Tunggu pengguna untuk menutup kotak pesan "d" end end end else d=msgbox('Goodbye') %Mengucapkan selamat tinggal jika opsi ditutup end waitfor(d);

Langkah 3: Pengujian

Pengujian
Pengujian

Setelah kode Anda ditulis, Anda perlu menguji Roomba Anda. Meskipun kode Anda mungkin tampak benar, banyak nilai Anda, terutama untuk warna atau bentuk, perlu diubah agar dapat mengenali objek yang Anda inginkan agar diidentifikasi oleh Roomba dengan benar.

Langkah 4: Amati Output Visual

Amati Output Visual
Amati Output Visual
Amati Output Visual
Amati Output Visual

Akan sangat jelas apakah Anda berhasil memprogram Roomba Anda berdasarkan output visualnya.

Keluaran meliputi:

  • Deteksi Bentuk: Kemampuan Roomba untuk membedakan bentuk dengan benar untuk menemukan mineral yang benar
  • Manuver Medan Kasar: Menghindari tebing atau area gelap
  • Mode Manual: Umpan langsung dan kemampuan untuk mengontrol Roomba
  • Gambar: Gambar mineral
  • Life Found!: Kotak teks MatLab yang menandakan bahwa tanaman Anda telah mengidentifikasi kehidupan organik.

Itulah akhir dari tutorial kami, nikmati penjelajahan Mars baru Anda!

Direkomendasikan: