İçindekiler:

Mars Roomba Projesi UTK: 4 Adım
Mars Roomba Projesi UTK: 4 Adım

Video: Mars Roomba Projesi UTK: 4 Adım

Video: Mars Roomba Projesi UTK: 4 Adım
Video: Ronaldo’nun son 1 yıl içerisinde yaşadıkları😔 #keşfet #football #ronaldo 2024, Kasım
Anonim
Mars Roomba Projesi UTK
Mars Roomba Projesi UTK
Mars Roomba Projesi UTK
Mars Roomba Projesi UTK

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: