İçindekiler:
Video: Mars Roomba Projesi UTK: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
SORUMLULUK REDDİ: BU YALNIZCA ROOMBA BİR ŞEKİLDE KURULDUĞU TAKTİRDE ÇALIŞACAKTIR.
ÇOK ÖZEL BİR ŞEKİLDE, BU EĞİTİM TABLOSU TENNESSEE ÜNİVERSİTESİ VE FAKÜLTE ÖĞRENCİLERİ VE FAKÜLTELERİ İÇİN OLUŞTURULMUŞ VE TARAFINDAN KULLANILMASI AMAÇLANMIŞTIR.
Bu kod, MATLAB'de yerel olarak yazılmış ve kaydedilmiş kodu çalıştırmak üzere bir Roomba kurmak için kullanılır. University of Tennessee web sitesinden gerekli kütüphaneleri alamıyorsanız bu işe yaramaz. Kitaplıklarınız varsa, bunları kitaplıktaki işlevleri kullanarak kendi Roomba'nızı programlamak için kullanabilirsiniz. Bu Eğitilebilir Kitap size kitaplıkları nasıl kuracağınızı, tüm kodlar için bir klasör oluşturacağınızı ve aşağıda sunduğumuz programı nasıl kodlayacağınızı ve kullanacağınızı öğretir.
Gerekli malzemeler:
· Odabası
· MATLAB
· Raspberry Pi ve Pi Kamera
Adım 1: Kitaplıkları Alma
Mühendislik web sitesinde bir araç kutusu/kütüphane sağlanmıştır, indirin ve yeni bir klasöre yerleştirin. Bu klasör tüm proje çalışma dosyalarını içermelidir, yaptığınız bir programda kullanılan herhangi bir işlevin kütüphaneye başvurması gerekeceğinden. Bunu yaptıktan sonra programlarınız üzerinde çalışmaya başlayabilirsiniz.
Adım 2: Programları Yazma
Programda kullanılabilecek bir çok fonksiyon vardır, bu fonksiyonlara "doc roomba" komutu ile ulaşılabilir. Bu işlevleri kullanarak Roomba'nızı birçok farklı şekilde kontrol edebilirsiniz. Aşağıda verilen kod, bir mars gezgini oluşturmak için çarpma sensörlerini, ışık çubuğu sensörlerini, kamerayı ve uçurum sensörlerini farklı şekillerde kullanır. Roomba bir nesneye çarptığında algılamak için çarpma sensörlerini kullandık, bu olduğunda robot geri dönecek, dönecek ve hareket etmeye devam edecek. Roomba bir nesneye çarpmadan önce, ışık çubuğu nesneyi algılayacak ve Roomba'yı yavaşlatacak, böylece çarpma sensörünü etkinleştirmek için nesneye çarptığında Roomba darbeden daha az hasar görecek/etkilenecektir. Kamera yüzeyde su veya lav arar, sıvı yoksa robot aramaya devam eder, su varsa robot operatörlere mesaj gönderir. Uçurum sensörleri, robot bir uçuruma yaklaştığında onu durdurmak için tasarlanmıştır. Robot bir uçurum algılarsa geri döner ve düşmemek için döner.
3. Adım: Kodlayın
Bunu kopyalayıp kitaplıklarla aynı klasörde bulunan bir MATLAB dosyasına yapıştırın.
fonksiyonAnaOdaDosya(r)
r.setDriveVelocity(0.1, 0.1)
while true % Infinte, kodun çalışmasını sağlamak için döngü
dontFall = cliffCheck(r) % 'cliffCheck' işlevine 'dontFall' değişkenini atar
if dontFall % if ifadesi 'cliffCheck' tamamlandıktan sonra kodda devam edecek
r.setDriveVelocity(0.1, 0.1) % 'cliffCheck' tamamlandıktan sonra Roomba'nın hareket etmesini sağlar
end % if ifadesi 'dontFall' biter
bumper=bumpcheck(r) % 'bumper' değişkenini 'bumpcheck' işlevine atar
if tampon % if ifadesi 'bumpcheck' tamamlandıktan sonra kodda devam edecek
r.setDriveVelocity(0.1, 0.1) % 'bumpcheck' tamamlandıktan sonra Roomba'nın hareket etmesini sağlar
end % if ifadesi 'tampon'u bitirir
sıvılar = LiquidCheck(r) % 'LiquidCheck' işlevine 'liquids' değişkenini atar
if sıvılar % if ifadesi 'LiquidCheck' tamamlandıktan sonra kodda devam edecek
r.setDriveVelocity(0.1, 0.1) % 'LiquidCheck' tamamlandıktan sonra Roomba'nın hareket etmesini sağlar
end % if ifadesi 'sıvıları' bitirir
lightbumper=lightcheck(r) % 'lightbumper' değişkenini 'lightcheck' işlevine atar
duraklama(0.1) % Sürekli döngü yinelemesini önlemek için kısa süre duraklat
end %, sonsuz while döngüsüyle biter
bitiş % işlevi biter
function tampon=bumpcheck(r) % 'bumpcheck' işlevi yaratır
bumpdata= r.getBumpers % Tampondaki tüm verileri 'bumpdata' değişkenine atar
tampon = çarpma verisi.sağ || yumruveri.sol || bumpdata.front % Farklı tamponlar için depolanmış bir 'bumper' değişkeni oluşturur
if bumpdata.right>0 % If Bumper çarpılırsa, roomba'nın farklı işlevlerinin gerçekleşmesine neden olan ifade
r.stop % Roomba'yı durdurur
r.moveDistance(-0.3, 0.2) % Roomba'yı Ters Çevirir 0.3m
r.turnAngle(90, 0,5) % Roomba'yı olabildiğince hızlı 90 derece döndürür
son
eğer bumpdata.front>0
r.dur
r.moveMesafe(-0.3, 0.2)
r.turnAngle(randi(270), 0,5) % Roomba'yı 0 ile 270 derece arasında rastgele bir aralıkta olabildiğince hızlı döndürür
son
eğer bumpdata.left>0
r.dur
r.moveMesafe(-0.3, 0.2)
r.turnAngle(-90, 0,5) % Roomba'yı mümkün olduğunca hızlı -90 derece döndürür
son
son
function lightbumper=lightcheck(r) % 'lightcheck' işlevini oluşturur
lightdata= r.getLightBumpers % Işık çarpma sensöründen gelen tüm verileri 'lightdata' değişkenine atar
ışık tamponu = ışık verisi.left || lightdata.sağ || lightdata.rightCenter || lightdata.leftCenter % Farklı ışık tamponları için depolanmış bir 'lightbumper' değişkeni oluşturur
if lightbumper % If deyimi yukarıdan lightbumper verilerini çağırmak için
if lightdata.left>10 % Eğer ışık tamponu 10'dan fazla değer algılarsa, roomba'nın farklı işlevlerinin gerçekleşmesine neden olan if ifadesi
r.setDriveVelocity(0.05, 0.05) % Çarpmaya hazırlanmak için roomba'yı yavaşlatır
bitiş %'si ilk if ifadesini bitirir
if lightdata.rightCenter>10
r.setDriveVelocity(0.05, 0.05)
son
if lightdata.right>10
r.setDriveVelocity(0.05, 0.05)
son
if lightdata.leftCenter>10
r.setDriveVelocity(0.05, 0.05)
son
end % if ifadesi 'lightbumper'ı bitirir
end %lightcheck işlevini bitirir
işlev donFall = cliffCheck(r) % 'cliffCheck' işlevini oluşturur
veri = r.getCliffSensörler; % Uçurum sensöründen gelen tüm verileri değişken 'veri'ye atar
donFall = data.left<1020 || data.leftÖn<1020 || data.rightFront<1020 || data.right<1020 % Farklı uçurum sensörleri için depolanmış bir 'dontFall' değişkeni oluşturur
if donFall % If ifadesi yukarıdan uçurum sensörü verilerini çağırmak için
if data.left < 1010 % If uçurum sensörü 1010'dan az değer algılarsa, roomba'nın farklı işlevlerinin gerçekleşmesine neden olan ifade
r.dur
r.moveDistance(-0.2, 0.2) % Roomba'yı Ters Çevirir 0.2m
r.turnAngle(-90, 0,5) % Roomba'yı mümkün olduğunca hızlı -90 derece döndürür
elseif data.leftFront < 1010
r.dur
r.moveMesafe(-0.3, 0.2)
r.turnAngle(90, 0,5) % Roomba'yı olabildiğince hızlı 90 derece döndürür
elseif data.rightÖn < 1010
r.dur
r.moveMesafe(-0.3, 0.2)
r.turnAngle(90, 0,5) % Roomba'yı olabildiğince hızlı 90 derece döndürür
elseif data.right < 1010
r.dur
r.moveMesafe(-0.3, 0.2)
r.turnAngle(90, 0,5) % Roomba'yı olabildiğince hızlı 90 derece döndürür
son
son
son
function sıvılar = LiquidCheck(r) % 'LiquidCheck' işlevini oluşturur
ise kalibrasyon için gerçek %start sonsuz döngü
img = r.getImage; % robotun kamerasını okur
image(img) %, resmi bir şekil penceresinde gösterir
red_mean = ortalama(mean(img(200, 150, 1)))% ortalama kırmızı piksel miktarını okur
blue_mean = ortalama(mean(img(200, 150, 3)))% ortalama mavi piksel miktarını okur
sıvılar = red_mean || blue_mean % Farklı renk değişkenleri için depolanmış bir 'sıvılar' değişkeni oluşturur
if sıvıları % If ifadesi yukarıdan görüntü verilerini çağırmak için
if red_mean>170 % If kamera 170'den büyük bir ortalama kırmızı renk görürse, roomba'nın farklı işlevlerinin gerçekleşmesine neden olan ifade
r.stop % roomba'yı durdurur
r.setLEDCenterColor(255) % daireyi kırmızı renge ayarlar
r.setLEDDigits(); % ekranı temizle
f = waitbar(0, '*GELEN MESAJ*'); %, yükleme mesajı için bir bekleme çubuğu oluşturur
r.setLEDDigits('SICAK'); % LED ekranı 'SICAK' çıkışına ayarlar
duraklat(0.5) %Kısa Duraklat, görüntülenen bilgileri okumak için
r.setLEDDigits('LAVA'); % LED ekranı 'LAVA' çıkışına ayarlar
duraklat(0.5)
waitbar(.33, f, '*GELEN MESAJ*'); %bekleme çubuğunda bir artış yaratır
r.setLEDDigits('SICAK');
duraklat(0.5)
r.setLEDDigits('LAVA');
duraklat(0.5)
waitbar(.67, f, '*GELEN MESAJ*'); %, bekleme çubuğunda bir artış yaratır
r.setLEDDigits('SICAK');
duraklat(0.5)
r.setLEDDigits('LAVA');
waitbar(1, f, '*GELEN MESAJ*'); %bekleme çubuğunu tamamlar
duraklatma(1)
close(f) %bekleme çubuğunu kapatır
r.setLEDDigits(); % LED ekranı temizler
tümünü kapat %Önceki tüm pencereleri kapatır
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Eksenlerin ve grafiğin çizim penceresini temizler
y=0.5; %, çizim penceresindeki metnin y konumunu ayarlar
x=0.06; % çizim penceresindeki metnin x konumunu ayarlar
title('FROM MARS ROOMBA', 'fontsize', 32) % Çizim penceresine bir başlık ekler
quadeqtxt = 'TEHLİKE LAVA'; % 'quadeqtxt' değişkenini 0 çıktısına ayarlar
text(x, y, quadeqtxt, 'tercüman', 'lateks', 'yazı tipi boyutu', 36); % quadeq metnini çizim penceresinde görüntüler
r.moveDistance(-0.2, 0.2) %roomba'yı 0.2m tersine çevirir
r.turnAngle(180, 0.5) %roomba'yı olabildiğince hızlı 180 derece döndürür
r.setLEDCenterColor(128, 128); % oda merkezi LED'ini turuncuya ayarlar
tümünü kapat %kalan açık pencereleri kapatır
elseif blue_mean>175 % If ifadesi, kamera 175'ten büyük bir ortalama mavi renk görürse, roomba'nın farklı işlevlerinin gerçekleşmesine neden olur
r.stop % roomba'yı durdurur
r.setLEDCenterColor(255) % daireyi kırmızı renge ayarlar
r.setLEDDigits(); % ekranı temizle
f = waitbar(0, '*GELEN MESAJ*'); %, yükleme mesajı için bir bekleme çubuğu oluşturur
r.setLEDDigits('LOOK'); % LED ekranı 'LOOK' çıkışına ayarlar
duraklat(0.5) %Kısa Duraklat, görüntülenen bilgileri okumak için
r.setLEDDigits('WATR'); % LED ekranı 'WATR' çıkışına ayarlar
duraklat(0.5)
waitbar(.33, f, '*GELEN MESAJ*'); %bekleme çubuğunda bir artış yaratır
r.setLEDDigits('LOOK');
duraklat(0.5)
r.setLEDDigits('WATR');
duraklat(0.5)
waitbar(.67, f, '*GELEN MESAJ*'); %, bekleme çubuğunda bir artış yaratır
r.setLEDDigits('LOOK');
duraklat(0.5)
r.setLEDDigits('WATR');
waitbar(1, f, '*GELEN MESAJ*'); %bekleme çubuğunu tamamlar
duraklatma(1)
close(f) %bekleme çubuğunu kapatır
r.setLEDDigits(); % LED ekranı temizler
tümünü kapat %Önceki tüm pencereleri kapatır
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Eksenlerin ve grafiğin çizim penceresini temizler
y=0.5; %, çizim penceresindeki metnin y konumunu ayarlar
x=0.06; % çizim penceresindeki metnin x konumunu ayarlar
title('FROM MARS ROOMBA', 'fontsize', 32) % Çizim penceresine bir başlık ekler
quadeqtxt = 'BULUNAN SU'; % 'quadeqtxt' değişkenini 0 çıktısına ayarlar
text(x, y, quadeqtxt, 'tercüman', 'lateks', 'yazı tipi boyutu', 36); % quadeq metnini çizim penceresinde görüntüler
r.moveDistance(-0.2, 0.2) %roomba'yı 0.2m tersine çevirir
r.turnAngle(180, 0.5) %roomba'yı olabildiğince hızlı 180 derece döndürür
r.setLEDCenterColor(128, 128); % oda merkezi LED'ini turuncuya ayarlar
tümünü kapat %kalan açık pencereleri kapatır
end % if ifadesini bitirir 'red_mean'
end % if ifadesi 'sıvıları' bitirir
bitiş %'si sonsuz while döngüsünü kapatır
bitiş %'si 'LiquidCheck' işlevini bitirir
Adım 4: Kodu Çalıştırma
Kodu kopyalayıp MATLAB'a yapıştırdıktan sonra Roomba'ya bağlanmalısınız. Roomba bağlandıktan sonra r değişkenini adlandırmalısınız. Fonksiyonlar, Roomba'ya atıfta bulunurken r değişkenini kullanır, bu nedenle Roomba, r değişkeni olarak tanımlanmalıdır. Kodu çalıştırdıktan sonra Roomba talimat verildiği gibi çalışmalıdır.
Önerilen:
Roomba'nızı Mars Gezgini'ne Dönüştürmek: 5 Adım
Roomba'nızı Mars Gezgini'ne Dönüştürmek:
Robot Projesi UTK 2017: 3 Adım
Robot Projesi UTK 2017: Misyon: Mühendis ekibimiz, açık kaynaklı teknoloji geliştirme için Kâr Amacı Gütmeyen bir kuruluş olan Froogle tarafından yenilikçi bir İnsan Destekli Mars Rover'ı geliştirmek üzere işe alındı. bir dizi yürütmek için kodladığımız bir roomba o
Roomba MATLAB Projesi: 5 Adım
Roomba MATLAB Projesi: NASA'nın Mars gezgini için şu anki planı, onun bir veri toplayıcı olması ve Mars'ta dolaşması, bilim adamlarının daha önce herhangi bir yaşam formu olup olmadığını görebilmesi için Dünya'ya geri getirmek için toprak örnekleri toplaması. gezegen. Ek olarak
UTK EF 230 MarsRoomba Projesi Sonbahar 2018: 5 Adım
UTK EF 230 MarsRoomba Projesi Sonbahar 2018: Şu anda, Mars gezicileri, gezegenin mikrobiyal yaşam potansiyeli hakkında daha fazla bilgi edinmek için çeşitli yöntemlerle Mars yüzeyinde veri toplamak için kullanılmaktadır. Rovers veri toplama için öncelikle fotoğraf ve toprak analiz araçlarını kullanır
Roomba Projesi: 5 Adım (Resimlerle)
Roomba Projesi: Bu talimat, Güney Florida Üniversitesi'ndeki (www.makecourse.com) Makecourse proje gereksinimini yerine getirmek için oluşturulmuştur. Bu talimat, Roomba projemi birleştirmek için gerekli tüm adımları ve bileşenleri kapsayacaktır