İçindekiler:

Mars Roomba: 6 Adım
Mars Roomba: 6 Adım

Video: Mars Roomba: 6 Adım

Video: Mars Roomba: 6 Adım
Video: Mars, Yaşama Dünya'dan Daha Uygun Olabilir mi? 2024, Temmuz
Anonim
Mars Odası
Mars Odası

Bu Eğitim Tablosu, Raspberry Pi kontrollü Roomba vakum botunu çalıştırma talimatlarında size rehberlik edecektir. Kullanacağımız işletim sistemi MATLAB üzerindendir.

Adım 1: Sarf Malzemeleri

Bu projeyi gerçekleştirmek için toplamanız gerekenler:

  • iRobot'un Create2 Roomba elektrikli süpürge botu
  • Ahududu Pi
  • Ahududu Pi Kamera
  • MATLAB'ın en son sürümü
  • MATLAB için Roomba kurulum araç kutusu
  • Hücresel bir cihaz için MATLAB uygulaması

2. Adım: Sorun Bildirimi

Sorun Bildirimi
Sorun Bildirimi

Bilim adamlarının gezegen verilerini toplamalarına yardımcı olmak için Mars'ta kullanılabilecek bir gezici geliştirmek için MATLAB'ı kullanmakla görevlendirildik. Projemizde ele aldığımız işlevler uzaktan kumanda, nesne etki tanıma, su tanıma, yaşam tanıma ve görüntü işlemeydi. Bu başarıları elde etmek için, iRobot'un Create2 Roomba'sının birçok işlevini değiştirmek için Roomba araç kutusu komutlarını kullanarak kodladık.

3. Adım: Bluetooth Uzaktan Kumanda

Bluetooth Uzaktan Kumanda
Bluetooth Uzaktan Kumanda

Bu slayt, akıllı telefonunuzun Bluetooth özelliklerini kullanarak Roomba'nın hareketini kontrol etmek için kodu gözden geçirecektir. Başlamak için MATLAB uygulamasını akıllı telefonunuza indirin ve Mathworks hesabınıza giriş yapın. Giriş yaptıktan sonra "daha fazla", "ayarlar"a gidin ve IP adresini kullanarak bilgisayarınıza bağlanın. Bağlandıktan sonra "daha fazla"ya dönün ve "sensörler"i seçin. Ekranın üst araç çubuğundaki üçüncü sensöre dokunun ve başlat üzerine dokunun. Artık akıllı telefonunuz bir uzaktan kumanda!

Kod aşağıdaki gibidir:

0 == 0 iken

duraklat(.5)

PhoneData = M. Oryantasyon;

Azi = PhoneData(1);

Adım = PhoneData(2);

Yan = PhoneData(3);

tümsekler = r.getBumpers;

Yan>80 ise || Yan<-80

r.dur

r.beep('C, E, G, C^, G, E, C')

kırmak

elseif Side>20 && Side<40

r.turnAngle(-5);

Başka bir Taraf>40

r.turnAngle(-25);

başka bir taraf-40

r.turnAngle(5);

başka bir Taraf<-40

r.turnAngle(25);

son

Eğer Perde >10 && Perde<35 ise

r.moveMesafe(.03)

elseif Aralık>-35 && Aralık<-10

r.moveMesafe(-.03)

son

son

Adım 4: Etki Tanıma

Etki Tanıma
Etki Tanıma

Uyguladığımız diğer bir işlev, Roomba'nın bir nesneye etkisini tespit etmek ve ardından mevcut yolunu düzeltmekti. Bunu yapmak için, bir cisme çarpılıp vurulmadığını belirlemek için tampon sensörlerinden gelen okumalarla koşullu ifadeler kullanmamız gerekiyordu. Robot bir cisme çarparsa, 0,2 metre geriye gidecek ve hangi tampona çarptığına göre belirlenen bir açıda dönecektir. Bir öğeye vurulduğunda, "oof" kelimesini görüntüleyen bir menü açılır.

Kod aşağıda gösterilmiştir:

0 == 0 iken

tümsekler = r.getBumpers;

r.setDriveVelocity(.1)

eğer yumrular.left == 1

msgbox('Oof!');

r.moveMesafe(-0.2)

r.setTurnVelocity(.2)

r.dönüşAçı(-35)

r.setDriveVelocity(.2)

elseif tümsekler.ön == 1

msgbox('Oof!');

r.moveMesafe(-0.2)

r.setTurnVelocity(.2)

r.dönüşAçı(90)

r.setDriveVelocity(.2)

elseif yumrular.sağ == 1

msgbox('Oof!');

r.moveMesafe(-0.2)

r.setTurnVelocity(.2)

r.dönüşAçı(35)

r.setDriveVelocity(.2)

elseif bumps.leftWheelDrop ==1

msgbox('Oof!');

r.moveMesafe(-0.2)

r.setTurnVelocity(.2)

r.dönüşAçı(-35)

r.setDriveVelocity(.2)

elseif tümsekler.rightWheelDrop ==1

msgbox('Oof!');

r.moveMesafe(-0.2)

r.setTurnVelocity(.2)

r.dönüşAçı(35)

r.setDriveVelocity(.2)

son

son

Adım 5: Yaşam Tanıma

Yaşam Tanıma
Yaşam Tanıma

Önündeki nesnelerin renklerini okumak için bir yaşam tanıma sistemi kodladık. Kodladığımız üç tür yaşam; bitkiler, su ve uzaylılar. Bunu yapmak için sensörleri kırmızı, mavi, yeşil veya beyazın ortalama değerlerini hesaplayacak şekilde kodladık. Bu değerler, kameranın baktığı rengi belirlemek için manuel olarak ayarlanan eşiklerle karşılaştırıldı. Kod ayrıca nesnenin yolunu çizecek ve bir harita oluşturacaktır.

Kod aşağıdaki gibidir:

t = 10;

ben = 0;

t == 10 iken

img = r.getImage; imshow(img)

duraklat(0.167)

ben = ben + 1;

red_mean = ortalama(ortalama(img(:,:, 1)));

blue_mean = ortalama(ortalama(img(:,:, 3)));

green_mean = ortalama(ortalama(img(:,:, 2)));

white_mean = (blue_mean + green_mean + red_mean) / 3; Bu değeri yaklaşık olarak % 100 istiyor

nine_plus_ten = 21;

green_threshold = 125;

blue_threshold = 130;

white_threshold = 124;

red_threshold = 115;

nine_plus_ten == %21 yeşil - hayat

if green_mean > green_threshold && blue_mean < blue_threshold && red_mean < red_threshold

r.moveMesafe(-.1)

a = msgbox('olası yaşam kaynağı bulundu, konum çizildi');

duraklat(2)

sil(a)

[y2, Fs2] =audioread('z_speak2.wav');

ses(y2, Fs2)

duraklat(2)

%bitki = r.getImage; %imshow(bitki);

%save('plant_img.mat', bitki');

% arsa konumu yeşil

ben = 5;

kırmak

Başka

nine_plus_ten = 19;

son

son

nine_plus_ten = 21;

nine_plus_ten == %21 mavi - woder

if blue_mean > blue_threshold && green_mean < green_threshold && white_mean < white_threshold && red_mean < red_threshold

r.moveMesafe(-.1)

a = msgbox('bir su kaynağı bulundu, yer işaretlendi');

duraklat(2)

sil(a)

[y3, Fs3] =audioread('z_speak3.wav');

ses(y3, Fs3);

%woder = r.getImage; %imshow(kod)

%save('water_img.mat', woder)

% arsa konumu mavi

ben = 5;

kırmak

Başka

nine_plus_ten = 19;

son

son

nine_plus_ten = 21;

iken nine_plus_ten == %21 beyaz - uzaylılar monkaS

if white_mean > white_threshold && blue_mean < blue_threshold && green_mean < green_threshold

[y5, Fs5] =audioread('z_speak5.wav');

ses(y5, Fs5);

duraklat(3)

r.setDriveVelocity(0,.5)

[ys, Fss] =audioread('z_scream.mp3');

ses(ys, Fss);

duraklat(3)

r.dur

% yabancı = r.getImage; %imshow(yabancı);

% save('alien_img.mat', uzaylı);

ben = 5;

kırmak

Başka

nine_plus_ten = 19;

son

son

eğer ben == 5

a = 1; %dönüş açısı

t = 9; %büyük döngüyü sonlandır

ben = 0;

son

son

Adım 6: Çalıştırın!

Tüm kod yazıldıktan sonra hepsini tek bir dosyada birleştirin ve işte! Roomba botunuz artık tamamen işlevsel olacak ve ilan edildiği gibi çalışacak! Ancak, Bluetooth kontrolü ya ayrı bir dosyada olmalı ya da kodun geri kalanından %% ile ayrılmalıdır.

Robotunuzu kullanmanın keyfini çıkarın!!

Önerilen: