Isi kandungan:

Projek Mars Roomba UTK: 4 Langkah
Projek Mars Roomba UTK: 4 Langkah

Video: Projek Mars Roomba UTK: 4 Langkah

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

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: