Table des matières:

IRobot Create-Mars Expedition Rover Mark I : 4 étapes
IRobot Create-Mars Expedition Rover Mark I : 4 étapes

Vidéo: IRobot Create-Mars Expedition Rover Mark I : 4 étapes

Vidéo: IRobot Create-Mars Expedition Rover Mark I : 4 étapes
Vidéo: Perseverance Mars Rover Landing- Inside Story 2024, Juillet
Anonim
IRobot Create-Mars Expedition Rover Mark I
IRobot Create-Mars Expedition Rover Mark I

Cette instructable vous apprendra comment configurer l'iRobot Create en utilisant le codage MatLab. Votre robot aura la capacité de rechercher des minéraux en distinguant des formes, de manœuvrer sur un terrain accidenté grâce à l'utilisation de capteurs de falaise et pourra être contrôlé manuellement via un flux en direct.

Étape 1: Fournitures

Fournitures
Fournitures

Pour ce projet, vous aurez besoin d'un iRobot Create, qui est une version programmable du robot aspirateur Roomba. Le robot est équipé de tous les capteurs nécessaires à ce projet, en particulier des capteurs de choc, des capteurs de falaise et des capteurs "Light Bump". Vous aurez également besoin d'un Raspberry Pi et d'une caméra vidéo, utilisés pour la communication sans fil, la programmation en direct et le flux vidéo en direct. Enfin, vous aurez besoin d'un support imprimé en 3D pour le Raspberry Pi et la caméra.

Étape 2: Développer un codage pour satisfaire le résultat souhaité

Développer un codage pour satisfaire le résultat souhaité
Développer un codage pour satisfaire le résultat souhaité

Une fois que vous avez connecté votre Roomba, vous devrez créer un code Matlab qui vous donnera vos sorties souhaitées après vos entrées souhaitées.

Le code est visible ici:

