Table des matières:
- Étape 1: Fournitures
- Étape 2: Développer un codage pour satisfaire le résultat souhaité
- Étape 3: Tester
- Étape 4: Observer les sorties visuelles
Vidéo: IRobot Create-Mars Expedition Rover Mark I : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
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
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é
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
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
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é:
Casque Iron Man Mark II : 4 étapes
Casque Iron Man Mark II: Casco réplica mark II de 2 partes, casco 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: Servomotores para el cierre tu aperçois
Utilisation du module de commande d'IRobot Create avec Linux : 4 étapes
Utilisation du module de commande d'IRobot Create avec Linux : étant donné qu'iRobot n'a pas fourni aux utilisateurs de Linux un moyen d'utiliser le module de commande, j'ai dû le découvrir moi-même. Ne vous laissez pas intimider, ce n'est pas difficile du tout, vraiment. Tout ce que vous avez à faire est d'exécuter quelques scripts. Commençons, d'accord ?
Modifier un IRobot Create pour peindre : 6 étapes (avec images)
Modification d'un IRobot Create pour Paint : Il s'agit d'un projet de robotique qui pourrait probablement être réalisé par quelqu'un qui n'a aucune expérience avec les robots. Je dis cela parce qu'avant de commencer, je n'avais aucune expérience avec les robots. Ou écrire des programmes. En fait, je savais peindre et c'était
IRobot Create Personal Home Robot : 16 étapes (avec photos)
Robot domestique personnel IRobot Create : Présentation d'un robot domestique personnel construit autour de la plate-forme iRobot Create et d'un système informatique mini-itx. Il n'a jamais été aussi simple et abordable de concevoir et de construire des robots en tirant parti des économies d'échelle des logiciels, PC, jouets et autres
Dispositif d'enregistrement assisté par téléprompteur dans une caisse d'expédition : 25 étapes (avec photos)
Dispositif d'enregistrement assisté par téléprompteur dans une caisse d'expédition : j'ai construit cette cabine vidéo comme outil promotionnel pour mon roman sous licence CC, Boggle and Sneak, dans lequel des trolls inventeurs se rendent chez nous dans des véhicules truqués par un jury et nous soumettent aux blagues de Rube Goldberg. La plupart des lectures d'auteur comportent le