Table des matières:

Projet UTK EF 230 MarsRoomba Automne 2018 : 5 étapes
Projet UTK EF 230 MarsRoomba Automne 2018 : 5 étapes

Vidéo: Projet UTK EF 230 MarsRoomba Automne 2018 : 5 étapes

Vidéo: Projet UTK EF 230 MarsRoomba Automne 2018 : 5 étapes
Vidéo: Автомобильный кемпинг на морозе с собакой - палатка на крыше 2024, Novembre
Anonim
Projet UTK EF 230 MarsRoomba Automne 2018
Projet UTK EF 230 MarsRoomba Automne 2018

Actuellement, les rovers martiens sont utilisés pour collecter des données à la surface de Mars par diverses méthodes, dans le but ultime d'en savoir plus sur le potentiel de la planète pour la vie microbienne. Les rovers utilisent principalement des outils de photographie et d'analyse du sol pour la collecte de données, mais les rovers comprennent également des instruments de navigation, des détecteurs de rayonnement, des capteurs atmosphériques et un laser pour la vaporisation d'échantillons de roche. L'objectif de la mission du rover prévue pour 2020 est essentiellement le même, mais avec la tâche spéciale de "collecter des échantillons de sol et de roche et de les mettre en cache à la surface pour un retour potentiel sur Terre par une future mission", selon la NASA.

Cependant, en partant du principe que les futurs rovers seront utilisés pour l'assistance humaine, notre équipe a examiné quels aspects des humains le rover pourrait surveiller. Nous sommes arrivés à la conclusion que si une urgence rendait un astronaute inconscient avec un équipement de survie et un équipement défaillants, notre rover pourrait servir de balise mobile Mayday en observant que l'astronaute qu'il suivait est immobile et en transmettant un message de détresse. Pour suivre l'humain et déterminer l'immobilité, le rover prendrait des données telles que la couleur des chaussures de l'humain et leur mouvement. Une autre entrée à considérer est qu'il devrait se souvenir de son chemin afin de relayer un signal de détresse en cas d'urgence. Notre rover répond à un besoin sur Mars en ce sens que tenter une mission aussi coûteuse sur un tel terrain étranger nécessite plusieurs couches de sécurité intégrée, et si un astronaute ne peut pas obtenir sa propre aide en raison d'un dysfonctionnement ou d'une inconscience, le rover peut alerter les autres.

Ce Instructable est conçu pour aider le lecteur à programmer son Roomba pour suivre avec succès un « astronaute » et pour envoyer un signal de détresse le cas échéant.

Étape 1: Matériel nécessaire

Les matériaux nécessaires
Les matériaux nécessaires

1) Ordinateur/ordinateur portable accessible par Internet

2) MATLAB_R2018a

3) Roomba et Roomba Télécharger

Étape 2: configuration/téléchargement

Configuration/Téléchargement
Configuration/Téléchargement

Exécutez ce script dans MATLAB afin de télécharger le logiciel nécessaire pour accéder au Roomba (enregistré dans son propre fichier dans le dossier du projet)

Aide supplémentaire:

% Programme d'installation pour EF 230 Roomba Project% Dernière mise à jour: 13 septembre 2017 (Correction des problèmes de sécurité associés au serveur https et suppression de l'avertissement de suppression de fichier en cas d'erreur) fonction roombaInstall clc; % liste de fichiers à installer fichiers = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'}; % emplacement à installer à partir d'options = weboptions('CertificateFilename', ''); % lui dire d'ignorer les exigences de certificat server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/'; dlgTitle = 'Installation/Mise à jour de Roomba'; % display purpose and get confirmation prompt = { 'Ce programme téléchargera ces fichiers EF 230 Roomba:' '' strjoin(files, ' ') '' 'dans ce dossier:' ''cd '' 'Voulez-vous continuer ? ' }; bip; yn = questdlg(invite, … dlgTitle, … 'Oui', 'Non', 'Oui');

if ~strcmp(yn, 'Oui'), return; finir

% obtenir la liste des fichiers existants existants_files = files(cellfun(@exist, files) > 0); if ~isempty(existing_files) % assurez-vous qu'il est vraiment possible de les remplacer prompt = {'Vous remplacez ce(s) fichier(s): ' '' strjoin(existing_files, ' ') '' 'OK pour remplacer ?' }; bip; yn = questdlg(invite, … dlgTitle, … 'Oui', 'Non', 'Oui'); if ~strcmp(yn, 'Oui'), return; fin fin

% télécharger les fichiers cnt = 0; pour i=1:longueur(fichiers) f=fichiers{i}; disp(['Téléchargement ' f]); essayez url = [serveur f]; websave(f, url, options); % d'options ajoutées pour éviter les erreurs de sécurité cnt = cnt + 1; catch disp(['Erreur de téléchargement 'f]); factice = [f '.html']; if exist(dummy, 'file')==2 delete(dummy) end end end

if cnt == longueur (fichiers) msg = 'Installation réussie'; waitfor(msgbox(msg, dlgTitle)); else msg = 'Erreur d'installation - voir la fenêtre de commande pour plus de détails'; waitfor(errordlg(msg, dlgTitle)); finir

fin %roombaInstall

Étape 3: Code Partie 1: Fonction de suivi

Code Partie 1: Fonction de suivi
Code Partie 1: Fonction de suivi

Cette fonction prend la variable Roomba et l'image de la caméra sur le Roomba et trouve les coordonnées centrales xy de l'objet suivi

Enregistrez ce code dans un autre fichier du même dossier.

fonction [xm, ym] = trackingblue(r)%Entrées: variable roomba %Sorties: valeur x et y du centre de l'objet suivant % Objectif: trouve le centre d'un objet bleu à partir d'une image %Utilisation [valeur x, y value] = trackingblue (variable roomba) img=r.getImage; % lit la caméra hors du robot subplot(1, 2, 2) subimage(img); % affiche l'image dans la même fenêtre que le chemin title('Tracking Image') red = img(:,:, 1); vert = img(:,:, 2); bleu = img(:,:, 3); justeBleu = bleu - vert/2 - rouge/2; pc = justeBleu > 40; maintenez sur subplot(1, 2, 2) subimage(bw); [x, y] = trouver(pc); if ~isempty(x) && ~isempty(y) xm = round(mean(x)); ym = rond(moyenne(y)); xx = max(1, xm-5):min(xm+5, taille(pc, 1)); yy = max(1, ym-5):min(ym+5, taille(bw, 2)); pc pc = zéros (taille (pc), 'uint8'); pc pc(xx, yy) = 255; maintenez sur subplot (1, 2, 2) subimage (justBlue + bwbw); finir

Étape 4: Code Partie 2: Boucle While

Ce code pilote le Roomba en fonction de l'emplacement x et y de l'objet à partir de la fonction de suivi. Cela obligera le Roomba à surveiller les murs et les falaises, tout en recherchant le bleu. Cela prendra également les coordonnées x et y du chemin Roomba et créera un tracé correspondant avec l'image de suivi. Si le capteur de choc est activé, il passera à la section e-mail

%Projet Rover

% Jonah Zahn, Wade Price, Noah Sloan %jzahn2, wprice15, nsloan1 % Entrées: valeur roomba, données de la caméra, capteurs de bosse, de lumière et de mur % Objectif: suit l'astronaute et évite les obstacles. En cas d'alerte, le roomba envoie un e-mail % détaillant une carte et où il se trouve en fonction de sa position de départ. %Utilisation: exécutez simplement le programme après avoir déclaré une variable roomba, ainsi que %avoir un objet vert en mouvement %Résultats: affiche l'image de suivi de l'image, la carte des e-mails et le texte à l'utilisateur %% Suite à la section b=0; %Initialisation des variables c=0; x=0; y=0; thêta=0; tandis que c==0 %Loop pour lui faire détecter l'objet bleu et les obstacles t = r.timeGet; d = r.getDistance; [xval, yval] = trackingblue(r); cliff=getCliffSensors(r); %initialisation des structures pour les valeurs des capteurs light=getLightBumpers(r); bump= getBumpers(r); si light.leftCenter >= 10 || light.rightCenter >= 10 % Détecte s'il y a un mur près de r.stop r.setLEDDigits('help') c=1 % tandis que b==0 % si bump.right == 1 || bump.left == 1 || bump.front == 1 % Détecte s'il a heurté quelque chose après avoir détecté un mur % c=1 % b=1 % disp('bump') % end % end elseif bump.right == 1 || bump.left == 1 || bump.front == 1 %Sense s'il a heurté quelque chose, si c'est le cas, il enverra un e-mail r.stop c=1 b=1 elseif cliff.leftFront <= 100 || cliff.rightFront <= 100 || falaise.gauche <= 100 || cliff.right <= 100 %Détecte s'il y a une falaise près de r.stop c=1 r.setLEDDigits('help') else %Définit les vitesses d'entraînement pour suivre le bleu si yval = 100 r.setDriveVelocity(0.1) elseif yval 400 r.turnAngle(-5) end end theta = theta + r.getAngle; x = d.*cosd(thêta) + x; % x coordonnée du roomba y = d.*sind(theta).*d + y; % y coordonnée de la sous-intrigue roomba (1, 2, 1) plot(x, y, 'bd') % trace le chemin et ajoute un titre title('Roomba Path') tenez bon; finir

Étape 5: Code Partie 3: Section Courriel

Cela prendra le chemin tracé et l'image et l'enverra à une adresse e-mail spécifiée

(Montré ici avec un exemple d'e-mail)

%% Section de courrier électronique

if b==1 saveas(gcf, 'rovermap.png') %sauve le chiffre setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % compte de messagerie à envoyer depuis setpref('Internet', 'SMTP_Username', '[email protected]'); % nom d'utilisateur de l'expéditeur setpref('Internet', 'SMTP_Password', 'gssegsse'); % Props du mot de passe des expéditeurs = 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('exemple d'e-mail', 'RoverBeacon', 'L'astronaute s'est arrêté de bouger. Pour la récupération, suivez les instructions dans le fichier joint.', 'rovermap.png') disp('email envoyé') end

Conseillé: