Isi kandungan:

UTK EF 230 MarsRoomba Project Fall 2018: 5 Langkah
UTK EF 230 MarsRoomba Project Fall 2018: 5 Langkah

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 Langkah

Video: UTK EF 230 MarsRoomba Project Fall 2018: 5 Langkah
Video: UTK - EF 230 Autonomous Vehicle Project 2024, November
Anonim
UTK EF 230 MarsRoomba Project Fall 2018
UTK EF 230 MarsRoomba Project Fall 2018

Pada masa ini, rover Mars digunakan untuk mengumpulkan data di permukaan Mars melalui pelbagai kaedah, hingga akhir mempelajari lebih lanjut mengenai potensi planet ini untuk kehidupan mikroba. Rover terutamanya menggunakan alat fotografi dan analisis tanah untuk pengumpulan data, tetapi rover juga termasuk instrumen navigasi, pengesan radiasi, sensor atmosfera, dan laser untuk pengewapan sampel batu. Matlamat misi rover 2020 yang dirancang kebanyakannya sama, tetapi dengan tugas khas untuk "mengumpulkan sampel tanah dan batu dan menyimpannya di permukaan untuk kemungkinan kembali ke Bumi oleh misi masa depan," menurut NASA.

Namun, di bawah premis bahawa peninjau masa depan akan digunakan untuk bantuan manusia, pasukan kami mempertimbangkan aspek apa yang dapat dipantau oleh rover. Kami sampai pada kesimpulan bahawa sekiranya keadaan darurat membuat seseorang angkasawan tidak sedarkan diri dengan sokongan dan peralatan hidup yang gagal, penumpang kami dapat berfungsi sebagai lampu isyarat bergerak dengan memperhatikan bahawa angkasawan yang diikuti itu tidak bergerak dan menyampaikan mesej kesusahan. Untuk mengikuti manusia dan menentukan pergerakan, pemandu akan mengambil input seperti warna kasut manusia dan pergerakannya. Input lain yang perlu dipertimbangkan adalah bahawa ia harus mengingat jalannya untuk menyampaikan isyarat bahaya sekiranya berlaku kecemasan. Pelancong kami memenuhi keperluan di Marikh kerana percubaan misi yang mahal di wilayah asing seperti itu memerlukan banyak lapisan peti keselamatan, dan sekiranya angkasawan tidak dapat mendapatkan bantuan mereka sendiri kerana tidak berfungsi atau tidak sedarkan diri, penumpang dapat memberi amaran kepada orang lain.

Instructable ini dirancang untuk membantu pembaca dalam memprogram Roomba untuk berjaya mengikuti "angkasawan" dan untuk mengirim isyarat bahaya jika berlaku.

Langkah 1: Bahan Yang Diperlukan

Bahan Yang Diperlukan
Bahan Yang Diperlukan

1) Komputer / komputer riba yang boleh diakses oleh internet

2) MATLAB_R2018a

3) Muat turun Roomba dan Roomba

Langkah 2: Persediaan / Muat turun

Persediaan / Muat turun
Persediaan / Muat turun

Jalankan skrip ini dalam MATLAB untuk memuat turun perisian yang diperlukan untuk mengakses Roomba (disimpan dalam failnya sendiri dalam folder projek)

Bantuan Tambahan:

% Program pemasangan untuk Projek EF 230 Roomba% Kemas kini terakhir: 13 September 2017 (Memperbaiki masalah keselamatan yang berkaitan dengan pelayan https dan amaran penghapusan fail yang dikeluarkan sekiranya berlaku kesilapan) fungsi roombaInstall clc; % senarai fail untuk memasang fail = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % lokasi untuk dipasang dari options = weboptions ('CertificateFilename', ''); % suruh untuk mengabaikan pelayan keperluan sijil = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba Install / Update'; % tujuan paparan dan dapatkan prompt pengesahan = {'Program ini akan memuat turun fail EF 230 Roomba ini:' '' strjoin (files, '') '' '' ke folder ini: '' 'cd' '' Adakah anda mahu meneruskan? '}; bip; yn = questdlg (prompt,… dlgTitle,… 'Ya', 'Tidak', 'Ya');

jika ~ strcmp (yn, 'Ya'), kembali; akhir

% dapatkan senarai fail yang ada_files = files yang ada (cellfun (@exist, files)> 0); if ~ isempty (sedia ada_files)% pastikan betul-betul baik untuk menggantinya prompt = {'Anda mengganti fail ini:' '' strjoin (υπάρχον_files, '') '' 'OK untuk diganti?' }; bip; yn = questdlg (prompt,… dlgTitle,… 'Ya', 'Tidak', 'Ya'); jika ~ strcmp (yn, 'Ya'), kembali; hujung akhir

% memuat turun fail cnt = 0; untuk i = 1: panjang (fail) f = fail {i}; disp (['Memuat turun' f]); cuba url = [pelayan f]; penyimpanan laman web (f, url, pilihan); % menambahkan pilihan untuk mengelakkan kesalahan keselamatan cnt = cnt + 1; catch disp (['Kesalahan memuat turun' f]); dummy = [f '.html']; jika ada (dummy, 'file') == 2 hapus (dummy) hujung hujung

jika cnt == panjang (fail) msg = 'Pemasangan Berjaya'; tunggu (msgbox (msg, dlgTitle)); else msg = 'Ralat Pemasangan - lihat tetingkap arahan untuk perincian'; tunggu (errordlg (msg, dlgTitle)); akhir

akhir% roombaInstall

Langkah 3: Kod Bahagian 1: Fungsi Penjejakan

Kod Bahagian 1: Fungsi Penjejakan
Kod Bahagian 1: Fungsi Penjejakan

Fungsi ini mengambil pemboleh ubah Roomba dan gambar dari kamera pada Roomba dan mencari koordinat pusat xy dari objek yang dilacak

Simpan kod ini dalam fail lain dalam folder yang sama.

fungsi [xm, ym] = trackingblue (r)% Input: roomba variable% Output: x dan y nilai pusat objek berikut% Tujuan: mencari pusat objek biru yang diberi gambar% Penggunaan [nilai x, y nilai] = trackingblue (pemboleh ubah roomba) img = r.getImage; % membaca kamera dari subplot robot (1, 2, 2) sub gambar (img); % menunjukkan gambar di tetingkap yang sama dengan tajuk jalan ('Tracking Image') merah = img (:,:, 1); hijau = img (:,:, 2); biru = img (:,:, 3); justBlue = biru - hijau / 2 - merah / 2; bw = justBlue> 40; tahan subplot (1, 2, 2) subimage (bw); [x, y] = cari (bw); jika ~ isempty (x) && ~ isempty (y) xm = bulat (min (x)); ym = bulat (min (y)); xx = maks (1, xm-5): min (xm + 5, saiz (bw, 1)); yy = maks (1, ym-5): min (ym + 5, ukuran (bw, 2)); bwbw = nol (ukuran (bw), 'uint8'); bwbw (xx, yy) = 255; tahan subplot (1, 2, 2) subimage (justBlue + bwbw); akhir

Langkah 4: Kod Bahagian 2: While Loop

Kod ini mendorong Roomba berdasarkan lokasi x dan y objek dari fungsi penjejakan. Ini akan membuat Roomba memperhatikan dinding dan tebing, sambil mencari warna biru. Ini juga akan mengambil koordinat x dan y dari laluan Roomba dan membuat plot yang sesuai dengan gambar penjejakan. Sekiranya sensor bump diaktifkan, ia akan beralih ke bahagian e-mel

Projek% Rover

% Jonah Zahn, Harga Wade, Noah Sloan% jzahn2, wprice15, nsloan1% Input: nilai roomba, data kamera, bump, sensor cahaya dan dinding% Tujuan: Mengikuti angkasawan dan mengelakkan halangan. Sekiranya diberitahu, roomba akan menghantar e-mel% yang memperincikan peta dan di mana ia sesuai dengan kedudukan permulaannya. % Penggunaan: jalankan program dengan menyatakan pemboleh ubah roomba, juga% mempunyai objek hijau bergerak% Output: menunjukkan gambar penjejakan gambar, peta e-mel dan teks kepada pengguna %% Mengikuti Bahagian b = 0; % Memulakan pemboleh ubah c = 0; x = 0; y = 0; theta = 0; sementara c == 0% Gelung untuk membuatnya mengesan objek biru dan halangan t = r.timeGet; d = r.getDistance; [xval, yval] = trackblue (r); cliff = getCliffSensors (r); % memulakan struktur untuk sensor nilai cahaya = getLightBumpers (r); bump = getBumpers (r); jika light.leftCenter> = 10 || light.rightCenter> = 10% Sense jika terdapat dinding berhampiran r.stop r.setLEDDigits ('help') c = 1% manakala b == 0% jika bump.right == 1 || bonggol.kiri == 1 || bump.front == 1% Mengenakan jika telah membongkok sesuatu setelah merasakan dinding% c = 1% b = 1% disp ('bump')% end% end elseif bump.right == 1 || bongkok.kiri == 1 || bump.front == 1% Mengenakan jika telah membongkar sesuatu, jika ya, ia akan menghantar e-mel r.stop c = 1 b = 1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || tebing <kiri> = 100 || cliff.right <= 100% Mengenakan jika terdapat tebing berhampiran r.stop c = 1 r.setLEDDigits ('help') else% Menetapkan halaju pemacu mengikut warna biru jika yval = 100 r.setDriveVelocity (0.1) lain jika yval 400 r.turnAngle (-5) akhir akhir theta = theta + r.getAngle; x = d. * cosd (theta) + x; % x koordinat roomba y = d. * sind (theta). * d + y; % y koordinat subplot roomba (1, 2, 1) plot (x, y, 'bd')% merancang jalan dan menambah tajuk tajuk ('Roomba Path') tahan; akhir

Langkah 5: Kod Bahagian 3: Bahagian E-mel

Ini akan mengambil jalan dan gambar yang dirancang dan menghantarnya ke alamat e-mel yang ditentukan

(Ditunjukkan di sini dengan e-mel contoh)

%% Bahagian E-mel

jika b == 1 saveas (gcf, 'rovermap.png')% menyimpan angka setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % akaun mel yang akan dihantar dari setpref ('Internet', 'SMTP_Username', '[email protected]'); % pengirim nama pengguna setpref ('Internet', 'SMTP_Password', 'gssegsse'); % Props kata laluan Pengirim = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'benar'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('contoh e-mel', 'RoverBeacon', 'Angkasawan telah berhenti bergerak. Untuk pemulihan, ikuti arahan dalam fail yang dilampirkan.', 'rovermap.png') disp ('email dihantar') akhir

Disyorkan: