Table des matières:

Roomba contrôlé par MATLAB : 5 étapes
Roomba contrôlé par MATLAB : 5 étapes

Vidéo: Roomba contrôlé par MATLAB : 5 étapes

Vidéo: Roomba contrôlé par MATLAB : 5 étapes
Vidéo: Amazing arduino project 2024, Novembre
Anonim
Roomba contrôlé par MATLAB
Roomba contrôlé par MATLAB
Roomba contrôlé par MATLAB
Roomba contrôlé par MATLAB

L'objectif de ce projet est d'utiliser MATLAB ainsi qu'un robot programmable iRobot modifié. Notre groupe a combiné nos compétences en codage afin de créer un script MATLAB qui utilise de nombreuses fonctions de l'iRobot, notamment les capteurs de falaise, les capteurs de pare-chocs, les capteurs de lumière et la caméra. Nous avons utilisé ces lectures de capteurs et de caméras comme entrées, nous permettant de créer certaines sorties que nous souhaitons à l'aide de fonctions et de boucles de code MATLAB. Nous utilisons également l'appareil mobile et le gyroscope MATLAB comme moyen de se connecter à l'iRobot et de le contrôler.

Étape 1: Pièces et matériaux

Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux
Pièces et matériaux

MATLAB 2018a

-La version 2018 de MATLAB est la version la plus préférée, principalement parce qu'elle fonctionne le mieux avec le code qui se connecte à l'appareil mobile. Cependant, la plupart de notre code peut être interprété dans la majorité des versions de MATLAB.

iRobot Créer un appareil

-Cet appareil est un appareil spécialement conçu dont le seul but est la programmation et le codage. (Ce n'est pas un vide réel)

Raspberry Pi (avec caméra)

- Il s'agit d'une carte informatique bon marché qui fonctionne comme le cerveau de l'iRobot. Il est peut-être petit, mais il est capable de beaucoup de choses. La caméra est un complément supplémentaire. Il utilise également le raspberry pi pour obtenir toutes ses fonctions et commandes. La caméra illustrée ci-dessus est montée sur un support imprimé en 3D, créé par les départements Engineering Fundamentals de l'Université du Tennessee

Étape 2: Fichier de base de données Roomba

Fichier de base de données Roomba
Fichier de base de données Roomba

Il existe un fichier principal dont vous aurez besoin pour utiliser les fonctions et commandes appropriées pour votre roomba. Ce fichier est l'endroit où vous avez écrit le code qui extrait les fonctions afin de rendre le fonctionnement de votre roomba plus facile à gérer.

Vous pouvez télécharger le fichier sur ce lien ou le fichier téléchargeable ci-dessous

ef.engr.utk.edu/ef230-2017-08/projects/roomba-s/setup-roomba-instructable.php

Étape 3: Connexion à Roomba

Tout d'abord, vous devez vous assurer que votre robot est connecté à votre carte raspberry pi en utilisant une prise micro USB. Ensuite, vous devez connecter correctement votre ordinateur et votre robot au même WiFi. Une fois cela fait, vous pouvez allumer votre robot et vous y connecter en utilisant la commande donnée dans le fichier de base de données du robot. (Réinitialisez toujours votre robot avant et après l'avoir utilisé). Par exemple, nous utilisons la commande "r.roomba(19)" pour nous connecter à notre robot, en attribuant la variable r à notre appareil. Cela renvoie au fichier de base de données, qui configure notre variable comme une structure que nous pouvons référencer à tout moment.

Étape 4: le code

Le code
Le code
Le code
Le code

Nous avons joint le code complet ci-dessous, mais voici un bref aperçu qui met en évidence les éléments importants de notre script. Nous avons utilisé tous les capteurs, ainsi que la caméra pour maximiser pleinement le potentiel de notre robot. Nous avons également inclus un code qui nous a permis de connecter un appareil mobile à notre robot et d'utiliser son gryoscope pour le contrôler manuellement.

Nous avons commencé avec la simple commande "r.setDriveVelocity(.06)" qui définit la vitesse d'avancement du robot à 0,06 m/s. C'est juste pour faire bouger le robot au préalable

Ensuite, notre script principal est démarré avec une boucle while qui récupère les données du robot donné en créant des structures que nous pouvons référencer et utiliser dans les instructions conditionnelles ci-dessous, nous permettant ainsi de dire au robot d'exécuter une certaine commande basée sur les données de structure le robot lit avec ses capteurs. Nous l'avons configuré pour que le robot lise ses capteurs de falaise et suive un chemin noir

while true % while loop va jusqu'à ce que quelque chose de "faux" se produise (dans ce cas, cela continue indéfiniment) data = r.getCliffSensors; data2 = r.getBumpers;% récupère les données en continu sur les valeurs du capteur de falaise et les affecte à une variable % img = r.getImage; % Prend une photo de la caméra montée % image(img); % Affiche l'image qui a été prise % red_mean = Mean(mean(img(:,:, 1)));% Prend la valeur moyenne pour la couleur verte si data.rightFront < 2000 r.turnAngle(-2); % fait tourner le Roomba d'environ 0,2 degré CW une fois que la valeur des capteurs d'escarpement avant droit tombe en dessous de 2000 r.setDriveVelocity (0,05); elseif data.leftFront data.leftFront && 2000 > data.rightFront r.moveDistance(.1); % indique au Roomba de continuer à avancer à environ 0,2 m/s si les deux valeurs des capteurs avant droit et avant gauche tombent en dessous de 2000 % r.turnAngle(0); % indique au Roomba de ne pas tourner si les conditions mentionnées ci-dessus sont vraies

elseif data2.right == 1 r.moveDistance(-.12); r.turnAngle(160); r.setDriveVelocity(.05); elseif data2.left == 1 r.moveDistance(-.2); r.turnAngle(5); r.setDriveVelocity(.05); elseif data2.front == 1 r.moveDistance(-.12); r.turnAngle(160); r.setDriveVelocity(.05);

Après cette boucle while, nous entrons dans une autre boucle while qui déclenche les données obtenues via la caméra. Et nous utilisons une instruction if à l'intérieur de cette boucle while qui reconnaît une image à l'aide d'un programme spécifique (alexnet), et une fois qu'elle identifie l'image, elle déclenche immédiatement la télécommande de l'appareil mobile

anet = alexnet; % Attribue l'apprentissage en profondeur alexnet à une variable while true % Infinite while loop img = r.getImage; img = imresize(img, [227, 227]); label = classifier(anet, img); if label == "serviette en papier" || label == "réfrigérateur" label = "eau"; image de fin (img); titre(car(étiquette)); tirage au sort;

La boucle while qui nous permet de contrôler l'appareil avec notre téléphone récupère ces données du gyroscope du téléphone et nous les connectons à une matrice qui retransmet en continu les données dans MATLAB sur l'ordinateur. Nous utilisons une instruction if qui lit les données de la matrice et donne une sortie qui déplace l'appareil en fonction de certaines valeurs du gyroscope du téléphone. Il est important de savoir que nous avons utilisé les capteurs d'orientation de l'appareil mobile. La matrice un par trois mentionnée ci-dessus est classée par chaque élément des capteurs d'orientation du téléphone, qui est l'azimut, le tangage et le côté. Les instructions if ont créé des conditions indiquant que lorsque le côté dépasse les valeurs 50 ou tombe en dessous de -50, le robot se déplace d'une certaine distance vers l'avant (positif 50) ou vers l'arrière (négatif 50). Et il en va de même pour la valeur de pitch. Si la valeur du pas dépasse la valeur de 25 ou tombe en dessous de -25, le robot tourne à un angle de 1 degré (positif 25) ou de moins 1 degré (négatif 25)

while true pause(.1) % Pause de.5 secondes avant que chaque valeur ne soit prise Controller=iphone. Orientation; % Affecte la matrice des valeurs de l'orientation de l'iPhone à une variable Azimutal=Controller(1); % Affecte la première valeur de la matrice à une variable Pitch=Controller(2); % Affecte la deuxième valeur de la matrice à une variable (inclinaison vers l'avant et vers l'arrière lorsque l'iPhone est tenu latéralement) Side=Controller(3); % Attribue la troisième valeur de la matrice à une variable (inclinaison à gauche et à droite lorsque l'iPhone est tenu latéralement) % Provoque une sortie basée sur l'orientation du téléphone si Côté > 130 || Côté 25 r.moveDistance (-.1) % Déplace le Roomba vers l'arrière d'environ 0,1 mètre si l'iPhone est incliné vers l'arrière d'au moins 25 degrés sinon Côté 25 r.turnAngle (-1) % Tourne le Roomba d'environ 1 degré dans le sens antihoraire si l'iPhone est incliné vers la gauche d'au moins 25 degrés sinon si Pitch < -25 r.turnAngle(1) % Tourne le Roomba d'environ 1 degré CW si l'iPhone est incliné d'au moins 25 degrés fin

Ce ne sont que les points saillants des principaux éléments de notre code, que nous avons inclus si vous devez rapidement copier et coller une section à votre avantage. Cependant, notre code complet est joint ci-dessous si nécessaire

Étape 5: Conclusion

Ce code que nous avons écrit est spécifiquement conçu pour notre robot ainsi que notre vision globale du projet. Notre objectif était d'utiliser toutes nos compétences en codage MATLAB afin de créer un script de conception efficace qui utilise la plupart des fonctionnalités du robot. L'utilisation du contrôleur téléphonique n'est pas aussi difficile que vous ne le pensez, et nous espérons que notre code pourra vous aider à mieux comprendre le concept derrière le codage d'un iRobot.

Conseillé: