Isi kandungan:
- Langkah 1: Mendapatkan Perpustakaan
- Langkah 2: Menulis Program
- Langkah 3: Kod
- Langkah 4: Menjalankan Kod
Video: Projek Mars Roomba UTK: 4 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
PENAFIAN: INI HANYA AKAN BEKERJA JIKA ROOMBA DITETAPKAN DI A
CARA YANG SANGAT KHUSUS, INSTRUKTELI INI DIBUAT DAN DIHASILKAN UNTUK DIGUNAKAN OLEH UNIVERSITI PELAJAR TENNESSEE DAN FAKULTI
Kod ini digunakan untuk menyiapkan Roomba untuk menjalankan kod yang ditulis dan disimpan secara tempatan di MATLAB. Ini tidak akan berjaya jika anda tidak dapat memperoleh perpustakaan yang diperlukan dari laman web University of Tennessee. Sekiranya anda mempunyai perpustakaan maka anda dapat menggunakannya untuk memprogram Roomba anda sendiri menggunakan fungsi di perpustakaan. Instructable ini mengajar anda cara memasang perpustakaan, membuat folder untuk semua kod, dan bagaimana membuat kod dan menggunakan program yang telah kami sediakan di bawah.
Bahan yang diperlukan:
· Roomba
· MATLAB
· Kamera Raspberry Pi dan Pi
Langkah 1: Mendapatkan Perpustakaan
Di laman web kejuruteraan ada kotak alat / perpustakaan yang disediakan, muat turun dan letakkan ke folder baru. Folder ini mesti mengandungi semua fail kerja projek kerana, setiap fungsi yang digunakan dalam program yang anda buat perlu merujuk ke perpustakaan. Selepas anda melakukan ini, anda boleh mula mengerjakan program anda
Langkah 2: Menulis Program
Ada beberapa fungsi yang dapat digunakan dalam program ini, fungsi ini dapat diakses dengan menggunakan perintah "doc roomba". Dengan menggunakan fungsi-fungsi ini, anda dapat mengendalikan Roomba anda dengan pelbagai cara. Kod yang diberikan di bawah menggunakan sensor bump, sensor bar cahaya, kamera, dan sensor tebing dengan cara yang berbeza untuk membuat mars rover. Kami menggunakan sensor bump untuk mengesan kapan Roomba memukul objek, ketika ini terjadi robot akan mundur, berbalik, dan terus bergerak. Sebelum Roomba memukul objek, bar cahaya akan mengesan objek dan melambatkan Roomba sehingga apabila ia menabrak objek untuk mengaktifkan sensor bump, Roomba akan kurang rusak / terkena hentaman. Kamera mencari air atau lava di permukaan, jika tidak ada cecair yang dijumpai maka robot akan terus mencari, jika ada sedikit air yang dijumpai maka robot akan memberi pesanan kepada pengendali. Sensor tebing dirancang untuk menghentikan robot jika menghampiri tebing. Sekiranya robot merasakan tebing, ia akan terbalik dan berpusing untuk mengelakkan jatuh.
Langkah 3: Kod
Salin dan tampal ini ke fail MATLAB yang terletak di folder yang sama dengan perpustakaan
fungsiMainRoombaFile (r)
r.setDriveVelocity (0.1, 0.1)
sementara benar% Infinte while loop untuk memastikan kod berjalan
dontFall = cliffCheck (r)% Menetapkan pemboleh ubah 'dontFall' ke fungsi 'cliffCheck'
if dontFall% if statement untuk meneruskan kod setelah 'cliffCheck' selesai
r.setDriveVelocity (0.1, 0.1)% Menjaga Roomba bergerak setelah 'cliffCheck' selesai
akhir% berakhir 'dontFall' jika penyataan
bumper = bumpcheck (r)% Menetapkan pemboleh ubah 'bumper' ke fungsi 'bumpcheck'
if bumper% if statement untuk meneruskan kod setelah 'bumpcheck' selesai
r.setDriveVelocity (0.1, 0.1)% Menjaga Roomba bergerak setelah 'bumpcheck' selesai
end% berakhir 'bumper' jika penyataan
cecair = LiquidCheck (r)% Menetapkan 'cecair' pemboleh ubah kepada fungsi 'LiquidCheck'
jika cecair% jika penyataan untuk meneruskan kod setelah 'LiquidCheck' selesai
r.setDriveVelocity (0.1, 0.1)% Menjaga Roomba bergerak setelah 'LiquidCheck' selesai
akhir% berakhir 'cecair' jika penyataan
lightbumper = lightcheck (r)% Menetapkan pemboleh ubah 'lightbumper' ke fungsi 'lightcheck'
jeda (0.1)% Jeda sebentar untuk mengelakkan lelaran gelung berterusan
akhir% berakhir tanpa had semasa gelung
fungsi akhir% berakhir
fungsi bumper = bumpcheck (r)% Membuat fungsi 'bumpcheck'
bumpdata = r.getBumpers% Menugaskan semua data dari bumper ke pemboleh ubah 'bumpdata'
bumper = bumpdata.right || bumpdata.kiri || bumpdata.front% Membuat pemboleh ubah yang tersimpan, 'bumper', untuk bumper yang berbeza
jika bumpdata.right> 0% Jika pernyataan menyebabkan berlainan fungsi roomba berlaku jika Bumper dibongkok
r.stop% Menghentikan Roomba
r.moveDistance (-0.3, 0.2)% Membalikkan Roomba 0.3m
r.turnAngle (90, 0.5)% Memutar Roomba 90 darjah secepat mungkin
akhir
jika bumpdata.front> 0
r.berhenti
r.moveDistance (-0.3, 0.2)
r.turnAngle (randi (270), 0.5)% Memutar Roomba pada selang rawak antara 0 dan 270 darjah secepat mungkin
akhir
jika bumpdata.left> 0
r.berhenti
r.moveDistance (-0.3, 0.2)
r.turnAngle (-90, 0.5)% Putar Roomba -90 darjah secepat mungkin
akhir
akhir
function lightbumper = lightcheck (r)% Membuat fungsi 'lightcheck'
lightdata = r.getLightBumpers% Menetapkan semua data dari sensor bump cahaya ke 'lightdata' pemboleh ubah
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter% Membuat pemboleh ubah yang tersimpan, 'lightbumper', untuk bumper cahaya yang berbeza
if lightbumper% If statement untuk memanggil lightbumper data dari atas
if lightdata.left> 10% Jika pernyataan menyebabkan berlainan fungsi roomba berlaku jika bumper cahaya merasakan lebih dari 10 nilai
r.setDriveVelocity (0.05, 0.05)% Melambatkan roomba untuk bersiap sedia
akhir% berakhir awal jika penyataan
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
akhir% berakhir 'lightbumper' jika penyataan
end% mengakhiri fungsi pemeriksaan cahaya
fungsi dontFall = cliffCheck (r)% Membuat fungsi 'cliffCheck'
data = r.getCliffSensors; % Menugaskan semua data dari tebing ke 'data' pemboleh ubah
dontFall = data.left <1020 || data.leftFront <1020 || data.rightFront <1020 || data.right <1020% Membuat pemboleh ubah yang tersimpan, 'dontFall', untuk sensor tebing yang berbeza
if dontFall% If pernyataan untuk memanggil data sensor tebing dari atas
if data.left <1010% Jika pernyataan menyebabkan berlakunya fungsi roomba yang berlainan jika sensor tebing merasakan nilai kurang dari 1010
r.berhenti
r.moveDistance (-0.2, 0.2)% Pembalikan Roomba 0.2m
r.turnAngle (-90, 0.5)% Putar Roomba -90 darjah secepat mungkin
otherif data.leftFront <1010
r.berhenti
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5)% Memutar Roomba 90 darjah secepat mungkin
otherif data.rightFront <1010
r.berhenti
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5)% Memutar Roomba 90 darjah secepat mungkin
otherif data.right <1010
r.berhenti
r.moveDistance (-0.3, 0.2)
r.turnAngle (90, 0.5)% Memutar Roomba 90 darjah secepat mungkin
akhir
akhir
akhir
fungsi cecair = LiquidCheck (r)% Membuat fungsi 'LiquidCheck'
sementara benar% memulakan gelung tak terhingga untuk menentukur
img = r.getImage; % membaca kamera dari robot
gambar (img)% menunjukkan gambar di tetingkap gambar
red_mean = mean (mean (img (200, 150, 1)))% membaca jumlah min piksel merah
blue_mean = mean (mean (img (200, 150, 3)))% membaca jumlah min piksel biru
cecair = red_mean || blue_mean% Membuat pemboleh ubah yang tersimpan, 'cecair', untuk pemboleh ubah warna yang berbeza
jika cecair% Jika penyataan untuk memanggil data gambar dari atas
jika red_mean> 170% Jika pernyataan menyebabkan berlainan fungsi roomba jika kamera melihat warna merah rata-rata lebih besar dari 170
r.stop% berhenti roomba
r.setLEDCenterColor (255)% menetapkan bulatan kepada warna merah
r.setLEDDigits (); % kosongkan paparan
f = bar tunggu (0, '* PESAN PENDAPATAN *'); % membuat bar tunggu untuk memuatkan mesej
r.setLEDDigits ('PANAS'); % menetapkan paparan LED ke output 'PANAS'
berhenti sebentar (0.5)% Jeda Ringkas untuk membaca maklumat yang dilunaskan
r.setLEDDigits ('LAVA'); % menetapkan paparan LED ke output 'LAVA'
berhenti sebentar (0.5)
bar tunggu (.33, f, '* PESAN INCOMING *'); % membuat peningkatan pada bar tunggu
r.setLEDDigits ('PANAS');
berhenti sebentar (0.5)
r.setLEDDigits ('LAVA');
berhenti sebentar (0.5)
bar tunggu (.67, f, '* PESAN INCOMING *'); % membuat peningkatan pada bar tunggu
r.setLEDDigits ('PANAS');
berhenti sebentar (0.5)
r.setLEDDigits ('LAVA');
bar tunggu (1, f, '* PESAN INCOMING *'); % melengkapkan bar menunggu
berhenti seketika (1)
tutup (f)% menutup bar tunggu
r.setLEDDigits (); % membersihkan paparan LED
tutup semua% Menutup semua tetingkap sebelumnya
axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none')% Kosongkan tetingkap plot paksi dan carta
y = 0.5; % menetapkan kedudukan-y teks di tetingkap plot
x = 0.06; % menetapkan kedudukan-x teks di tetingkap plot
tajuk ('FROM MARS ROOMBA', 'fontsize', 32)% Menambah tajuk pada tetingkap plot
quadeqtxt = 'DANGER LAVA'; % Menetapkan pemboleh ubah 'quadeqtxt' ke output 0
teks (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % memaparkan teks quadeq di tetingkap plot
r.moveDistance (-0.2, 0.2)% membalikkan roomba 0.2m
r.turnAngle (180, 0.5)% menjadikan ruang bilik 180 darjah secepat mungkin
r.setLEDCenterColor (128, 128); % menetapkan LED tengah roomba menjadi oren
tutup semua% menutup baki tetingkap terbuka
elseif blue_mean> 175% Jika pernyataan menyebabkan berlainan fungsi roomba jika kamera melihat warna biru rata-rata lebih besar dari 175
r.stop% berhenti roomba
r.setLEDCenterColor (255)% menetapkan bulatan menjadi warna merah
r.setLEDDigits (); % kosongkan paparan
f = bar tunggu (0, '* PESAN PENDAPATAN *'); % membuat bar tunggu untuk memuatkan mesej
r.setLEDDigits ('LIHAT'); % menetapkan paparan LED ke output 'LIHAT'
berhenti sebentar (0.5)% Jeda Ringkas untuk membaca maklumat yang dilunaskan
r.setLEDDigits ('WATR'); % menetapkan paparan LED ke output 'WATR'
berhenti sebentar (0.5)
bar tunggu (.33, f, '* PESAN INCOMING *'); % membuat peningkatan pada bar tunggu
r.setLEDDigits ('LIHAT');
berhenti sebentar (0.5)
r.setLEDDigits ('WATR');
berhenti sebentar (0.5)
bar tunggu (.67, f, '* PESAN INCOMING *'); % membuat peningkatan pada bar tunggu
r.setLEDDigits ('LIHAT');
berhenti sebentar (0.5)
r.setLEDDigits ('WATR');
bar tunggu (1, f, '* PESAN INCOMING *'); % melengkapkan bar tunggu
berhenti seketika (1)
tutup (f)% menutup bar tunggu
r.setLEDDigits (); % membersihkan paparan LED
tutup semua% Menutup semua tetingkap sebelumnya
axes ('Color', 'none', 'XColor', 'none', 'YColor', 'none')% Kosongkan tetingkap plot paksi dan carta
y = 0.5; % menetapkan kedudukan-y teks di tetingkap plot
x = 0.06; % menetapkan kedudukan-x teks di tetingkap plot
tajuk ('FROM MARS ROOMBA', 'fontsize', 32)% Menambah tajuk pada tetingkap plot
quadeqtxt = 'AIR YANG DITEMUI'; % Menetapkan pemboleh ubah 'quadeqtxt' ke output 0
teks (x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % memaparkan teks quadeq di tetingkap plot
r.moveDistance (-0.2, 0.2)% membalikkan roomba 0.2m
r.turnAngle (180, 0.5)% menjadikan ruang bilik 180 darjah secepat mungkin
r.setLEDCenterColor (128, 128); % menetapkan LED pusat bilik ke oren
tutup semua% menutup baki tetingkap terbuka
akhir% berakhir 'red_mean' jika penyataan
akhir% berakhir 'cecair' jika penyataan
akhir% menutup tanpa putaran semasa gelung
fungsi akhir% berakhir 'LiquidCheck'
Langkah 4: Menjalankan Kod
Selepas anda menyalin dan menampal kod ke dalam MATLAB, anda mesti menyambung ke Roomba. Setelah Roomba disambungkan, anda mesti menamakan pemboleh ubah r. Fungsi menggunakan pemboleh ubah r ketika merujuk pada Roomba, jadi Roomba mesti didefinisikan sebagai pemboleh ubah r. Setelah menjalankan kod, Roomba harus berjalan seperti yang diarahkan.
Disyorkan:
Mengubah Roomba Anda menjadi Mars Rover: 5 Langkah
Mengubah Roomba Anda menjadi Mars Rover:
Cara Membuat RADAR Menggunakan Arduino untuk Projek Sains - Projek Arduino Terbaik: 5 Langkah
Cara Membuat RADAR Menggunakan Arduino untuk Projek Sains | Projek Arduino Terbaik: Hai rakan-rakan, dalam pengajaran ini saya akan menunjukkan kepada anda bagaimana membuat sistem radar yang menakjubkan yang dibina menggunakan arduino nano projek ini sangat sesuai untuk projek sains dan anda boleh membuatnya dengan pelaburan dan peluang yang sangat rendah jika memenangi hadiah adalah bagus untuk
Projek Robot UTK 2017: 3 Langkah
Robot Project UTK 2017: Misi: Pasukan jurutera kami telah disewa oleh Froogle, yayasan Nonprofit untuk pengembangan teknologi sumber terbuka, untuk membangunkan pasukan Human Rusting Mars Rover yang inovatif. &Quot; rover " adalah roomba yang kami kodkan untuk menjalankan siri
10 Projek Arduino Asas untuk Pemula! Buat sekurang-kurangnya 15 Projek Dengan Papan Tunggal !: 6 Langkah
10 Projek Arduino Asas untuk Pemula! Buat sekurang-kurangnya 15 Projek Dengan Papan Tunggal !: Projek Arduino & Lembaga Tutorial; Termasuk 10 projek asas Arduino. Semua kod sumber, fail Gerber dan banyak lagi. Tiada SMD! Pematerian mudah untuk semua orang. Komponen yang mudah ditanggalkan dan diganti. Anda boleh membuat sekurang-kurangnya 15 projek dengan satu
Pembakar Bertenaga USB! Projek ini Boleh Membakar Melalui Plastik / Kayu / Kertas (Projek yang menyeronokkan Juga Harus Kayu Sangat Baik): 3 Langkah
Pembakar Bertenaga USB! Projek ini Boleh Membakar Melalui Plastik / Kayu / Kertas (Projek yang Menyeronokkan Juga Harus Kayu Sangat Baik): JANGAN JADIKAN MENGGUNAKAN USB INI !!!! saya mendapat tahu bahawa ia boleh merosakkan komputer anda dari semua komen. komputer saya baik-baik saja. Gunakan pengecas telefon 600ma 5v. Saya menggunakan ini dan berfungsi dengan baik dan tidak ada yang boleh rosak jika anda menggunakan palam keselamatan untuk menghentikan kuasa