Table des matières:
- Étape 1: Obtenir les bibliothèques
- Étape 2: Écriture des programmes
- Étape 3: Coder
- Étape 4: Exécuter le code
Vidéo: Mars Roomba Project UTK : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
AVIS DE NON-RESPONSABILITÉ: CELA NE FONCTIONNERA QUE SI LE ROOMBA EST INSTALLÉ DANS UN
DE FAÇON TRÈS SPÉCIFIQUE, CET INSTRUCTIBLE A ÉTÉ CRÉÉ POUR ET DESTINÉ À ÊTRE UTILISÉ PAR LES ÉTUDIANTS ET LE FACULTÉ DE L'UNIVERSITÉ DU TENNESSEE
Ce code est utilisé pour configurer un Roomba pour exécuter du code écrit et enregistré localement dans MATLAB. Cela ne fonctionnera pas si vous ne parvenez pas à obtenir les bibliothèques nécessaires sur le site Web de l'Université du Tennessee. Si vous disposez des bibliothèques, vous pouvez les utiliser pour programmer votre propre Roomba à l'aide des fonctions de la bibliothèque. Ce Instructable vous apprend comment installer les bibliothèques, créer un dossier pour tout le code et comment coder et utiliser le programme que nous avons fourni ci-dessous.
Matériaux nécessaires:
· Roomba
· MATLAB
· Raspberry Pi et caméra Pi
Étape 1: Obtenir les bibliothèques
Sur le site Web d'ingénierie, une boîte à outils/bibliothèque est fournie, téléchargez-la et placez-la dans un nouveau dossier. Ce dossier doit contenir tous les fichiers de travail du projet car toute fonction utilisée dans un programme que vous créez devra faire référence à la bibliothèque. Après avoir fait cela, vous pouvez commencer à travailler sur vos programmes
Étape 2: Écriture des programmes
Il y a pas mal de fonctions qui peuvent être utilisées dans le programme, ces fonctions sont accessibles en utilisant la commande "doc roomba". En utilisant ces fonctions, vous pouvez contrôler votre Roomba de différentes manières. Le code ci-dessous utilise les capteurs de bosse, les capteurs de barre lumineuse, la caméra et les capteurs de falaise de différentes manières pour créer un rover mars. Nous avons utilisé les capteurs de choc pour détecter lorsque le Roomba heurte un objet, lorsque cela se produit, le robot fait marche arrière, se retourne et continue de se déplacer. Avant que le Roomba ne heurte un objet, la barre lumineuse détectera l'objet et ralentira le Roomba de sorte que lorsqu'il heurte l'objet pour activer le capteur de choc, le Roomba sera moins endommagé/affecté par l'impact. La caméra recherche de l'eau ou de la lave à la surface, s'il n'y a pas de liquide trouvé, le robot continuera à chercher, s'il y a de l'eau trouvée, le robot enverra un message aux opérateurs. Les capteurs de falaise sont conçus pour arrêter le robot s'il s'approche d'une falaise. Si le robot détecte une falaise, il s'inversera et se retournera pour éviter de tomber.
Étape 3: Coder
Copiez et collez ceci dans un fichier MATLAB situé dans le même dossier que les bibliothèques
functionMainRoombaFile(r)
r.setDriveVelocity(0.1, 0.1)
while true % Infinte while boucle pour maintenir le code en cours d'exécution
dontFall = cliffCheck(r) % Affecte la variable 'dontFall' à la fonction 'cliffCheck'
if dontFall % if instruction pour continuer dans le code après la fin de 'cliffCheck'
r.setDriveVelocity(0.1, 0.1) % Maintient Roomba en mouvement après la fin du 'cliffCheck'
end % termine 'dontFall' if instruction
bumper=bumpcheck(r) % Affecte la variable 'bumper' à la fonction 'bumpcheck'
if bumper % if instruction à poursuivre dans le code après la fin du 'bumpcheck'
r.setDriveVelocity(0.1, 0.1) % Maintient Roomba en mouvement une fois le « bump check » terminé
end % termine 'pare-chocs' si l'instruction
liquids = LiquidCheck(r) % Affecte la variable 'liquids' à la fonction 'LiquidCheck'
if liquids % if instruction à poursuivre dans le code après la fin de 'LiquidCheck'
r.setDriveVelocity(0.1, 0.1) % Maintient Roomba en mouvement après la fin du 'LiquidCheck'
end % termine 'liquides' si instruction
lightbumper=lightcheck(r) % Affecte la variable 'lightbumper' à la fonction 'lightcheck'
pause(0.1) % Pause brève pour éviter une itération de boucle continue
end % termine la boucle while infinie
fin % fin fonction
function bumper=bumpcheck(r) % Crée la fonction 'bumpcheck'
bumpdata= r.getBumpers % Affecte toutes les données du bumper à la variable 'bumpdata'
bumper = bumpdata.right || bumpdata.left || bumpdata.front % Crée une variable stockée, 'bumper', pour les différents bumpers
if bumpdata.right>0 % If instruction pour provoquer différentes fonctions du roomba si Bumper est heurté
r.stop % Arrête Roomba
r.moveDistance (-0,3, 0,2) % Inverse Roomba 0,3 m
r.turnAngle(90, 0.5) % Fait pivoter le Roomba de 90 degrés aussi vite que possible
finir
si bumpdata.front>0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle(randi(270), 0.5) % Fait pivoter le Roomba à un intervalle aléatoire entre 0 et 270 degrés aussi vite que possible
finir
si bumpdata.left>0
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle(-90, 0.5) % Fait pivoter le Roomba de -90 degrés aussi vite que possible
finir
finir
function lightbumper=lightcheck(r) % Crée la fonction 'lightcheck'
lightdata= r.getLightBumpers % Attribue toutes les données du capteur de bosse lumineuse à la variable 'lightdata'
lightbumper = lightdata.left || lightdata.right || lightdata.rightCenter || lightdata.leftCenter % Crée une variable stockée, 'lightbumper', pour les différents pare-chocs lumineux
if lightbumper % If instruction pour appeler les données du lightbumper d'en haut
if lightdata.left>10 % If instruction pour provoquer différentes fonctions du roomba si le pare-chocs léger détecte plus de 10 valeurs
r.setDriveVelocity (0,05, 0,05) % Ralentit le roomba pour se préparer au choc
end % termine l'instruction if initiale
si lightdata.rightCenter>10
r.setDriveVelocity(0.05, 0.05)
finir
si lightdata.right>10
r.setDriveVelocity(0.05, 0.05)
finir
si lightdata.leftCenter>10
r.setDriveVelocity(0.05, 0.05)
finir
end % termine 'lightbumper' if instruction
fin %ends la fonction lightcheck
function dontFall = cliffCheck(r) % Crée la fonction 'cliffCheck'
données = r.getCliffSensors; % Attribue toutes les données du capteur de falaise à la variable « données »
dontFall = data.left<1020 || data.leftFront<1020 || data.rightFront<1020 || data.right<1020 % Crée une variable stockée, 'dontFall', pour les différents capteurs de falaise
if dontFall % If instruction pour appeler les données du capteur de falaise d'en haut
if data.left < 1010 % If instruction pour provoquer différentes fonctions du roomba si le capteur d'escarpement détecte moins de 1010 valeurs
r.stop
r.moveDistance (-0,2, 0,2) % Inverse Roomba 0,2 m
r.turnAngle(-90, 0.5) % Fait pivoter le Roomba de -90 degrés aussi vite que possible
elseif data.leftFront < 1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle(90, 0.5) % Fait pivoter le Roomba de 90 degrés aussi vite que possible
elseif data.rightFront < 1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle(90, 0.5) % Fait pivoter le Roomba de 90 degrés aussi vite que possible
elseif data.right < 1010
r.stop
r.moveDistance (-0,3, 0,2)
r.turnAngle(90, 0.5) % Fait pivoter le Roomba de 90 degrés aussi vite que possible
finir
finir
finir
function liquids = LiquidCheck(r) % Crée la fonction 'LiquidCheck'
while true %start boucle infinie pour l'étalonnage
img = r.getImage; % lit la caméra hors du robot
image(img) % montre l'image dans une fenêtre de figure
red_mean = Mean(mean(img(200, 150, 1)))% lit la quantité moyenne de pixels rouges
blue_mean = Mean(mean(img(200, 150, 3)))% lit la quantité moyenne de pixels bleus
liquides = red_mean || blue_mean % Crée une variable stockée, 'liquides', pour les différentes variables de couleur
if liquids % If instruction pour appeler les données d'image d'en haut
if red_mean>170 % If instruction pour provoquer différentes fonctions du roomba si la caméra voit une couleur rouge moyenne supérieure à 170
r.stop % arrête roomba
r.setLEDCenterColor(255) % définit le cercle en rouge
r.setLEDDigits(); % effacer l'affichage
f = waitbar(0, '*MESSAGE ENTRANT*'); % crée une barre d'attente pour un message de chargement
r.setLEDDigits('HOT'); % définit l'affichage LED sur la sortie « HOT »
pause(0.5) %Bref Pause pour lire les informations affichées
r.setLEDDigits('LAVA'); % définit l'affichage LED sur la sortie « LAVA »
pause (0,5)
barre d'attente(.33, f, '*MESSAGE ENTRANT*'); %crée une augmentation de la barre d'attente
r.setLEDDigits('HOT');
pause (0,5)
r.setLEDDigits('LAVA');
pause (0,5)
barre d'attente(.67, f, '*MESSAGE ENTRANT*'); % crée une augmentation de la barre d'attente
r.setLEDDigits('HOT');
pause (0,5)
r.setLEDDigits('LAVA');
waitbar(1, f, '*MESSAGE ENTRANT*'); %complète la barre d'attente
pause(1)
close(f) %ferme la barre d'attente
r.setLEDDigits(); % efface l'affichage LED
fermer tout %Ferme toutes les fenêtres précédentes
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Efface la fenêtre de tracé des axes et du graphique
y=0,5; % définit la position y du texte dans la fenêtre de traçage
x=0,06; % définit la position x du texte dans la fenêtre de traçage
title('FROM MARS ROOMBA', 'fontsize', 32) % Ajoute un titre à la fenêtre de traçage
quadeqtxt = 'DANGER LAVE'; % Définit la variable 'quadeqtxt' à la sortie 0
text(x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % affiche le texte quadeq dans la fenêtre de traçage
r.moveDistance (-0,2, 0,2) % inverse le roomba 0,2 m
r.turnAngle(180, 0.5) % tourne le roomba de 180 degrés aussi vite que possible
r.setLEDCenterColor(128, 128); % règle la LED centrale du roomba sur orange
fermer tout %ferme les fenêtres ouvertes restantes
elseif blue_mean>175 % If instruction pour provoquer différentes fonctions du roomba si la caméra voit une couleur bleue moyenne supérieure à 175
r.stop % arrête roomba
r.setLEDCenterColor(255) % définit le cercle en rouge
r.setLEDDigits(); % effacer l'affichage
f = waitbar(0, '*MESSAGE ENTRANT*'); % crée une barre d'attente pour un message de chargement
r.setLEDDigits('RECHERCHE'); % définit l'affichage LED sur la sortie « LOOK »
pause(0.5) %Bref Pause pour lire les informations affichées
r.setLEDDigits('WATR'); % définit l'affichage LED sur la sortie « WATR »
pause (0,5)
barre d'attente(.33, f, '*MESSAGE ENTRANT*'); %crée une augmentation de la barre d'attente
r.setLEDDigits('RECHERCHE');
pause (0,5)
r.setLEDDigits('WATR');
pause (0,5)
barre d'attente(.67, f, '*MESSAGE ENTRANT*'); % crée une augmentation de la barre d'attente
r.setLEDDigits('RECHERCHE');
pause (0,5)
r.setLEDDigits('WATR');
waitbar(1, f, '*MESSAGE ENTRANT*'); %complète la barre d'attente
pause(1)
close(f) %ferme la barre d'attente
r.setLEDDigits(); % efface l'affichage LED
fermer tout %Ferme toutes les fenêtres précédentes
axes('Color', 'none', 'XColor', 'none', 'YColor', 'none') % Efface la fenêtre de tracé des axes et du graphique
y=0,5; % définit la position y du texte dans la fenêtre de traçage
x=0,06; % définit la position x du texte dans la fenêtre de traçage
title('FROM MARS ROOMBA', 'fontsize', 32) % Ajoute un titre à la fenêtre de traçage
quadeqtxt = 'EAU TROUVEE'; % Définit la variable 'quadeqtxt' à la sortie 0
text(x, y, quadeqtxt, 'interpreter', 'latex', 'fontsize', 36); % affiche le texte quadeq dans la fenêtre de traçage
r.moveDistance (-0,2, 0,2) % inverse le roomba 0,2 m
r.turnAngle(180, 0.5) % tourne le roomba de 180 degrés aussi vite que possible
r.setLEDCenterColor(128, 128); % règle la LED centrale du roomba sur orange
fermer tout %ferme les fenêtres ouvertes restantes
end %ends 'red_mean' if instruction
end %ends 'liquides' si instruction
end % ferme la boucle while infinie
end % termine la fonction 'LiquidCheck'
Étape 4: Exécuter le code
Après avoir copié et collé le code dans MATLAB, vous devez vous connecter au Roomba. Une fois le Roomba connecté, vous devez nommer la variable r. Les fonctions utilisent la variable r lorsqu'elles se réfèrent au Roomba, donc le Roomba doit être défini comme la variable r. Après avoir exécuté le code, le Roomba devrait fonctionner comme indiqué.
Conseillé:
Transformer votre Roomba en Mars Rover : 5 étapes
Transformer votre Roomba en Mars Rover :
Projet Robot UTK 2017 : 3 étapes
Robot Project UTK 2017 : Mission : Notre équipe d'ingénieurs a été embauchée par Froogle, une fondation à but non lucratif pour le développement de technologies open source, pour développer un innovant Human Assisting Mars Rover.-Out teams "rover" est un roomba que nous avons codé pour exécuter une série o
Mars Rover utilisant Raspberry Pi : 5 étapes
Mars Rover utilisant Raspberry Pi : Cher tous les grands apprenants, je suis toujours curieux de connaître Mars Rover, ayant 6 roues qui peuvent parcourir toute la surface de Mars et explorer des choses depuis la Terre. Je veux aussi explorer la chose en m'asseyant sur mon ordinateur portable. Alors maintenant, je pense que c'est le bon moment pour le faire et
Mars Roomba : 6 étapes
Mars Roomba : ce Instructable vous guidera dans les directions d'utilisation d'un robot aspirateur Roomba contrôlé par Raspberry Pi. Le système d'exploitation que nous utiliserons est via MATLAB
Projet UTK EF 230 MarsRoomba Automne 2018 : 5 étapes
Projet UTK EF 230 MarsRoomba Automne 2018 : Actuellement, les rovers martiens sont utilisés pour collecter des données sur la surface de Mars par diverses méthodes, dans le but ultime d'en apprendre davantage sur le potentiel de la planète pour la vie microbienne. Les rovers utilisent principalement des outils de photographie et d'analyse de sol pour les données c