Daftar Isi:
- Langkah 1: Mendapatkan Perpustakaan
- Langkah 2: Menulis Program
- Langkah 3: Kode
- Langkah 4: Menjalankan Kode
Video: Proyek Mars Roomba UTK: 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
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:
Cara Membuat RADAR Menggunakan Arduino untuk Proyek Sains - Proyek Arduino Terbaik: 5 Langkah
Cara Membuat RADAR Menggunakan Arduino untuk Proyek Sains | Proyek Arduino Terbaik: Hai teman-teman, dalam instruksi ini saya akan menunjukkan kepada Anda bagaimana membuat sistem radar luar biasa yang dibangun menggunakan arduino nano, proyek ini sangat ideal untuk proyek sains dan Anda dapat dengan mudah membuatnya dengan investasi dan peluang yang sangat sedikit jika memenangkan hadiah besar untuk
Proyek Robot UTK 2017: 3 Langkah
Proyek Robot UTK 2017: Misi: Tim insinyur kami telah direkrut oleh Froogle, sebuah yayasan Nirlaba untuk pengembangan teknologi sumber terbuka, untuk mengembangkan tim "rover" Pembantu Mars yang Membantu Mars yang inovatif. adalah roomba yang kami kodekan untuk menjalankan serangkaian
10 Proyek Dasar Arduino untuk Pemula! Buat Setidaknya 15 Proyek Dengan Satu Papan!: 6 Langkah
10 Proyek Arduino Dasar untuk Pemula! Buat Setidaknya 15 Proyek Dengan Satu Papan!: Proyek Arduino & Papan Tutorial; Termasuk 10 proyek Arduino dasar. Semua kode sumber, file Gerber, dan lainnya. Tidak ada SMD! Solder mudah untuk semua orang. Komponen yang mudah dilepas dan diganti. Anda dapat membuat setidaknya 15 proyek dengan satu
Proyek UTK EF 230 MarsRoomba Musim Gugur 2018: 5 Langkah
Proyek UTK EF 230 MarsRoomba Musim Gugur 2018: Saat ini, penjelajah Mars digunakan untuk mengumpulkan data di permukaan Mars melalui berbagai metode, hingga akhir untuk mempelajari lebih lanjut tentang potensi planet ini untuk kehidupan mikroba. Rovers terutama menggunakan alat fotografi dan analisis tanah untuk
Pembakar Bertenaga USB! Proyek Ini Dapat Membakar Melalui Plastik / Kayu / Kertas (Proyek yang menyenangkan Juga Harus Kayu yang Sangat Halus): 3 Langkah
Pembakar Bertenaga USB! Proyek Ini Dapat Membakar Plastik/ Kayu / Kertas (Proyek Menyenangkan Juga Harus Kayu Sangat Halus): JANGAN MEMBUAT INI MENGGUNAKAN USB!!!! saya menemukan bahwa itu dapat merusak komputer Anda dari semua komentar. komputer saya baik-baik saja tho. Gunakan pengisi daya telepon 600ma 5v. saya menggunakan ini dan berfungsi dengan baik dan tidak ada yang rusak jika Anda menggunakan steker pengaman untuk menghentikan daya