Daftar Isi:

Proyek Mars Roomba UTK: 4 Langkah
Proyek Mars Roomba UTK: 4 Langkah

Video: Proyek Mars Roomba UTK: 4 Langkah

Video: Proyek Mars Roomba UTK: 4 Langkah
Video: DIY How to Make Amazing Robot Vacuum Cleaner 2024, November
Anonim
Proyek Mars Roomba UTK
Proyek Mars Roomba UTK
Proyek Mars Roomba UTK
Proyek Mars Roomba UTK

PENOLAKAN: INI HANYA AKAN BERFUNGSI JIKA ROOMBA DIBUAT DI A

CARA SANGAT KHUSUS, INSTRUCTABLE INI DIBUAT DAN DIMAKSUDKAN UNTUK DIGUNAKAN OLEH MAHASISWA DAN FAKULTAS UNIVERSITAS TENNESSEE

Kode ini digunakan untuk mengatur Roomba untuk menjalankan kode yang ditulis dan disimpan secara lokal di MATLAB. Ini tidak akan berfungsi jika Anda tidak dapat memperoleh perpustakaan yang diperlukan dari situs web University of Tennessee. Jika Anda memiliki perpustakaan maka Anda dapat menggunakannya untuk memprogram Roomba Anda sendiri menggunakan fungsi di perpustakaan. Instruksi ini mengajarkan Anda cara menginstal perpustakaan, membuat folder untuk semua kode, dan cara membuat kode dan menggunakan program yang telah kami sediakan di bawah.

Bahan yang Diperlukan:

· Roomba

· MATLAB

· Raspberry Pi dan Pi Kamera

Langkah 1: Mendapatkan Perpustakaan

Di situs web teknik ada kotak alat/pustaka yang disediakan, unduh dan letakkan di folder baru. Folder ini harus berisi semua file pekerjaan proyek karena, fungsi apa pun yang digunakan dalam program yang Anda buat harus merujuk ke perpustakaan. Setelah Anda melakukan ini, Anda dapat mulai mengerjakan program Anda

Langkah 2: Menulis Program

Cukup banyak fungsi yang dapat digunakan dalam program, fungsi-fungsi tersebut dapat diakses dengan menggunakan perintah "doc roomba". Dengan menggunakan fungsi-fungsi ini, Anda dapat mengontrol Roomba dengan banyak cara berbeda. Kode yang diberikan di bawah ini menggunakan sensor bump, sensor light bar, kamera, dan sensor tebing dengan cara yang berbeda untuk membuat mars rover. Kami menggunakan bump sensor untuk mendeteksi ketika Roomba menabrak objek, ketika ini terjadi robot akan mundur, berbalik, dan terus bergerak. Sebelum Roomba menabrak objek, light bar akan mendeteksi objek dan memperlambat Roomba sehingga ketika menabrak objek untuk mengaktifkan bump sensor Roomba akan lebih sedikit rusak/terkena benturan. Kamera mencari air atau lahar di permukaan, jika tidak ditemukan cairan maka robot akan melanjutkan pencarian, jika ada air yang ditemukan maka robot akan mengirimkan pesan kepada operator. Sensor tebing dirancang untuk menghentikan robot jika mendekati tebing. Jika robot merasakan tebing, ia akan mundur dan berbalik untuk menghindari jatuh.

Langkah 3: Kode

Salin dan tempel ini ke file MATLAB yang terletak di folder yang sama dengan perpustakaan

functionMainRoombaFile(r)

r.setDriveVelocity(0.1, 0.1)

while true % Infinte while loop untuk menjaga kode tetap berjalan

dontFall = cliffCheck(r) % Menetapkan variabel 'dontFall' ke fungsi 'cliffCheck'

if dontFall % jika pernyataan untuk melanjutkan dalam kode setelah 'cliffCheck' selesai

r.setDriveVelocity(0.1, 0.1) % Membuat Roomba tetap bergerak setelah 'cliffCheck' selesai

end % berakhir 'dontFall' jika pernyataan

bumper=bumpcheck(r) % Menetapkan variabel 'bumper' ke fungsi 'bumpcheck'

jika bumper % jika pernyataan untuk melanjutkan dalam kode setelah 'bumpcheck' selesai

r.setDriveVelocity(0.1, 0.1) % Menjaga Roomba tetap bergerak setelah 'bumpcheck' selesai

end % berakhir 'bumper' jika pernyataan

liquids = LiquidCheck(r) % Menetapkan variabel 'liquids' ke fungsi 'LiquidCheck'

if liquids % if statement untuk melanjutkan dalam kode setelah 'LiquidCheck' selesai

r.setDriveVelocity(0.1, 0.1) % Membuat Roomba tetap bergerak setelah 'LiquidCheck' selesai

end % mengakhiri 'cairan' jika pernyataan

lightbumper=lightcheck(r) % Menetapkan variabel 'lightbumper' ke fungsi 'lightcheck'

