Table des matières:

Roomba Explorer : 4 étapes
Roomba Explorer : 4 étapes

Vidéo: Roomba Explorer : 4 étapes

Vidéo: Roomba Explorer : 4 étapes
Vidéo: Take Apart a Robot: Roomba i7 Robot Vacuum 2024, Novembre
Anonim
Explorateur de Roomba
Explorateur de Roomba

En utilisant MATLAB et le robot Create2 d'iRobot, ce projet explorera différentes zones d'un emplacement inconnu. Nous avons utilisé les capteurs du robot pour aider à manœuvrer un terrain dangereux. En obtenant des photos et un flux vidéo d'un Raspberry Pi qui est connecté, nous avons pu déterminer les obstacles auxquels le robot sera confronté, et ils seront classés.

Pièces et matériaux

Pour ce projet, vous aurez besoin

-un ordinateur

-la dernière version de MATLAB (MATLAB R2018b a été utilisé pour ce projet)

- boîte à outils roombaInstall

-Robot Create2 d'iRobot

-Framboise Pi avec appareil photo

Étape 1: Initialisation et capteurs

Initialisation et capteurs
Initialisation et capteurs

Avant de commencer toute programmation, nous avons téléchargé la boîte à outils roombaInstall, qui permettait d'accéder aux différents composants du Robot.

Initialement, nous avons créé une interface graphique pour initialiser n'importe quel Robot. Pour ce faire, vous devez saisir le numéro du Robot en entrée. Cela permettra d'accéder au robot pour exécuter notre programme. Nous avons travaillé pour que le robot puisse manœuvrer sur les nombreux terrains qu'il rencontrerait. Nous avons implémenté les capteurs Cliff, les capteurs de choc lumineux et les capteurs de choc physique, en utilisant leurs sorties pour déclencher le robot afin de changer sa vitesse et/ou sa direction. Lorsque l'un des six capteurs de choc lumineux détecte un objet, la valeur qu'ils génèrent diminue, entraînant une diminution de la vitesse du robot pour éviter une collision à pleine vitesse. Lorsque le robot entre finalement en collision avec un obstacle, les capteurs de bosse physique signaleront une valeur supérieure à zéro; à cause de cela, le robot s'arrêtera, il n'y aura donc plus de collisions et plus de fonctions pourront être mises en action. Pour les Cliff Sensors, ils liront la luminosité de la zone qui les entoure. Si la valeur est supérieure à 2800, nous avons déterminé que le Robot serait sur un sol stable et sûr. Mais, si la valeur est inférieure à 800, les capteurs de falaise détecteront une falaise, s'arrêtant immédiatement pour ne pas tomber. Toute valeur intermédiaire a été déterminée pour représenter l'eau et entraînera l'arrêt de l'action du robot. En utilisant les capteurs ci-dessus, la vitesse du robot est modifiée, ce qui nous permet de mieux déterminer s'il y a un danger.

Ci-dessous le code (de MATLAB R2018b)

%% Initialisation

dlgPrompts = {'Numéro de Roomba'};

dlgTitle = 'Sélectionnez votre Roomba';

dlgDefaults = {''};

opts. Resize = 'on';

dlgout = inputdlg(dlgPrompts, dlgTitle, 1, dlgDefaults, opts) % Créer une fenêtre qui invite l'utilisateur à saisir son numéro de roomba

n=str2double(dlgout{1});

r=roomba(n); % Initialise la détermination de la vitesse du Roomba %% spécifiée par l'utilisateur à partir des capteurs de choc lumineux tandis que true s=r.getLightBumpers; % obtiennent des capteurs de choc léger

lbumpout_1=extractfield(s, 'gauche'); % prend les valeurs numériques des capteurs et les rend plus utilisables lbumpout_2=extractfield(s, 'leftFront');

lbumpout_3=extractfield(s, 'leftCenter');

lbumpout_4=extractfield(s, 'rightCenter');

lbumpout_5=extractfield(s, 'rightFront');

lbumpout_6=extractfield(s, 'right');

lbout=[lbumpout_1, lbumpout_2, lbumpout_3, lbumpout_4, lbumpout_5, lbumpout_6] % convertit les valeurs en matrice

sLbump=sort(lbout); La matrice %sorts à la valeur la plus basse peut être extraite

lowLbump=sLbump(1); speed=.05+(lowLbump)*.005 % en utilisant la valeur la plus basse, qui représente les obstacles proches, pour déterminer la vitesse, une vitesse plus élevée lorsque rien n'est détecté

r.setDriveVelocity(vitesse, vitesse)

finir

% de pare-chocs physiques

b=r.getBumpers; %Sortie vrai, faux

bsen_1=extractfield(b, 'gauche')

bsen_2=extractfield(b, 'droit')

bsen_3=extractfield(b, 'front')

bsen_4=extractfield(b, 'leftWheelDrop')

bsen_5=extractfield(b, 'rightWheelDrop')

bumps=[bsen_1, bsen_2, bsen_3, bsen_4, bsen_5] tbump=sum(bums)

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

finir

% de capteurs de falaise

c=r.getCliffSensors %% 2800 safe, sinon eau

csen_1=extractfield(c, 'gauche')

csen_2=extractfield(c, 'droit')

csen_3=extractfield(c, 'leftFront')

csen_4=extractfield(c, 'rightFront')

falaises=[csen_1, csen_2, csen_3, csen_4]

ordcliff=sort(falaises)

si ordcliff(1) < 2750

r.setDriveVelocity(0, 0)

si falaise<800

disp 'falaise'

autre

faire couler de l'eau

finir

r. TurnAngle(45)

finir

Étape 2: Obtenir des données

Une fois les capteurs de choc physiques déclenchés, le robot implémentera son Raspberry Pi embarqué pour prendre une photo de l'obstacle. Après avoir pris une photo, en utilisant la reconnaissance de texte s'il y a du texte dans l'image, le Robot déterminera quel est l'obstacle et ce que dit l'obstacle.

img = r.getImage; imshow(img);

imwrite(img, 'imgfromcamera.jpg')

photo = imread('imgfromcamera.jpg')

ocrRésultats = ocr(photo)

reconnuText = ocrResults. Text;

chiffre;

imshow(photo) text(220, 0, RecognizedText, 'BackgroundColor', [1 1 1]);

Étape 3: Terminer la mission

Lorsque le robot détermine que l'obstacle est à la maison, il terminera sa mission et restera à la maison. Une fois la mission terminée, le robot enverra un e-mail d'alerte indiquant qu'il est rentré chez lui et il enverra les images qu'il a prises tout au long de son voyage.

% d'envoi d'e-mails

setpref('Internet', 'SMTP_Server', 'smtp.gmail.com');

setpref('Internet', 'E_mail', '[email protected]'); % compte de messagerie à envoyer depuis setpref('Internet', 'SMTP_Username', 'enter sender email'); % nom d'utilisateur de l'expéditeur setpref('Internet', 'SMTP_Password', 'entrez le mot de passe de l'expéditeur'); % mot de passe des expéditeurs

props = 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('Entrez l'e-mail de réception', 'Roomba', 'Roomba est de retour à la maison !!', 'imgfromcamera.jpg') % compte de messagerie à envoyer à

Le Robot est alors terminé.

Étape 4: Conclusion

Conclusion
Conclusion

Le programme MATLAB inclus est séparé de l'ensemble du script utilisé avec le Robot. Dans le brouillon final, assurez-vous de mettre tout le code, à l'exception de l'étape d'initialisation, dans une boucle while pour vous assurer que les pare-chocs fonctionnent en permanence. Ce programme peut être modifié en fonction des besoins de l'utilisateur. La configuration de notre Robot est affichée.

*Rappel: N'oubliez pas que la boîte à outils roombaInstall est nécessaire pour que MATLAB interagisse avec le Robot et le Raspberry Pi embarqué.

Conseillé: