Daftar Isi:

Proyek UTK EF 230 MarsRoomba Musim Gugur 2018: 5 Langkah
Proyek UTK EF 230 MarsRoomba Musim Gugur 2018: 5 Langkah

Video: Proyek UTK EF 230 MarsRoomba Musim Gugur 2018: 5 Langkah

Video: Proyek UTK EF 230 MarsRoomba Musim Gugur 2018: 5 Langkah
Video: 🚨 FILECOIN Бычьи новости и прогнозы цен и технический анализ 6x FILECOIN 2024, November
Anonim
Proyek UTK EF 230 MarsRoomba Musim Gugur 2018
Proyek UTK EF 230 MarsRoomba Musim Gugur 2018

Saat ini, penjelajah Mars digunakan untuk mengumpulkan data di permukaan Mars melalui berbagai metode, untuk mempelajari lebih lanjut tentang potensi planet ini untuk kehidupan mikroba. Penjelajah terutama menggunakan alat fotografi dan analisis tanah untuk pengumpulan data, tetapi penjelajah juga mencakup instrumen navigasi, detektor radiasi, sensor atmosfer, dan laser untuk penguapan sampel batuan. Tujuan misi rover 2020 yang direncanakan sebagian besar sama, tetapi dengan tugas khusus untuk "mengumpulkan sampel tanah dan batu dan menyimpannya di permukaan untuk kemungkinan kembali ke Bumi dengan misi masa depan," menurut NASA.

Namun, dengan premis bahwa penjelajah masa depan akan digunakan untuk bantuan manusia, tim kami mempertimbangkan aspek manusia yang dapat dipantau oleh penjelajah tersebut. Kami sampai pada kesimpulan bahwa jika suatu keadaan darurat membuat astronot tidak sadarkan diri dengan dukungan dan peralatan hidup yang gagal, rover kami dapat berfungsi sebagai suar mayday seluler dengan mengamati bahwa astronot yang diikutinya tidak bergerak dan menyampaikan pesan marabahaya. Untuk mengikuti manusia dan menentukan imobilitas, rover akan mengambil input seperti warna sepatu manusia dan gerakannya. Masukan lain yang perlu dipertimbangkan adalah bahwa ia harus mengingat jalurnya untuk menyampaikan sinyal marabahaya jika terjadi keadaan darurat. Penjelajah kami memenuhi kebutuhan di Mars karena mencoba misi mahal seperti itu di medan asing seperti itu memerlukan beberapa lapis brankas, dan jika seorang astronot tidak bisa mendapatkan bantuan mereka sendiri karena malfungsi atau ketidaksadaran, penjelajah dapat memperingatkan orang lain..

Instruksi ini dirancang untuk membantu pembaca dalam memprogram Roomba-nya agar berhasil mengikuti "astronot" dan mengirim sinyal marabahaya jika berlaku.

Langkah 1: Bahan yang Dibutuhkan

Bahan yang Dibutuhkan
Bahan yang Dibutuhkan

1) Komputer/laptop yang dapat diakses internet

2) MATLAB_R2018a

3) Unduh Roomba dan Roomba

Langkah 2: Siapkan/Unduh

Siapkan/Unduh
Siapkan/Unduh

Jalankan skrip ini di MATLAB untuk mengunduh perangkat lunak yang diperlukan untuk mengakses Roomba (disimpan dalam filenya sendiri di folder proyek)

Bantuan Tambahan:

% Program penginstalan untuk Proyek Roomba EF 230% Pembaruan terakhir: 13 September 2017 (Memperbaiki masalah keamanan yang terkait dengan server https dan menghapus peringatan penghapusan file jika terjadi kesalahan) fungsi roombaInstall clc; % daftar file untuk menginstal file = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % lokasi untuk menginstal dari options = weboptions('CertificateFilename', ''); % menyuruhnya untuk mengabaikan persyaratan sertifikat server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Instal/Perbarui Roomba'; % tampilan tujuan dan dapatkan konfirmasi prompt = { 'Program ini akan mengunduh file EF 230 Roomba ini:' '' strjoin(file, ') '' 'ke folder ini:' '' cd '' 'Apakah Anda ingin melanjutkan? ' }; berbunyi; yn = questdlg(prompt, … dlgTitle, … 'Ya', 'Tidak', 'Ya');

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

% get list of files that existing_files = files(cellfun(@exist, files) > 0); if ~isempty(existing_files) % pastikan benar-benar ok untuk menggantinya prompt = {'Anda sedang mengganti file-file ini: '' strjoin(existing_files, ' ') '' 'OK untuk mengganti?' }; berbunyi; yn = questdlg(prompt, … dlgTitle, … 'Ya', 'Tidak', 'Ya'); jika ~strcmp(yn, 'Ya'), kembalikan; akhir akhir

% unduh file cnt = 0; untuk i=1:panjang(berkas) f=berkas{i}; disp(['Mengunduh ' f]); coba url = [server f]; websave(f, url, opsi); % opsi tambahan untuk menghindari kesalahan keamanan cnt = cnt + 1; catch disp(['Kesalahan mengunduh ' f]); dummy = [f '.html']; jika ada(dummy, 'file')==2 hapus(dummy) end end end

if cnt == length(files) msg = 'Instalasi Berhasil'; tunggu(kotak pesan(pesan, dlgTitle)); else msg = 'Kesalahan Instalasi - lihat jendela perintah untuk detailnya'; tunggu(errordlg(pesan, dlgTitle)); akhir

akhir %roombaInstal

Langkah 3: Kode Bagian 1: Fungsi Pelacakan

Bagian Kode 1: Fungsi Pelacakan
Bagian Kode 1: Fungsi Pelacakan

Fungsi ini mengambil variabel Roomba dan gambar dari kamera di Roomba dan menemukan koordinat pusat xy dari objek yang dilacak

Simpan kode ini di file lain di folder yang sama.

function [xm, ym] = trackingblue(r)%Input: variabel roomba %Output: nilai x dan y dari pusat objek berikut %Purpose: menemukan pusat objek biru yang diberi gambar %Usage [nilai x, y nilai] = trackingblue(variabel roomba) img=r.getImage; % membaca kamera dari subplot robot(1, 2, 2) subgambar(img); %menampilkan gambar di jendela yang sama dengan judul jalur('Gambar Pelacakan') red = img(:,:, 1); hijau = img(:,:, 2); biru = img(:,:, 3); justBlue = biru - hijau/2 - merah/2; bw = justBlue > 40; tunggu subplot(1, 2, 2) subgambar(bw); [x, y] = temukan(bw); if ~kosong(x) && ~kosong(y) xm = bulat(rata-rata(x)); ym = bulat(rata-rata(y)); xx = maks(1, xm-5):min(xm+5, ukuran(bw, 1)); yy = maks(1, ym-5):min(ym+5, ukuran(bw, 2)); bwbw = nol(ukuran(bw), 'uint8'); bwbw(xx, yy) = 255; tunggu subplot(1, 2, 2) subgambar(justBlue + bwbw); akhir

Langkah 4: Kode Bagian 2: Sementara Loop

Kode ini menggerakkan Roomba berdasarkan lokasi x dan y objek dari fungsi pelacakan. Ini akan membuat Roomba waspada terhadap dinding dan tebing, sambil mencari warna biru. Ini juga akan mengambil koordinat x dan y dari jalur Roomba dan membuat plot yang sesuai dengan gambar pelacakan. Jika bump sensor diaktifkan maka akan berpindah ke bagian email

%Proyek Penjelajah

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 %Masukan: nilai ruang, data kamera, benjolan, sensor cahaya dan dinding Tujuan: Mengikuti astronot dan menghindari rintangan. Jika diperingatkan, roomba mengirimkan email % yang merinci peta dan di mana letaknya sesuai dengan posisi awalnya. %Penggunaan: jalankan program dengan mendeklarasikan variabel roomba, juga %memiliki objek hijau bergerak %Outputs: menampilkan gambar pelacakan gambar, mengirim peta email dan teks ke pengguna %% Bagian Mengikuti b=0; %Menginisialisasi variabel c=0; x=0; y=0; theta=0; sementara c==0 %Loop untuk mendeteksi objek biru dan rintangan t = r.timeGet; d = r.getJarak; [xval, yval] = trackingblue(r); tebing=getCliffSensors(r); %menginisialisasi struktur untuk nilai sensor light=getLightBumpers(r); benjolan= getBumper(r); if light.leftCenter >= 10 || light.rightCenter >= 10 %Merasakan jika ada tembok di dekat r.stop r.setLEDDigits('help') c=1 % sementara b==0 % jika bump.right == 1 || bump.left == 1 || bump.front == 1 %Merasa jika menabrak sesuatu setelah merasakan dinding % c=1 % b=1 % disp('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Merasa jika menabrak sesuatu, jika demikian, ia akan mengirim email r.stop c=1 b=1 elseif cliff.leftFront <= 100 || tebing.kananDepan <= 100 || tebing.kiri <= 100 || cliff.right <= 100 %Merasa jika ada tebing di dekat r.stop c=1 r.setLEDDigits('help') else %Mengatur kecepatan drive mengikuti warna biru jika yval = 100 r.setDriveVelocity(0.1) elseif yval 400 r.turnAngle(-5) ujung akhir theta = theta + r.getAngle; x = d.*cosd(theta) + x; % x koordinat ruang y = d.*sind(theta).*d + y; % y koordinat subplot roomba(1, 2, 1) plot(x, y, 'bd') % memplot path dan menambahkan judul judul('Roomba Path') tunggu; akhir

Langkah 5: Bagian Kode 3: Bagian Email

Ini akan mengambil jalur dan gambar yang diplot dan mengirimkannya ke alamat email yang ditentukan

(Tampil di sini dengan contoh email)

%% Bagian Email

if b==1 saveas(gcf, 'rovermap.png') %menyimpan angka setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % akun email untuk dikirim dari setpref('Internet', 'SMTP_Username', '[email protected]'); % nama pengguna pengirim setpref('Internet', 'SMTP_Password', 'gssegsse'); % Sandi pengirim props = 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('example email', 'RoverBeacon', 'Astronot telah berhenti bergerak. Untuk pemulihan, ikuti petunjuk dalam file terlampir.', 'rovermap.png') disp('email terkirim') end

Direkomendasikan: