İçindekiler:

UTK EF 230 MarsRoomba Projesi Sonbahar 2018: 5 Adım
UTK EF 230 MarsRoomba Projesi Sonbahar 2018: 5 Adım

Video: UTK EF 230 MarsRoomba Projesi Sonbahar 2018: 5 Adım

Video: UTK EF 230 MarsRoomba Projesi Sonbahar 2018: 5 Adım
Video: UTK - EF 230 Autonomous Vehicle Project 2024, Kasım
Anonim
UTK EF 230 MarsRoomba Projesi Güz 2018
UTK EF 230 MarsRoomba Projesi Güz 2018

Şu anda, Mars gezicileri, gezegenin mikrobiyal yaşam potansiyeli hakkında daha fazla bilgi edinmenin nihai sonuna kadar çeşitli yöntemlerle Mars yüzeyinde veri toplamak için kullanılmaktadır. Geziciler veri toplama için öncelikle fotoğrafçılık ve toprak analiz araçlarını kullanır, ancak geziciler ayrıca navigasyon aletleri, radyasyon dedektörleri, atmosferik sensörler ve kaya numunesi buharlaşması için bir lazer içerir. Planlanan 2020 gezici misyonunun hedefi çoğunlukla aynı, ancak NASA'ya göre "toprak ve kaya örneklerini toplamak ve gelecekteki bir görevle Dünya'ya potansiyel geri dönüş için bunları yüzeyde önbelleğe almak" özel görevi.

Bununla birlikte, gelecekteki gezicilerin insan yardımı için kullanılacağı öncülü altında, ekibimiz gezicinin insanların hangi yönlerini izleyebileceğini düşündü. Bir acil durumda yaşam desteği ve teçhizatı bozulan bir astronotun bilincini kaybetmesi durumunda, gezginimizin, takip ettiği astronotun hareketsiz olduğunu gözlemleyerek ve bir tehlike mesajı ileterek mobil bir acil durum işareti olarak hizmet edebileceği sonucuna vardık. İnsanı takip etmek ve hareketsizliği belirlemek için gezici, insanın ayakkabılarının rengi ve hareketleri gibi girdileri alacaktır. Dikkate alınması gereken diğer bir girdi, acil bir durumda tehlike sinyali iletmek için yolunu hatırlaması gerektiğidir. Gezicimiz Mars'taki bir ihtiyacı karşılıyor, çünkü bu tür yabancı bir arazide böylesine maliyetli bir göreve girişmek, birden fazla güvenlik önlemi katmanı gerektiriyor ve bir astronot giysi arızası veya bilinç kaybı nedeniyle kendi yardımını alamıyorsa, gezici başkalarını uyarabilir..

Bu Eğitilebilirlik, okuyucunun Roomba'sını bir "astronot"u başarılı bir şekilde takip etmesi ve uygunsa bir tehlike sinyali göndermesi için programlamasına yardımcı olmak için tasarlanmıştır.

Adım 1: Gerekli Malzemeler

İhtiyac duyulan malzemeler
İhtiyac duyulan malzemeler

1) İnternet erişimli bilgisayar/dizüstü bilgisayar

2) MATLAB_R2018a

3) Roomba ve Roomba İndirme

2. Adım: Kurulum/İndirme

Kurulum/İndirme
Kurulum/İndirme

Roomba'ya (proje klasöründeki kendi dosyasına kaydedilmiş) erişmek için gereken yazılımı indirmek için bu betiği MATLAB'da çalıştırın

Ek Yardım:

% EF 230 Roomba Projesi için kurulum programı% Son güncelleme: 13 Eylül 2017 (https sunucusuyla ilişkili güvenlik sorunları düzeltildi ve hata oluşursa dosya silme uyarısı kaldırıldı) function roombaInstall clc; % dosyaları yüklenecek dosyaların listesi = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; seçeneklerden kurulacak % konum = weboptions('CertificateFilename', ''); % sertifika gereksinimlerini göz ardı etmesini söyle server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Roomba Yükleme/Güncelleme'; % amacı göster ve onay al istemi = { 'Bu program şu EF 230 Roomba dosyalarını indirecek:' '' strjoin(files, ' ') '' 'bu klasöre:' '' cd '' 'Devam etmek istiyor musunuz? ' }; bip; yn = questdlg(istem, … dlgTitle, … 'Evet', 'Hayır', 'Evet');

eğer ~strcmp(yn, 'Evet'), return; son

% var olan dosyaların listesini al Mevcut_dosyalar = files(cellfun(@exist, files) > 0); eğer ~isempty(existing_files) % onları değiştirmenin gerçekten uygun olduğundan emin olun komut istemi = {'Bu dosyaları değiştiriyorsunuz: ' '' strjoin(existing_files, ' ') '' 'Değiştirilecek mi?' }; bip; yn = questdlg(istem, … dlgTitle, … 'Evet', 'Hayır', 'Evet'); eğer ~strcmp(yn, 'Evet'), return; son son

% dosyaları indir cnt = 0; i=1 için:uzunluk(dosyalar) f=dosyalar{i}; disp(['İndiriliyor' f]); url'yi deneyin = [sunucu f]; websave(f, url, seçenekler); % güvenlik hatalarını önlemek için eklenen seçenekler cnt = cnt + 1; catch disp(['İndirmede hata' f]); kukla = [f '.html']; eğer varsa(kukla, 'dosya')==2 sil(kukla) son son son

if cnt == uzunluk(dosyalar) msg = 'Kurulum Başarılı'; waitfor(msgbox(msg, dlgTitle)); else msg = 'Kurulum Hatası - ayrıntılar için komut penceresine bakın'; waitfor(errordlg(msg, dlgTitle)); son

%roombaYüklemeyi sonlandır

Adım 3: Kod Bölümü 1: İzleme İşlevi

Kod Bölüm 1: İzleme İşlevi
Kod Bölüm 1: İzleme İşlevi

Bu fonksiyon Roomba değişkenini ve resmi Roomba üzerindeki kameradan alır ve izlenen nesnenin merkez xy koordinatlarını bulur

Bu kodu aynı klasördeki başka bir dosyaya kaydedin.

function [xm, ym] = traceblue(r)%Girişler: roomba değişkeni %Çıkışlar: aşağıdaki nesnenin merkezinin x ve y değeri %Amaç: bir görüntü verilen mavi nesnenin merkezini bulur %Kullanım [x değeri, y değer] = traceblue(roomba değişkeni) img=r.getImage; % robot alt grafiğinden kamerayı okur(1, 2, 2) subimage(img); %, yolu başlık('İzleme Resmi') ile aynı pencerede gösterir red = img(:,:, 1); yeşil = img(:,:, 2); mavi = img(:,:, 3); justBlue = mavi - yeşil/2 - kırmızı/2; bw = justBlue > 40; subplot(1, 2, 2) subimage(bw) üzerinde tutun; [x, y] = bul(bw); if ~sempty(x) && ~isempty(y) xm = yuvarlak(ortalama(x)); ym = yuvarlak(ortalama(y)); xx = maks(1, xm-5):min(xm+5, boyut(bw, 1)); yy = maks(1, ym-5):min(ym+5, boyut(bw, 2)); bwbw = sıfırlar(boyut(bw), 'uint8'); bwbw(xx, yy) = 255; subplot(1, 2, 2) subimage(justBlue + bwbw) üzerinde tutun; son

Adım 4: Kod Bölüm 2: Döngü Sürerken

Bu kod, Roomba'yı, izleme işlevinden nesnenin x ve y konumuna göre yönlendirir. Bu, Roomba'nın maviyi ararken duvarlara ve uçurumlara dikkat etmesini sağlayacaktır. Bu ayrıca Roomba yolunun x ve y koordinatlarını alacak ve izleme görüntüsüyle ilgili bir çizim oluşturacaktır. Çarpma sensörü etkinleştirilirse, e-posta bölümüne geçecektir

%Rover Projesi

%Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 Girdiler: roomba değeri, kamera verileri, tümsek, ışık ve duvar sensörleri %Amaç: Astronotları takip eder ve engellerden kaçınır. Eğer uyarılırsa, roomba bir haritanın detaylarını ve başlangıç konumuna göre nerede olduğunu gösteren bir e-posta gönderir. %Kullanım: programı sadece bir roomba değişkeni bildirmiş olarak çalıştırın, ayrıca % hareketli yeşil bir nesneye sahip olun % Çıktılar: resim izleme resmini, e-posta haritasını ve kullanıcıya %% metni gösterir Bölüm b=0; %Başlangıç değişkenleri c=0; x=0; y=0; teta=0; while c==0 mavi nesneyi ve engelleri algılamasını sağlamak için %döngü t = r.timeGet; d = r.getDistance; [xval, yval] = trackblue(r); cliff=getCliffSensors(r); %sensör değerleri için yapıların başlatılması light=getLightBumpers(r); çarpma= getBumpers(r); if light.leftCenter >= 10 || light.rightCenter >= %10 r.stop yakınında bir duvar olup olmadığını algılar r.setLEDDigits('help') c=1 % iken b==0 % eğer bump.right == 1 || yumru.sol == 1 || bump.front == 1 %Bir duvar algıladıktan sonra bir şeye çarptığını algılar % c=1 % b=1 % disp('bump') % end % end elseif bump.right == 1 || yumru.sol == 1 || bump.front == 1 %Bir şeye çarptıysa algılar, öyleyse bir e-posta gönderir r.stop c=1 b=1 elseif cliff.leftFront <= 100 || cliff.rightÖn <= 100 || uçurum.sol <= 100 || cliff.right <= 100 %r.stop yakınında bir uçurum olup olmadığını algılar c=1 r.setLEDDigits('help') else %yval = 100 ise sürücü hızlarını maviyi takip edecek şekilde ayarlar r.setDriveVelocity(0.1) elseif yval 400 r.turnAngle(-5) end end theta = theta + r.getAngle; x = d.*cosd(teta) + x; oda alanının % x koordinatı y = d.*sind(theta).*d + y; roomba alt grafiğinin % y koordinatı(1, 2, 1) arsa(x, y, 'bd') % yolu çizer ve bir başlık başlığı ekler('Roomba Yolu') beklet; son

Adım 5: Kod Bölümü 3: E-posta Bölümü

Bu, çizilen yolu ve görüntüyü alacak ve belirtilen bir e-posta adresine gönderecektir

(Burada örnek e-posta ile gösterilmiştir)

%% E-posta Bölümü

if b==1 saveas(gcf, 'rovermap.png') %şekli kaydeder setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('İnternet', 'E_mail', '[email protected]'); setpref('Internet', 'SMTP_Username', '[email protected]'); % gönderici kullanıcı adı setpref('Internet', 'SMTP_Password', 'gssegsse'); % Gönderici parolası sahne = Java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465'); sendmail('example email', 'RoverBeacon', 'Astronot hareket etmeyi durdurdu. Kurtarma için ekteki dosyadaki talimatları izleyin.', 'rovermap.png') disp('email gönderildi') end

Önerilen: