İçindekiler:

Roomba MATLAB Projesi: 5 Adım
Roomba MATLAB Projesi: 5 Adım

Video: Roomba MATLAB Projesi: 5 Adım

Video: Roomba MATLAB Projesi: 5 Adım
Video: Matlab Onramp L13, Stellar motion, Yıldızların Hızını Hesaplama Projesi, by eMuderris 2024, Temmuz
Anonim
Roomba MATLAB Projesi
Roomba MATLAB Projesi

NASA'nın Mars gezgini için şu anki planı, onun bir veri toplayıcı olması ve Mars'ta dolaşması, Dünya'ya geri getirmek için toprak örnekleri toplaması, böylece bilim adamlarının gezegende daha önce herhangi bir yaşam formu olup olmadığını görebilmesi. Ek olarak, gezici görüntüleri bilim insanlarına geri gönderir, böylece gezicide gezinmeye ve sahip olabileceği sorunları çözmelerine yardımcı olabilirler.

Grubumuzun projemiz için fikri, gezicinin 2020'de dünyayı terk edecek olan NASA gezicisinin aynısını yapması ama aynı zamanda arazinin coğrafyasını da haritalaması. Roomba, uçurumları hissedebilir ve düşmeden önce kendini durdurabilir ve sonra geri döner, döner ve düşmemesi ve hasar görmemesi için rotasını değiştirir. Projemize entegre edilen diğer bir fikrimiz de, odaba'nın gördüğü yer işaretlerini çizebilmesi ve döngü bittiğinde ve rotası çalıştırıldığında bir arsa gösterebilmesidir.

Bu talimat, kendi roomba'ları için aynı türde kod oluşturmak isteyen herkes içindir.

Adım 1: Adım 1: Gerekli Malzemeler

Adım 1: Gerekli Malzemeler
Adım 1: Gerekli Malzemeler
Adım 1: Gerekli Malzemeler
Adım 1: Gerekli Malzemeler

İhtiyacın olacak:

  1. bir oda
  2. MATLAB
  3. Roomba'yı çalıştırmak için bu dosya
  4. Düz bir yüzey
  5. Bir "uçurum" görevi görecek bir masa yüzeyi

Adım 2: Adım 2: Roomba'yı Ayarlama/Kod Alma

2. Adım: Roomba için Kurulum/Kod Alma
2. Adım: Roomba için Kurulum/Kod Alma

Dosyaları girdikten sonra ekranınız bu şekilde görünecektir.

3. Adım: 3. Adım: Uçurum Sensörlerini/LED Işıklarını Ayarlama

Bu kod, roomba'nıza tam olarak hangi açıyı dönmesi gerektiğini söyleyecek, pil bilgilerini kontrol edecek, odanıza ne kadar hızlı gideceğini söyleyecek ve roomba'nın kamerasından bir kişi olup olmadığını kontrol edecektir. Ayrıca bir kişiyi tanımlarsa bip sesi çıkaracak ve uçurumdan aşağı inmeden önce kendini durduracaktır.

% deneyin rob.setLEDDigits('') x=0; y=0; teta=0; engel = ; döngü = 1; AngCorr = @(x)x + 3.059.*x.^0.4205; %Rob.getBatteryInfo.percent > 15 rob.setLEDDigits('') rob.setDriveVelocity(0.1) %Go iken dönüş açılarını düzeltme işlevi) rob.stop rob.setLEDDigits('Cliff') duraklama(0.5) engel(döngü) = 2; AA_cliffbeep(rob) %Yedekle ve Dön rob.moveDistance(-.15) rob.turnAngle(30) end

4. Adım: 4. Adım: Engelleri Kontrol Etme

Bu kod, odayı etrafındaki öğeleri kontrol etmesi için alacak ve kendine zarar vermeden önce durduğundan emin olmak için çarpma sensörünü kontrol edecektir.

AA_lightcheck(rob) rob.stop rob.setLEDDigits('Duvar') duraklat(0.5) engel(döngü) = 1 ise Işık Sensörünü Kontrol Edin; %Duvar AA_wallbeep(rob) %Yedekle ve Dön rob.moveDistance(-.15) rob.turnAngle(30) end %A_bumpcheck(rob) ise Çarpma Sensörünü Kontrol Et rob.stop rob.setLEDDigits('Duvar') duraklat(0.5) engel(döngü) = 1; %Duvar AA_wallbeep(rob) %Yedekle ve Dön rob.moveDistance(-.15) rob.turnAngle(30) bitiş %Eğer yoksa boş(engel) engel(döngü) = 0; elseif uzunluk(engel) < döngü engel(döngü) = 0; son

Adım 5: Adım 5: Çizim

Adım 5: Çizim
Adım 5: Çizim

Bu kod, odanıza yolculuğunda neyle karşılaşacağını belirlemesini söyleyecektir. Roomba durduktan sonra bunun gibi bir arsa görünecektir.

%Konum Al d = rob.getDistance; if döngü == 1 teta(döngü) = 0; x(döngü) = d.*cosd(teta(döngü)); x y(döngü) = d.*sind(teta(döngü)); y içinde seyahat edilen toplam uzaklık %'si theta(döngü) = theta(döngü-1) + rob.getAngle; x(döngü) = d.*cosd(teta(döngü)) + x(döngü-1); x'de kat edilen toplam uzaklık %'si y(döngü) = d.*sind(teta(döngü)).*d + y(döngü-1); y sonunda seyahat edilen toplam uzaklık %'si rob.getButtons.clean bitiş koşulunda kırılma koşulu %Artış döngüsü = döngü + 1; son rob.stop for i = 1:döngü if engel(i) == 1 %Duvar grafiği(x(i), y(i), 'İşaretleyici', 'kare', 'MarkerEdgeColor', 'r') elseif engel (i) == 2 %Cliff plot(x(i), y(i), 'Marker', 'o', 'MarkerEdgeColor', 'k') end text(.9, 0.9, sprintf('Square = Wall) nDaire = Uçurum'), 'Birimler', 'normalleştirilmiş') uçta beklet %Tehdit Sinyali iken gerçek rob.bip duraklama(3) eğer rob.getButtons.clean ara bitiş bitiş % yakalama % rob.stop % bitiş

Önerilen: