İçindekiler:
- Adım 1: Sarf Malzemeleri
- Adım 2: İstenen Sonucu Karşılayacak Kodlama Geliştirin
- 3. Adım: Test Etme
- Adım 4: Görsel Çıktıları Gözlemleyin
Video: IRobot Create-Mars Expedition Rover Mark I: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Bu talimat, size MatLab kodlamasını kullanarak iRobot Create'i nasıl kuracağınızı öğretecektir. Robotunuz, şekilleri ayırt ederek mineral arama, uçurum sensörleri kullanarak engebeli arazide manevra yapma ve canlı bir besleme ile manuel olarak kontrol etme yeteneğine sahip olacak.
Adım 1: Sarf Malzemeleri
Bu proje için Roomba robot elektrikli süpürgenin programlanabilir bir versiyonu olan bir iRobot Create'e ihtiyacınız olacak. Robot, özellikle çarpma sensörleri, uçurum sensörleri ve "Light Bump" sensörleri olmak üzere bu proje için gereken tüm sensörlerle donatılmıştır. Ayrıca kablosuz iletişim, canlı programlama ve canlı video beslemesi için kullanılan bir Raspberry Pi ve video kameraya da ihtiyacınız olacak. Son olarak, Raspberry Pi ve kamera için 3D baskılı bir montaj parçasına ihtiyacınız olacak.
Adım 2: İstenen Sonucu Karşılayacak Kodlama Geliştirin
Roomba'nızı bağladıktan sonra, istediğiniz girdilerden sonra istediğiniz çıktıları size verecek bir Matlab kodu oluşturmanız gerekecektir.
Kod burada görülebilir:
%Roomba Projesi%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal(mheal) %4/11/19 %Problem Açıklama: Mars'ın %keşfi/yerleşimi sırasında insanlara yardım etmek için bir gezici oluşturun. %Çözüm yöntemi: Organik maddeyi kontrol etmek için %ışık tamponları, uçurum sensörleri ve kamera kullanarak organik(yeşil) madde arayın. Gezicinin tamponlar, uçurum sensörleri ve tekerlek yüksekliği sensörleri kullanarak engebeli arazide gezinmesine izin verin. İnsanların geziciyi güvenli bir mesafeden kontrol etmesini ve mineralleri manuel olarak aramasını sağlayın. seçimler = {'HAYAT', 'KABA ARAZİ', 'KULLANICI KONTROLÜ'}; %İletişim menüsünde üç seçenek Ayar = menü('', seçenekler) Ayar>0 ise %Seçenek seçilirse kullanıcı onay seçimlerini isteyin2 = {'Evet', 'Hayır'} %"evet" veya "Hayır" için bir hücre dizisi oluşturun " seçim Onayla = menü(['"' seçimler{Ayar} '" modunu seçtiniz.'], seçimler2) %Kullanıcı ayar seçimini onaylayın eğer Onayla==1 ise Ayar==1 ise %"LIFE" ayarının seçilip seçilmediğini kontrol edin i =0 iken i==0 r.setLEDDigits(num2str('LIFE')) %i=1:100 için LED'de 'LIFE' göster r.setDriveVelocity(0.05) %roomba'yı 0,05 m/sy'de ileriye taşı = r.getCliffSensors % Uçurum sensörü değerlerini "y" hücre yapısında alın ve saklayın l = r.getLightBumpers %Işık çarpma değerlerini alın ve yapı "f"de saklayın l.left>100 %Sol ışık tamponunun kapsanıp kapsanmadığını kontrol edin r.moveDistance(-0.05)) %roomba'yı 0,05 metre geriye taşı r.turnAngle(20) %roomba'yı 20 derece sola döndür img=r.getImage %roomba rect üzerindeki ahududu pasta kamerasından görüntü al = [100 0 150 150]; img = imcrop(img, rect) merkeze odaklanmak için resmi %kırp kırmızı = ortalama(mean(img(:,:, 1))) %ortalama kırmızı yoğunluk yeşil = ortalama(mean(img(:,:, 2))) %ortalama yeşil yoğunluk mavi = ortalama(mean(img(:,:, 3))) yeşil ise %ortalama mavi yoğunluk>kırmızı && yeşil>mavi %Bitkinin resimde olup olmadığını kontrol edin d=msgbox(['Yaşam bulundu! ']); %"Yaşam bulundu!" yazan bir mesaj kutusu görüntüle bekle(d); end elseif l.leftFront>%100 Sol/ön ışık tamponunun kapalı olup olmadığını kontrol edin r.moveDistance(-0.05) %roomba'yı 0,05 metre geriye taşıyın img=r.getImage %roomba'daki ahududu pastası kamerasından görüntü alın ve 'img' değişkeninde saklayın ' doğru = [100 0 150 150]; img = imcrop(img, rect) merkeze odaklanmak için resmi %kırp kırmızı = ortalama(mean(img(:,:, 1))) %ortalama kırmızı yoğunluk yeşil = ortalama(mean(img(:,:, 2))) %ortalama yeşil yoğunluk mavi = ortalama(mean(img(:,:, 3))) yeşil ise %ortalama mavi yoğunluk>kırmızı && yeşil>mavi %Bitkinin resimde olup olmadığını kontrol edin d=msgbox(['Yaşam bulundu! ']); %"Yaşam bulundu!" yazan bir mesaj kutusu görüntüle bekle(d); end elseif l.leftCenter>%100 Sol/orta ışık tamponunun kapalı olup olmadığını kontrol edin r.moveDistance(-0.05) %roomba'yı 0,05 metre geriye taşıyın img=r.getImage %roomba'daki ahududu pastası kamerasından görüntü alın ve 'img' değişkeninde saklayın ' doğru = [100 0 150 150]; img = imcrop(img, rect) merkeze odaklanmak için resmi %kırp kırmızı = ortalama(mean(img(:,:, 1))) %ortalama kırmızı yoğunluk yeşil = ortalama(mean(img(:,:, 2))) %ortalama yeşil yoğunluk mavi = ortalama(mean(img(:,:, 3))) yeşil ise %ortalama mavi yoğunluk>kırmızı && yeşil>mavi %Bitkinin resimde olup olmadığını kontrol edin d=msgbox(['Yaşam bulundu! ']); %"Yaşam bulundu!" yazan bir mesaj kutusu görüntüle bekle(d); end elseif l.rightCenter>100 %Sağ/orta ışık tamponunun kapalı olup olmadığını kontrol edin r.moveDistance(-0.05)%Odayı 0,05 metre geriye taşıyın img=r.getImage %roomba'daki ahududu pastası kamerasından görüntü alın ve 'img değişkeninde saklayın ' doğru = [100 0 150 150]; img = imcrop(img, rect) merkeze odaklanmak için resmi %kırp kırmızı = ortalama(mean(img(:,:, 1))) %ortalama kırmızı yoğunluk yeşil = ortalama(mean(img(:,:, 2))) %ortalama yeşil yoğunluk mavi = ortalama(mean(img(:,:, 3))) yeşil ise %ortalama mavi yoğunluk>kırmızı && yeşil>mavi %Bitkinin resimde olup olmadığını kontrol edin d=msgbox(['Yaşam bulundu! ']); %"Yaşam bulundu!" yazan bir mesaj kutusu görüntüle bekle(d); end elseif l.rightFront>100 %Sağ/ön ışık tamponunun kapalı olup olmadığını kontrol edin r.moveDistance(-0.05)%Odayı 0,05 metre geriye taşıyın img=r.getImage %roomba'daki ahududu pastası kamerasından görüntü alın ve 'img' değişkeninde saklayın ' doğru = [100 0 150 150]; img = imcrop(img, rect) merkeze odaklanmak için resmi %kırp kırmızı = ortalama(mean(img(:,:, 1))) %ortalama kırmızı yoğunluk yeşil = ortalama(mean(img(:,:, 2))) %ortalama yeşil yoğunluk mavi = ortalama(mean(img(:,:, 3))) yeşil ise %ortalama mavi yoğunluk>kırmızı && yeşil>mavi %Bitkinin resimde olup olmadığını kontrol edin d=msgbox(['Yaşam bulundu! ']); %"Yaşam bulundu!" yazan bir mesaj kutusu görüntüle bekle(d); end elseif l.right>100 %Sağ ışık tamponunun kapalı olup olmadığını kontrol edin r.moveDistance(-0.05)%Odayı 0,05 metre geriye taşı r.turnAngle(-20)%Odayı sağa 20 derece döndür img=r.getImage %Şuradan görüntü al rasberry pie kamerayı roomba'ya yerleştirin ve 'img' değişkeninde saklayın rect = [100 0 150 150]; img = imcrop(img, rect) merkeze odaklanmak için resmi %kırp kırmızı = ortalama(mean(img(:,:, 1))) %ortalama kırmızı yoğunluk yeşil = ortalama(mean(img(:,:, 2))) %ortalama yeşil yoğunluk mavi = ortalama(mean(img(:,:, 3))) yeşil ise %ortalama mavi yoğunluk>kırmızı && yeşil>mavi %Bitkinin resimde olup olmadığını kontrol edin d=msgbox(['Yaşam bulundu! ']); %"Yaşam bulundu!" yazan bir mesaj kutusu görüntüle bekle(d); end elseif y.leftÖn<1500 %roomba'nın sol/ön kısmının uçurumdan uzak olup olmadığını kontrol edin r.moveDistance(-0.1, 0.05) %roomba'yı 0,05 m/s'de 0,1 metre geriye taşı r.turnAçı(-5) %Rotate roomba 5 derece CW başkaysa y.sağÖn<1500 %roomba'nın sağ/ön kısmının uçurumdan uzak olup olmadığını kontrol edin r.moveDistance(-0.1, 0.05) %Odayı 0,05 m/s'de 0,1 metre geriye taşı r.dönüşAçı(5) %Rotate roomba 5 derece CCW aksi takdirde y.sol<1000 %roomba'nın sol tarafının uçurumdan uzak olup olmadığını kontrol edin r.moveDistance(-0.05, 0.05) %Odayı 0,05 m/s'de 0,05 metre geriye taşı r.dönüşAçısı(-10) %Odayı 10 derece döndür CW elseif y.right0 %Eğer Devam==1 ise butona basılırsa çalıştır i=0 %Ömrü aramaya devam et başka i=1 %End LIFE modu end end end elseif Ayar==2 %"KABA ARAZİ" ayarının seçilip seçilmediğini kontrol edin i=0 iken i==0 r.setLEDDigits(num2str('RGH')) % i=1:1000 için LED Ekranda 'Kaba' görüntüleyin r.setDriveVelocity(0.05) %roomba sürücü hızını 0,05 m/sx olarak ayarlayın = r.getBumpers % "x" yapısında tampon sensör değerlerini alın ve saklayın y = r.get CliffSensors %x.sağ==1 ise uçurum sensörü değerlerini "y" yapısında alın ve saklayın %Sağ tampona basılıp basılmadığını kontrol edin r.turnAngle(10) %Odayı sola 10 derece döndürün x.left==1 ise %Sol olup olmadığını kontrol edin tampon basılı r.turnAngle(-10) %Odayı sağa 10 derece döndür x.front==1 %Ön tampona basılıp basılmadığını kontrol edin r.turnAngle(20) %Odayı 20 derece sola çevirin x.rightWheelDrop==1 % Sağ tekerleğin düşüp düşmediğini kontrol edin r.turnAngle(-20)%Rotate roomba 20 derece CW yoksa x.leftWheelDrop==1 %Sağ tekerleğin düştüğünü kontrol edin r.turnAngle(20) %Rotate roomba 20 derece CCW başkaysa y.leftÖn< 1500 %roomba'nın ön sol kısmının uçurumdan uzakta olup olmadığını kontrol edin r.moveDistance(-0.05, 0.05) %roomba'yı 0,05 m/s'de 0,05 metre geriye taşı r.dönüşAçısı(-5)%Odayı CW aksi takdirde 5 derece CW döndürün. 1500 %roomba'nın sağ ön kısmının uçurumdan uzakta olup olmadığını kontrol edin r.moveMesafe(-0.05, 0.05)%Odayı 0,05 m/s'de 0,05 metre geriye taşıyın r.dönüşAçısı(5) %Odayı sola 5 derece döndürme aksi takdirde sol. %Sol kısım o olup olmadığını kontrol edin f roomba uçurumdan uzakta r.moveDistance(-0.05, 0.05)%roomba'yı 0,05 m/s'de 0,05 metre geriye taşı r.turnAngle(-10)%Odayı CW 10 derece döndür yoksa Devam==1 ise y.doğru0 %Engebeli araziye devam et else i=1 %End engebeli arazi end end end else %Manuel Mod i=0 r.setLEDDigits(num2str('USER')) %LED Ekranda 'KULLANICI'yı Görüntüle d=msgbox(['Yön Tuşları - Hareket; S - Rover'ı Durdur; ESC - Son Kullanıcı Kontrolü; A - Kaynağı Bul']); bekle(d); iken i==0 r.showCamera %Ahududu pastası kamerası canlı beslemesini ayrı bir pencerede aç D=getkey(1) Kullanıcı tarafından basılan %Retrieve tuşuna, D==30 ise ASCII değerini D değişkeni olarak saklayın "yukarı" okunun olup olmadığını kontrol edin basıldı r.setDriveVelocity(0.1) %roomba'yı 0,2 m/s'de ileri gönder yoksa D==28 %"sol" oka basılıp basılmadığını kontrol edin r.setDriveVelocity(0) %roomba'nın ileri veya geri hareketini durdur r.turnAngle(15, 0.05)%Odayı 0,05 m/s'de sola 45 derece döndür yoksa D==31 %"aşağı" okuna basılıp basılmadığını kontrol et r.setDriveVelocity(-0.1) %Odayı 0,2 m/sn'de geriye doğru hareket ettir yoksa D==29 % "Sağ" oka basılıp basılmadığını kontrol edin r.setDriveVelocity(0) %Odanın ileri veya geri hareketini durdurun r.turnAngle(-15, 0.05) %Odayı 0,05 m/s'de 45 derece CW döndürün yoksa D==27 %Kontrol edin "esc" (escape) tuşuna basıldı i=1 %Döngüden çıkmak için "i" değişkeninin değerini değiştirin d=msgbox('"Kullanıcı Kontrolünden Çıkılıyor"') %Kullanıcıya manuel moddan çıkıldığını bildirin yoksa D== 115 %"s" tuşuna basılıp basılmadığını kontrol edin r.setDriveVelocity(0) % ileri veya geri gidiyorsa D==97 %"a"ya basıldığını kontrol edin image = r.getImage; imwrite(image, 'image.png') W = Classify(image) K = mode(W) eğer K == 3 d=msgbox('Kaynak bulundu') % Dikdörtgen kaynak algılanırsa görüntüle waitfor(d); %Kullanıcının "d" mesaj kutusunu kapatmasını bekle elseif K == 0 d=msgbox('Kaynak Değil:(') % Dikdörtgen kaynak algılanmadıysa göster waitfor(d); %Kullanıcının "d" mesaj kutusunu kapatmasını bekle end else d=msgbox('Geçerli bir anahtar girişi değil.') %Kullanıcı "ayar seç" menüsünü kapatırsa görüntüle waitfor(d); %Kullanıcının "d" mesaj kutusunu kapatmasını bekleyin end waitfor(d); %Bekleyin kullanıcı "d" mesaj kutusunu kapatacak end end else d=msgbox('Hoşçakal') %Seçenekler kapalıysa hoşçakal der end waitfor(d);
3. Adım: Test Etme
Kodunuz yazıldıktan sonra Roomba'nızı test etmeniz gerekecektir. Kodunuz doğru gibi görünse de, Roomba'nızın tanımlamasını istediğiniz nesneleri doğru bir şekilde tanımak için, özellikle renk veya şekil için değerlerinizin çoğunun değiştirilmesi gerekecektir.
Adım 4: Görsel Çıktıları Gözlemleyin
Roomba'nızı görsel çıktılarına göre başarılı bir şekilde programlayıp programlamadığınız çok açık olacaktır.
Çıktılar şunları içerir:
- Şekil Algılama: Roomba'nın doğru mineralleri bulmak için şekilleri düzgün bir şekilde ayırt etme yeteneği
- Engebeli Arazi Manevraları: Uçurumlardan veya karanlık alanlardan kaçınır
- Manuel Mod: Canlı yayın ve Roomba'yı kontrol etme yeteneği
- Resimler: Minerallerin resimleri
- Life Found!: Bitkinizin organik yaşamı tanımladığını belirten bir MatLab metin kutusu.
Eğitimimizin sonu bu, yeni Mars Expedition Rover'ınızın keyfini çıkarın!
Önerilen:
Iron Man Mark II Kask: 4 Adım
Iron Man Mark II Kask: Casco replica mark II de 2 partes, kasko y pulsera unidos por cadena que conduce el Cableado, alimentado por 4 baterías AA ubicadas en la parte posterior junto al microcontrolador y el switch de encendido.Casco: Servomotorlar para el cier uygun
Mark Twain Evi Perili: 5 Adım
Mark Twain House Haunting: Mark Twain evinin ünlü yazar tarafından perili olduğu söyleniyor. Bu Eğitilebilir Kitapta, "keşfettim" Twain'in hayaletinin gerçekten de bu tarihi eski eve musallat olduğunu hiçbir şüpheye yer bırakmayacak şekilde kanıtlayan eski bir fotoğraf
Nihai Bira Pong Makinesi - PongMate CyberCannon Mark III: 6 Adım (Resimlerle)
Nihai Bira Pong Makinesi - PongMate CyberCannon Mark III: GirişPongMate CyberCannon Mark III, şimdiye kadar halka satılan en yeni ve en gelişmiş bira pong teknolojisidir. Yeni CyberCannon ile herhangi bir kişi bira pong masasında en korkulan oyuncu olabilir. Bu nasıl p
IRobot Create'in Komut Modülünü Linux ile Kullanma: 4 Adım
IRobot Create'in Komut Modülünü Linux İle Kullanmak: iRobot, linux kullanıcılarına komut modülünü kullanmanın bir yolunu sağlamadığından, bunu kendim çözmek zorunda kaldım. Korkmayın, hiç de zor değil, gerçekten. Tek yapmanız gereken birkaç komut dosyası çalıştırmak. Haydi başlayalım, olur mu?
Bir IRobot Create to Paint'i Değiştirme: 6 Adım (Resimlerle)
Bir IRobot Create to Paint'i Değiştirme: Bu, muhtemelen robotlarla hiç deneyimi olmayan biri tarafından tamamlanabilecek bir robotik projesidir. Bunu söylüyorum çünkü başlamadan önce robotlarla ilgili hiçbir deneyimim yoktu. Ya da program yazmak. Aslında, nasıl çizileceğini biliyordum ve bu