pause(0.1) % Jeda sebentar untuk menghindari pengulangan pengulangan terus menerus

akhir % berakhir tak terbatas sementara loop

akhir % berakhir fungsi

function bumper=bumpcheck(r) % Membuat fungsi 'bumpcheck'

bumpdata= r.getBumpers % Menetapkan semua data dari bumper ke variabel 'bumpdata'

bumper = bumpdata.kanan || bumpdata.kiri || bumpdata.front % Membuat variabel tersimpan, 'bumper', untuk bemper yang berbeda

if bumpdata.right>0 % Jika pernyataan menyebabkan fungsi roomba yang berbeda terjadi jika Bumper terbentur

r.stop % Menghentikan Roomba

r.moveDistance(-0.3, 0.2) % Membalikkan Roomba 0.3m

r.turnAngle(90, 0.5) % Memutar Roomba 90 derajat secepat mungkin

akhir

jika bumpdata.front>0

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(randi(270), 0.5) % Memutar Roomba pada interval acak antara 0 dan 270 derajat secepat mungkin

akhir

jika bumpdata.left>0

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(-90, 0.5) % Memutar Roomba -90 derajat secepat mungkin

akhir

akhir

function lightbumper=lightcheck(r) % Membuat fungsi 'lightcheck'

lightdata= r.getLightBumpers % Menetapkan semua data dari sensor light bump ke variabel 'lightdata'

lightbumper = lightdata.kiri || lightdata.kanan || lightdata.rightCenter || lightdata.leftCenter % Membuat variabel tersimpan, 'lightbumper', untuk bemper lampu yang berbeda

if lightbumper % Jika pernyataan untuk memanggil data lightbumper dari atas

if lightdata.left>10 % Jika pernyataan menyebabkan fungsi roomba yang berbeda terjadi jika bumper lampu merasakan lebih besar dari 10 nilai

r.setDriveVelocity(0.05, 0.05) % Memperlambat roomba untuk bersiap menghadapi benturan

akhir % berakhir inisial jika pernyataan

jika lightdata.rightCenter>10

r.setDriveVelocity(0.05, 0.05)

akhir

jika lightdata.right>10

r.setDriveVelocity(0.05, 0.05)

akhir

jika lightdata.leftCenter>10

r.setDriveVelocity(0.05, 0.05)

akhir

end % mengakhiri 'lightbumper' jika pernyataan

end %ends fungsi lightcheck

function dontFall = cliffCheck(r) % Membuat fungsi 'cliffCheck'

data = r.getCliffSensors; % Menetapkan semua data dari sensor tebing ke variabel 'data'

dontFall = data.kiri<1020 || data.kiriDepan<1020 || data.rightFront<1020 || data.right<1020 % Membuat variabel tersimpan, 'dontFall', untuk sensor tebing yang berbeda

if dontFall % Jika pernyataan untuk memanggil data sensor tebing dari atas

if data.left < 1010 % Jika pernyataan yang menyebabkan perbedaan fungsi roomba terjadi jika sensor tebing mendeteksi nilai kurang dari 1010

r.stop

r.moveDistance(-0.2, 0.2) % Membalikkan Roomba 0.2m

r.turnAngle(-90, 0.5) % Memutar Roomba -90 derajat secepat mungkin

elseif data.kiriDepan < 1010

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(90, 0.5) % Memutar Roomba 90 derajat secepat mungkin

elseif data.rightFront < 1010

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(90, 0.5) % Memutar Roomba 90 derajat secepat mungkin

elseif data.kanan < 1010

r.stop

r.moveDistance(-0.3, 0.2)

r.turnAngle(90, 0.5) % Memutar Roomba 90 derajat secepat mungkin

akhir

akhir

akhir

function liquids = LiquidCheck(r) % Membuat fungsi 'LiquidCheck'

sementara true %mulai loop tak terbatas untuk kalibrasi

img = r.getGambar; % membaca kamera dari robot

image(img) % menunjukkan gambar di jendela gambar

red_mean = mean(mean(img(200, 150, 1)))% membaca jumlah rata-rata piksel merah

blue_mean = mean(mean(img(200, 150, 3)))% membaca jumlah rata-rata piksel biru

cairan = red_mean || blue_mean % Membuat variabel tersimpan, 'cairan', untuk variabel warna yang berbeda

if liquids % Pernyataan if untuk memanggil data gambar dari atas

if red_mean>170 % Jika pernyataan yang menyebabkan fungsi roomba berbeda terjadi jika kamera melihat warna merah rata-rata lebih besar dari 170

r.stop % berhenti roomba

r.setLEDCenterColor(255) % mengatur lingkaran menjadi warna merah

r.setLEDDigits(); % bersihkan tampilan

f = waitbar(0, '*PESAN MASUK*'); % membuat bilah tunggu untuk memuat pesan

r.setLEDDigits('PANAS'); % menyetel tampilan LED ke output 'PANAS'

pause(0.5) %Brief Pause untuk membaca informasi yang ditampilkan

r.setLEDDigits('LAVA'); % mengatur tampilan LED ke output 'LAVA'

jeda(0.5)

waitbar(.33, f, '*PESAN MASUK*'); %membuat peningkatan di bilah tunggu

r.setLEDDigits('PANAS');

jeda(0.5)

r.setLEDDigits('LAVA');

jeda(0.5)

waitbar(.67, f, '*PESAN MASUK*'); % membuat peningkatan di bilah tunggu

r.setLEDDigits('PANAS');

jeda(0.5)

r.setLEDDigits('LAVA');

waitbar(1, f, '*PESAN MASUK*'); %menyelesaikan bilah tunggu

jeda(1)

tutup(f) %menutup bilah tunggu

r.setLEDDigits(); % membersihkan tampilan LED

tutup semua % Menutup semua jendela sebelumnya

axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Membersihkan jendela plot dari sumbu dan bagan

y=0,5; % mengatur posisi y dari teks di jendela ploting

x=0,06; % mengatur posisi-x teks di jendela plot

title('FROM MARS ROOMBA', 'fontsize', 32) % Menambahkan judul ke jendela plot

quadeqtxt = 'BAHAYA LAVA'; % Mengatur variabel 'quadeqtxt' ke output 0

teks(x, y, quadeqtxt, 'penerjemah', 'lateks', 'ukuran font', 36); % menampilkan teks quadeq di jendela plot

r.moveDistance(-0.2, 0.2) %membalik ruanganba 0.2m

r.turnAngle(180, 0.5) %mengubah ruangan 180 derajat secepat mungkin

r.setLEDCenterColor(128, 128); % menyetel LED pusat roomba menjadi oranye

tutup semua %menutup sisa jendela yang terbuka

elseif blue_mean>175 % Jika pernyataan yang menyebabkan perbedaan fungsi roomba terjadi jika kamera melihat warna biru rata-rata lebih besar dari 175

r.stop % berhenti roomba

r.setLEDCenterColor(255) % mengatur lingkaran menjadi warna merah

r.setLEDDigits(); % bersihkan tampilan

f = waitbar(0, '*PESAN MASUK*'); % membuat bilah tunggu untuk memuat pesan

r.setLEDDigits('LIHAT'); % mengatur tampilan LED ke output 'LOOK'

pause(0.5) %Brief Pause untuk membaca informasi yang ditampilkan

r.setLEDDigits('WATR'); % mengatur tampilan LED ke output 'WATR'

jeda(0.5)

waitbar(.33, f, '*PESAN MASUK*'); %membuat peningkatan di bilah tunggu

r.setLEDDigits('LIHAT');

jeda(0.5)

r.setLEDDigits('WATR');

jeda(0.5)

waitbar(.67, f, '*PESAN MASUK*'); % membuat peningkatan di bilah tunggu

r.setLEDDigits('LIHAT');

jeda(0.5)

r.setLEDDigits('WATR');

waitbar(1, f, '*PESAN MASUK*'); %menyelesaikan bilah tunggu

jeda(1)

tutup(f) %menutup bilah tunggu

r.setLEDDigits(); % membersihkan tampilan LED

tutup semua % Menutup semua jendela sebelumnya

axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Membersihkan jendela plot dari sumbu dan bagan

y=0,5; % mengatur posisi y dari teks di jendela ploting

x=0,06; % mengatur posisi-x teks di jendela plot

title('FROM MARS ROOMBA', 'fontsize', 32) % Menambahkan judul ke jendela plot

quadeqtxt = 'MENEMUKAN AIR'; % Mengatur variabel 'quadeqtxt' ke output 0

teks(x, y, quadeqtxt, 'penerjemah', 'lateks', 'ukuran font', 36); % menampilkan teks quadeq di jendela plot

r.moveDistance(-0.2, 0.2) %membalik ruanganba 0.2m

r.turnAngle(180, 0.5) %mengubah roomba 180 derajat secepat mungkin

r.setLEDCenterColor(128, 128); % menyetel LED pusat roomba menjadi oranye

tutup semua %menutup sisa jendela yang terbuka

end %end 'red_mean' jika pernyataan

end %end 'cairan' jika pernyataan

end % menutup loop sementara tak terbatas

end % berakhir fungsi 'LiquidCheck'

Langkah 4: Menjalankan Kode

Setelah Anda menyalin dan menempelkan kode ke MATLAB, Anda harus terhubung ke Roomba. Setelah Roomba terhubung, Anda harus memberi nama variabel r. Fungsi menggunakan variabel r ketika mengacu pada Roomba, sehingga Roomba harus didefinisikan sebagai variabel r. Setelah menjalankan kode, Roomba harus berjalan seperti yang diinstruksikan.

Direkomendasikan: