İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
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
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
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
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
Ö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!!