Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
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.