%Projet Roomba%Brenten Arnold (barnol15); Julianne Korn (qdp218); Mike Heal(mheal) %4/11/19 %Problème Description: Créez un rover pour aider les humains pendant %exploration/habitation de mars. Méthode %Solution: recherche de matière organique (verte) à l'aide de % pare-chocs légers, de capteurs de falaise et d'une caméra pour vérifier la matière organique. Permettez au rover de naviguer sur un terrain accidenté grâce à l'utilisation de pare-chocs, de capteurs de % de falaise et de capteurs de hauteur de roue. Permettez aux humains de contrôler le rover à %a distance de sécurité et de rechercher manuellement des minéraux. choix = {'VIE', 'TERRAINS TERRAINS', 'CONTROLE UTILISATEUR'}; %Trois options dans le menu de la boîte de dialogue Paramètre = menu('', choix) si Paramètre>0 %Si l'option choisie demande confirmation à l'utilisateur choix2 = {'Oui', 'Non'} %Créer un tableau de cellules pour "oui" ou "Non " choix Confirmer = menu(['Vous avez choisi "' choix{Réglages} '" mode.'], choix2) %Confirmez le choix de réglage utilisateur si Confirmer==1 si Réglage==1 %Vérifiez si le réglage « LIFE » a été choisi i =0 tandis que i==0 r.setLEDDigits(num2str('LIFE')) %Afficher 'LIFE' sur la LED pour i=1:100 r.setDriveVelocity(0,05) %Déplacer roomba vers l'avant à 0,05 m/sy = r.getCliffSensors %Récupérer et stocker les valeurs du capteur d'escarpement dans la structure cellulaire "y" l = r.getLightBumpers %Récupérer et stocker les valeurs de léger bump dans la structure "f" si l.left>100 %Vérifier si le pare-chocs gauche est couvert r.moveDistance(-0.05) % Déplacez le roomba vers l'arrière de 0,05 mètre r.turnAngle(20) % Faites pivoter le roomba de 20 degrés dans le sens antihoraire img=r.getImage % Obtenez l'image de la caméra rasberry pie sur le roomba rect = [100 0 150 150]; img = imcrop(img, rect) % recadrage de l'image à focaliser sur le centre rouge = moyenne(moyenne(img(:,:, 1))) % intensité rouge moyenne vert = moyenne(moyenne(img(:,:, 2))) %intensité verte moyenne bleu = moyenne(moyenne(img(:,:, 3))) %intensité bleue moyenne si vert>rouge && vert>bleu %Vérifiez si la plante est dans l'image d=msgbox(['Life found! ']); % Affichez une boîte de message indiquant « Vie trouvée ! » attendre(d); end elseif l.leftFront>100 % Vérifiez que le pare-chocs de la lumière gauche/avant est couvert r.moveDistance (-0,05) % Déplacez le roomba vers l'arrière de 0,05 mètre img=r.getImage % Obtenez l'image de la caméra rasberry pie sur le roomba et stockez-la dans la variable 'img ' rect = [100 0 150 150]; img = imcrop(img, rect) % recadrage de l'image à focaliser sur le centre rouge = moyenne(moyenne(img(:,:, 1))) % intensité rouge moyenne vert = moyenne(moyenne(img(:,:, 2))) %intensité verte moyenne bleu = moyenne(moyenne(img(:,:, 3))) %intensité bleue moyenne si vert>rouge && vert>bleu %Vérifiez si la plante est dans l'image d=msgbox(['Life found! ']); % Affichez une boîte de message indiquant « Vie trouvée ! » attendre(d); end elseif l.leftCenter>100 % Vérifiez si le pare-chocs de la lumière gauche/centre est couvert r.moveDistance (-0,05) % Déplacez le roomba vers l'arrière de 0,05 mètre img=r.getImage % Obtenez l'image de la caméra rasberry pie sur le roomba et stockez-la dans la variable 'img ' rect = [100 0 150 150]; img = imcrop(img, rect) % recadrage de l'image à focaliser sur le centre rouge = moyenne(moyenne(img(:,:, 1))) % intensité rouge moyenne vert = moyenne(moyenne(img(:,:, 2))) %intensité verte moyenne bleu = moyenne(moyenne(img(:,:, 3))) %intensité bleue moyenne si vert>rouge && vert>bleu %Vérifiez si la plante est dans l'image d=msgbox(['Life found! ']); % Affichez une boîte de message indiquant « Vie trouvée ! » attendre(d); end elseif l.rightCenter>100 % Vérifiez si le pare-chocs de la lumière droite/centrale est couvert r.moveDistance (-0,05)% Déplacez le roomba vers l'arrière de 0,05 mètres img=r.getImage % Obtenez l'image de la caméra rasberry pie sur le roomba et stockez-la dans la variable 'img ' rect = [100 0 150 150]; img = imcrop(img, rect) % recadrage de l'image à focaliser sur le centre rouge = moyenne(moyenne(img(:,:, 1))) % intensité rouge moyenne vert = moyenne(moyenne(img(:,:, 2))) %intensité verte moyenne bleu = moyenne(moyenne(img(:,:, 3))) %intensité bleue moyenne si vert>rouge && vert>bleu %Vérifiez si la plante est dans l'image d=msgbox(['Life found! ']); % Affichez une boîte de message indiquant « Vie trouvée ! » attendre(d); end elseif l.rightFront>100 % Vérifiez si le pare-chocs de la lumière avant/droite est couvert r.moveDistance (-0,05)% Déplacez le roomba vers l'arrière de 0,05 mètres img=r.getImage % Obtenez l'image de la caméra rasberry pie sur le roomba et stockez-la dans la variable 'img ' rect = [100 0 150 150]; img = imcrop(img, rect) % recadrage de l'image à focaliser sur le centre rouge = moyenne(moyenne(img(:,:, 1))) % intensité rouge moyenne vert = moyenne(moyenne(img(:,:, 2))) %intensité verte moyenne bleu = moyenne(moyenne(img(:,:, 3))) %intensité bleue moyenne si vert>rouge && vert>bleu %Vérifiez si la plante est dans l'image d=msgbox(['Life found! ']); % Affichez une boîte de message indiquant « Vie trouvée ! » attendre(d); end elseif l.right>100 %Vérifiez si le pare-chocs de la lumière droite est couvert r.moveDistance(-0,05)%Déplacez le roomba vers l'arrière de 0,05 mètre r.turnAngle(-20)%Faites pivoter le roomba de 20 degrés CW img=r.getImage %Obtenez l'image de caméra tarte aux framboises sur roomba et stocker dans la variable 'img' rect = [100 0 150 150]; img = imcrop(img, rect) % recadrage de l'image à focaliser sur le centre rouge = moyenne(moyenne(img(:,:, 1))) % intensité rouge moyenne vert = moyenne(moyenne(img(:,:, 2))) %intensité verte moyenne bleu = moyenne(moyenne(img(:,:, 3))) %intensité bleue moyenne si vert>rouge && vert>bleu %Vérifiez si la plante est dans l'image d=msgbox(['Life found! ']); % Affichez une boîte de message indiquant « Vie trouvée ! » attendre(d); end elseif y.leftFront<1500 %Vérifiez si la partie gauche/avant du roomba est hors de la falaise r.moveDistance(-0,1, 0,05) %Déplacez le roomba vers l'arrière de 0,1 mètre à 0,05 m/s r.turnAngle(-5) %Rotate roomba 5 degrés CW sinon y.rightFront<1500 %Vérifiez si la partie droite/avant du roomba est hors de la falaise r.moveDistance(-0,1, 0,05) %Déplacez le roomba vers l'arrière de 0,1 mètre à 0,05 m/s r.turnAngle(5) %Tournez le roomba 5 degrés CCW sinon y.gauche<1000 %Vérifiez si le côté gauche du roomba est hors de la falaise r.moveDistance(-0,05, 0,05) %Déplacez le roomba vers l'arrière de 0,05 mètres à 0,05 m/s r.turnAngle(-10) %Faites pivoter le roomba de 10 degrés CW elseif y.right0 %Exécuter si le bouton est enfoncé si Continue==1 i=0 %Continuer la recherche de la vie sinon i=1 %Fin mode VIE fin fin fin elseif Paramètre==2 %Vérifier si le paramètre « TERRAINS TERRAINS » a été choisi i=0 tandis que i==0 r.setLEDDigits(num2str('RGH')) %Afficher 'Rough' sur l'affichage LED pour i=1:1000 r.setDriveVelocity(0,05) %Réglez la vitesse du lecteur roomba à 0,05 m/sx = r.getBumpers %Récupérer et stocker les valeurs du capteur de pare-chocs dans la structure "x" y = r.get CliffSensors %Récupérez et stockez les valeurs du capteur d'escarpement dans la structure "y" si x.right==1 %Vérifiez si le pare-chocs droit est enfoncé le pare-chocs est enfoncé r.turnAngle(-10) %Faire pivoter le roomba de 10 degrés CW elseif x.front==1 %Vérifier si le pare-chocs avant est enfoncé Vérifiez si la roue droite a baissé 1500 % Vérifiez si la partie avant gauche du roomba est hors de la falaise r.moveDistance(-0,05, 0,05) % Déplacez le roomba vers l'arrière de 0,05 mètre à 0,05 m/s r.turnAngle (-5) % Faites pivoter le roomba de 5 degrés CW sinon y.rightFront< 1500 % Vérifiez si la partie avant droite du roomba est hors de la falaise r.moveDistance (-0,05, 0,05)% Déplacez le roomba vers l'arrière de 0,05 mètre à 0,05 m/s r.turnAngle (5) %Vérifiez si la partie gauche o f roomba est hors de la falaise r.moveDistance(-0,05, 0,05)%Déplacer roomba vers l'arrière de 0,05 mètres à 0,05 m/s r.turnAngle(-10)%Tourner roomba 10 degrés CW sinon y.right0 si Continue==1 i=0 %Continuer le terrain accidenté else i=1 %Fin du terrain accidenté end end end else %Mode manuel i=0 r.setLEDDigits(num2str('USER')) %Afficher 'USER' sur l'affichage LED d=msgbox(['Flèches - Se déplacer; S - Stop Rover; ESC - Contrôle de l'utilisateur final; A - Localiser la ressource']); attendre(d); tandis que i==0 r.showCamera %Ouvrir le flux en direct de la caméra rasberry pie dans une fenêtre séparée D=getkey(1) %Récupérer la touche enfoncée par l'utilisateur, stocker la valeur ASCII en tant que variable D si D==30 %Vérifier si la flèche "haut" a été enfoncé r.setDriveVelocity(0.1) %Envoyer le roomba vers l'avant à 0,2 m/s elseif D==28 %Vérifier si la flèche "gauche" a été enfoncée r.setDriveVelocity(0) %Empêcher le roomba d'avancer ou de reculer r.turnAngle(15, 0,05)% Faites pivoter le roomba de 45 degrés dans le sens horaire à 0,05 m/s elseif D==31 %Vérifiez si la flèche "vers le bas" a été enfoncée r.setDriveVelocity(-0,1) % Déplacez le roomba vers l'arrière à 0,2 m/s elseif D==29 % Vérifiez si la flèche "droite" est enfoncée. la touche "esc" (échappement) a été enfoncée i=1 %Changer la valeur de la variable "i" pour quitter la boucle d=msgbox('Exiting "User Control"') %Informe l'utilisateur que le mode manuel est en train d'être quitté elseif D== 115 %Vérifiez si la touche "s" a été enfoncée r.setDriveVelocity(0) %Stop roomba from aller en avant ou en arrière elseif D==97 %Vérifier si "a" a été pressé image = r.getImage; imwrite(image, 'image.png') W = Classify(image) K = mode(W) if K == 3 d=msgbox('Resource found') %Affichage si ressource rectangulaire détectée waitfor(d); % Attendre que l'utilisateur ferme la boîte de message "d" elseif K == 0 d=msgbox('Pas de ressource:(') %Afficher si la ressource rectangulaire n'est pas détectée waitfor(d); % Attendre que l'utilisateur ferme la boîte de message "d" end else d=msgbox('Pas une entrée de clé valide.') %Afficher si l'utilisateur ferme le menu "choisir les paramètres" waitfor(d); %Attendez que l'utilisateur ferme la boîte de message "d" end waitfor(d); %Attendez l'utilisateur ferme la boîte de message "d" end end end else d=msgbox('Au revoir') %Dit au revoir si les options sont fermées end waitfor(d);

Étape 3: Tester

Essai
Essai

Une fois votre code écrit, vous devrez tester votre Roomba. Bien que votre code puisse sembler correct, bon nombre de vos valeurs, en particulier pour la couleur ou la forme, devront être modifiées afin de reconnaître correctement les objets que vous souhaitez que votre Roomba identifie.

Étape 4: Observer les sorties visuelles

Observer les sorties visuelles
Observer les sorties visuelles
Observer les sorties visuelles
Observer les sorties visuelles

Il sera très évident que vous ayez réussi ou non à programmer votre Roomba en fonction de ses sorties visuelles.

Les sorties comprennent:

  • Détection de forme: la capacité du Roomba à distinguer correctement les formes afin de trouver les bons minéraux
  • Manœuvres tout-terrain: évite les falaises ou les zones sombres
  • Mode manuel: flux en direct et possibilité de contrôler le Roomba
  • Photos: Photos de minéraux
  • Life Found!: Une zone de texte MatLab signifiant que votre plante a identifié la vie organique.

C'est la fin de notre tutoriel, profitez de votre nouveau Mars Expedition Rover !

Conseillé: