İçindekiler:

Roomba Explorer: 4 Adım
Roomba Explorer: 4 Adım

Video: Roomba Explorer: 4 Adım

Video: Roomba Explorer: 4 Adım
Video: Робот-пылесос: как правильно пользоваться 2024, Kasım
Anonim
Roomba Gezgini
Roomba Gezgini

MATLAB ve iRobot'un Create2 Robot'unu kullanan bu proje, bilinmeyen bir konumun çeşitli alanlarını keşfedecek. Tehlikeli bir arazide manevra yapmaya yardımcı olmak için Robot üzerindeki sensörleri kullandık. Ekli bir Raspberry Pi'den fotoğraf ve video beslemesi alarak Robot'un karşılaşacağı engelleri belirledik ve bunlar sınıflandırılacak.

Parçalar ve Malzemeler

Bu proje için ihtiyacınız olacak

-bir bilgisayar

-MATLAB'ın en yeni versiyonu (bu proje için MATLAB R2018b kullanılmıştır)

- roombaInstall araç kutusu

-iRobot'un Create2 Robotu

-Kameralı Raspberry Pi

Adım 1: Başlatma ve Sensörler

Başlatma ve Sensörler
Başlatma ve Sensörler

Herhangi bir programlamaya başlamadan önce, Robotun farklı bileşenlerine erişim sağlayan roombaInstall araç kutusunu indirdik.

Başlangıçta, herhangi bir Robotu başlatmak için bir GUI oluşturduk. Bunu yapmak için, giriş olarak Robot numarasını yazmanız gerekir. Bu, robotun karşılaşacağı birçok arazide manevra yapmasını sağlamak için çalıştığımız Robota programımızı çalıştırma erişimini sağlayacaktır. Uçurum Sensörlerini, Işık Çarpma Sensörlerini ve Fiziksel Çarpma Sensörlerini, çıkışlarını kullanarak Robotu hızını ve/veya yönünü değiştirmek için harekete geçirmek için kullandık. Altı Işık Çarpma Sensöründen herhangi biri bir nesne algıladığında, çıktıları değer düşecek ve tam hızda çarpışmayı önlemek için Robotun hızının düşmesine neden olacaktır. Robot sonunda bir engelle çarpıştığında, Fiziksel Çarpma sensörleri sıfırdan büyük bir değer bildirir; bu nedenle, Robot duracak, böylece daha fazla çarpışma olmayacak ve daha fazla fonksiyon devreye sokulabilecek. Uçurum Sensörleri için etraflarındaki alanın parlaklığını okuyacaklardır. Değer 2800'den büyükse, Robot'un sabit bir zeminde ve güvenli olacağını belirledik. Ancak, değer 800'den küçükse, Uçurum Sensörleri bir uçurum algılayacak ve düşmemek için hemen duracaktır. Aradaki herhangi bir değerin suyu temsil ettiği belirlendi ve Robotun hareketini durdurmasına neden olacak. Yukarıdaki sensörler kullanılarak Robotun hızı değiştirilerek herhangi bir tehlike olup olmadığını daha iyi belirleyebiliriz.

Aşağıdaki kod (MATLAB R2018b'den)

%% Başlatma

dlgPrompts = {'Oda Numarası'};

dlgTitle = 'Roomba'nızı Seçin';

dlgDefaults = {''};

opts. Resize = 'açık';

dlgout = inputdlg(dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Kullanıcıdan oda numarasını girmesini isteyen pencere oluştur

n=str2double(dlgout{1});

r=odaba(n); % Kullanıcı tarafından belirlenen Roomba %% Hız belirlemeyi Light Bump Sensörlerinden başlatırken true s=r.getLightBumpers; % ışık çarpma sensörleri olsun

lbumpout_1=extractfield(s, 'sol'); % sensörlerin sayısal değerlerini alır ve onları daha kullanışlı hale getirir lbumpout_2=extractfield(s, 'leftFront');

lbumpout_3=extractfield(s, 'leftCenter');

lbumpout_4=extractfield(s, 'rightCenter');

lbumpout_5=extractfield(s, 'rightFront');

lbumpout_6=extractfield(s, 'sağ');

lbout=[lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] %, değerleri matrise dönüştürür

sLbump=sort(lbout); % matrisi en düşük değere göre sıralar

lowLbump=sLbump(1); speed=.05+(lowLbump)*.005 Hızı belirlemek için yakın engelleri temsil eden en düşük değeri kullanarak, hiçbir şey algılanmadığında daha yüksek hız

r.setDriveVelocity(hız, hız)

son

% Fiziksel Tamponlar

b=r.getTamponlar; %Çıkış doğru, yanlış

bsen_1=extractfield(b, 'sol')

bsen_2=extractfield(b, 'sağ')

bsen_3=extractfield(b, 'ön')

bsen_4=extractfield(b, 'leftWheelDrop')

bsen_5=extractfield(b, 'rightWheelDrop')

tümsekler=[bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump=toplam(serseriler)

if tbump>0 r.setDriveVelocity(0, 0)

son

% Uçurum Sensörleri

c=r.getCliffSensors %% 2800 güvenli, yoksa su

csen_1=extractfield(c, 'sol')

csen_2=extractfield(c, 'sağ')

csen_3=extractfield(c, 'leftFront')

csen_4=extractfield(c, 'rightFront')

uçurumlar=[csen_1, csen_2, csen_3, csen_4]

ordcliff=sort(uçurumlar)

ordcliff(1) < 2750 ise

r.setDriveVelocity(0, 0)

eğer uçurum<800

disp 'uçurum'

Başka

'su' dağıtmak

son

r. Dönüş Açısı(45)

son

2. Adım: Veri Alma

Fiziksel Çarpma Sensörleri tetiklendikten sonra, Robot, engelin fotoğrafını çekmek için yerleşik Raspberry Pi'yi uygulayacaktır. Bir fotoğraf çektikten sonra, resimde metin varsa metin tanıma özelliğini kullanarak Robot engelin ne olduğunu ve engelin ne söylediğini belirleyecektir.

img = r.getImage; imshow(img);

imwrite(img, 'imgfromcamera.jpg')

fotoğraf = imread('imgfromcamera.jpg')

ocrResults = ocr(fotoğraf)

tanınanText = ocrResults. Text;

figür;

imshow(fotoğraf) text(220, 0, tanınanText, 'BackgroundColor', [1 1 1]);

Adım 3: Görevi Bitirmek

Robot engelin EV olduğunu belirlediğinde görevini tamamlayacak ve evde kalacaktır. Görevin tamamlanmasından sonra Robot, eve döndüğüne dair bir e-posta uyarısı gönderecek ve yolculuğu boyunca çektiği görüntüleri gönderecektir.

% E-mail göndermek

setpref('İnternet', 'SMTP_Sunucusu', 'smtp.gmail.com');

setpref('İnternet', 'E_mail', '[email protected]'); setpref'ten gönderilecek % posta hesabı('İnternet', 'SMTP_Kullanıcı Adı', 'gönderen e-posta adresini girin'); % gönderici kullanıcı adı setpref('İnternet', 'SMTP_Password', 'gönderen şifresini girin'); % Gönderici şifresi

sahne = java.lang. System.getProperties; props.setProperty('mail.smtp.auth', 'true'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465');

sendmail('Alma e-postasını girin', 'Roomba', 'Roomba eve döndü!!', 'imgfromcamera.jpg') Gönderilecek % posta hesabı

Ardından Robot tamamlanır.

4. Adım: Sonuç

Çözüm
Çözüm

Dahil edilen MATLAB programı, Robot ile kullanılan tüm komut dosyasından ayrılmıştır. Son taslakta, tamponların sürekli çalıştığından emin olmak için başlatma adımı dışındaki tüm kodu bir süre döngüsüne koyduğunuzdan emin olun. Bu program kullanıcının ihtiyaçlarına göre düzenlenebilir. Robotumuzun konfigürasyonu gösterilir.

*Hatırlatma: MATLAB'ın Robot ve yerleşik Raspberry Pi ile etkileşime girmesi için roombaInstall araç kutusunun gerekli olduğunu unutmayın.

Önerilen: