Table des matières:

Contrôleur robotique ROS basé sur Matlab : 9 étapes
Contrôleur robotique ROS basé sur Matlab : 9 étapes

Vidéo: Contrôleur robotique ROS basé sur Matlab : 9 étapes

Vidéo: Contrôleur robotique ROS basé sur Matlab : 9 étapes
Vidéo: Robotique Mobile 27 - Navigation 2024, Novembre
Anonim
Image
Image
Contrôleur robotique ROS basé sur Matlab
Contrôleur robotique ROS basé sur Matlab

Depuis que je suis enfant, j'ai toujours rêvé d'être Iron Man et je le fais toujours. Iron Man est l'un de ces personnages qui est réalistement possible et en termes simples, j'aspire à devenir Iron Man un jour même si les gens se moquent de moi ou disent que c'est impossible parce que "ce n'est impossible que si quelqu'un le fait" - Arnold Schwarzenegger.

ROS est un cadre émergent utilisé pour développer des systèmes robotiques complexes. Ses applications incluent: le système d'assemblage automatisé, la téléopération, les bras prothétiques et la machinerie lourde du secteur industriel.

Les chercheurs et les ingénieurs utilisent ROS pour développer les prototypes, tandis que différents fournisseurs l'utilisent pour créer leurs produits. Il a une architecture complexe qui le rend difficile à gérer par un boiteux. L'utilisation de MATLAB pour créer le lien d'interface avec ROS est une nouvelle approche qui peut aider les chercheurs, les ingénieurs et les fournisseurs à développer des solutions plus robustes.

Donc, cette instructable explique comment créer un contrôleur robotique ROS basé sur Matlab, ce sera l'un des très rares tutoriels à ce sujet et parmi les quelques instructables ROS. L'objectif de ce projet est de concevoir un contrôleur capable de contrôler n'importe quel robot ROS connecté à votre réseau. Alors, commençons!

crédits de montage vidéo: Ammar Akher, à [email protected]

Fournitures

Les composants suivants sont requis pour le projet:

(1) ROS PC/Robot

(2) Routeur

(3) PC avec MATLAB (version: 2014 ou supérieure)

Étape 1: tout configurer

Obtenir tout l'installation
Obtenir tout l'installation

Pour cette instructable, j'utilise Ubuntu 16.04 pour mon ordinateur Linux et ros-kinetic, donc pour éviter toute confusion, je recommande d'utiliser ros kinetic et ubuntu 16.04 car il a le meilleur support pour ros-kinetic. Pour plus d'informations sur l'installation de ros kinetic, rendez-vous sur https://wiki.ros.org/kinetic/Installation/Ubuntu. Pour MATLAB, vous achetez une licence ou téléchargez une version d'essai à partir d'ici.

Étape 2: Comprendre le fonctionnement du contrôleur

Comprendre le fonctionnement du contrôleur
Comprendre le fonctionnement du contrôleur

Un PC exécute le contrôleur robotique sur MATLAB. Le contrôleur prend l'adresse IP et le port du ros pc/robot.

Un ros-topic est utilisé pour communiquer entre le contrôleur et le ros pc/robot, qui est également pris comme entrée par le contrôleur. Le modem est nécessaire pour créer un LAN (réseau local) et c'est lui qui attribue les adresses IP à tous les appareils connectés à son réseau. Par conséquent, le ros pc/robot et le pc exécutant le contrôleur doivent tous deux être connectés au même réseau (c'est-à-dire le réseau du modem). Alors maintenant que vous savez "comment ça marche", passons au "comment c'est construit"…

Étape 3: Création d'une interface ROS-MATLAB

Création d'une interface ROS-MATLAB
Création d'une interface ROS-MATLAB
Création d'une interface ROS-MATLAB
Création d'une interface ROS-MATLAB
Création d'une interface ROS-MATLAB
Création d'une interface ROS-MATLAB

L'interface ROS-MATLAB est une interface utile pour les chercheurs et les étudiants pour prototyper leurs algorithmes de robot dans MATLAB et les tester sur des robots compatibles ROS. Cette interface peut être créée par la boîte à outils du système robotique dans matlab et nous pouvons prototyper notre algorithme et le tester sur un robot ROS ou dans des simulateurs de robots tels que Gazebo et V-REP.

Pour installer la boîte à outils du système robotique sur votre MATLAB, accédez simplement à l'option Module complémentaire de la barre d'outils et recherchez la boîte à outils robotique dans l'explorateur de modules complémentaires. En utilisant la boîte à outils robotique, nous pouvons publier ou souscrire à un sujet, tel qu'un nœud ROS, et nous pouvons en faire un maître ROS. L'interface MATLAB-ROS possède la plupart des fonctionnalités ROS dont vous pourriez avoir besoin pour vos projets.

Étape 4: Obtenir l'adresse IP

Obtenir l'adresse IP
Obtenir l'adresse IP
Obtenir l'adresse IP
Obtenir l'adresse IP

Pour que le contrôleur fonctionne, il est impératif que vous connaissiez l'adresse IP de votre robot/pc ROS et du PC exécutant le contrôleur sur MATLAB.

Pour obtenir l'IP de votre PC:

Sous Windows:

Ouvrez l'invite de commande et tapez la commande ipconfig et notez l'adresse IPv4

Pour Linux:

Tapez la commande ifconfig et notez l'adresse inet. Maintenant que vous avez l'adresse IP, il est temps de créer l'interface graphique…

Étape 5: Créer une interface graphique pour le contrôleur

Créer une interface graphique pour le contrôleur
Créer une interface graphique pour le contrôleur
Créer une interface graphique pour le contrôleur
Créer une interface graphique pour le contrôleur
Créer une interface graphique pour le contrôleur
Créer une interface graphique pour le contrôleur

Pour créer l'interface graphique, ouvrez MATLAB et tapez guide dans la fenêtre de commande. Cela ouvrira l'application de guide à travers laquelle nous créerons notre interface graphique. Vous pouvez également utiliser le concepteur d'applications sur MATLAB pour concevoir votre interface graphique.

Nous allons créer 9 boutons au total (comme indiqué sur la fig):

6 boutons-poussoirs: Avant, Arrière, Gauche, Droite, Connecter au Robot, Déconnecter

3 boutons modifiables: Ros pc ip, port et nom du sujet.

Les boutons modifiables sont les boutons qui prendront l'adresse IP du PC ROS, son port et le nom du sujet en entrée. Le nom du sujet est ce à travers lequel le contrôleur MATLAB et le robot/pc ROS communiquent. Pour modifier la chaîne sur le bouton modifiable, cliquez avec le bouton droit sur le bouton >> accédez aux propriétés de l'inspecteur >> Chaîne et modifiez le texte du bouton.

Une fois votre interface graphique terminée, vous pouvez programmer les boutons. C'est là que commence le vrai plaisir…

Étape 6: programmation des boutons modifiables de l'interface graphique

Programmation des boutons modifiables de l'interface graphique
Programmation des boutons modifiables de l'interface graphique
Programmation des boutons modifiables de l'interface graphique
Programmation des boutons modifiables de l'interface graphique
Programmation des boutons modifiables de l'interface graphique
Programmation des boutons modifiables de l'interface graphique
Programmation des boutons modifiables de l'interface graphique
Programmation des boutons modifiables de l'interface graphique

L'interface graphique est enregistrée sous forme de fichier.fig mais les fonctions de code/rappel sont enregistrées au format.m. Le fichier.m contient le code de tous vos boutons. Pour ajouter des fonctions de rappel à vos boutons, faites un clic droit sur le bouton > >Afficher les rappels>>rappel. Cela ouvrira le fichier.m de votre interface graphique à l'endroit où ce bouton particulier est défini.

Le premier rappel que nous allons coder concerne le bouton modifiable IP ROS. Sous la fonction edit1_Callback, écrivez le code suivant:

fonction edit1_Callback(hObject, eventdata, handles)

ros_master_ip global

ros_master_ip = get(hObject, 'String')

Ici, la fonction est définie comme edit1_Callback, qui fait référence au premier bouton modifiable. Lorsque nous entrons une adresse IP du réseau ROS dans ce bouton modifiable, il stockera l'adresse IP sous forme de chaîne dans une variable globale appelée ros_master_ip.

Ensuite juste sous _OpeningFcn(hObject, eventdata, handles, varargin) définissez ce qui suit (voir fig):

ros_master_ip global

ros_master_port global

global teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Vous venez de coder globalement en dur l'ip ros-pc (ros_master_ip), le port (ros_master_port) et le nom du sujet Teleop. Cela signifie que si vous laissez les boutons modifiables vides, ces valeurs prédéfinies seront utilisées lorsque vous vous connecterez.

Le prochain rappel que nous allons coder concerne le bouton modifiable Port.

Sous la fonction edit2_Callback, écrivez le code suivant:

fonction edit2_Callback(hObject, eventdata, handles)

ros_master_port global

ros_master_port = get(hObject, 'String')

Ici, la fonction est définie comme edit2_Callback, qui fait référence au deuxième bouton modifiable. Lorsque nous entrons ici le port du ros pc/robot à partir du réseau ROS dans ce bouton modifiable, il stockera le port sous forme de chaîne dans une variable globale appelée ros_master_port.

De même, le prochain rappel que nous allons coder concerne le bouton modifiable du nom du sujet.

Sous la fonction edit3_Callback, écrivez le code suivant:

fonction edit3_Callback(hObject, eventdata, handles)

global teleop_topic_name

teleop_topic_name = get(hObject, 'String')

Semblable à ros_master_port, celui-ci est également stocké sous forme de chaîne dans une variable globale.

Ensuite, nous allons nous intéresser aux fonctions de rappel des boutons poussoirs…

Étape 7: Programmation des boutons-poussoirs de l'interface graphique

Programmation des boutons-poussoirs de l'interface graphique
Programmation des boutons-poussoirs de l'interface graphique
Programmation des boutons-poussoirs de l'interface graphique
Programmation des boutons-poussoirs de l'interface graphique

Les boutons poussoirs que nous avons créés précédemment sont ceux que nous utiliserons pour déplacer, connecter et déconnecter le robot du contrôleur. Les rappels des boutons poussoirs sont définis comme suit:

par exemple. fonction pushbutton6_Callback(hObject, eventdata, handles)

Remarque: selon l'ordre dans lequel vous avez créé vos boutons-poussoirs, ils seraient numérotés en conséquence. Par conséquent, la fonction pushbutton6 dans mon fichier.m pourrait être pour Forward alors que dans votre fichier.m, elle pourrait être pour Backwards, alors gardez cela à l'esprit. Pour savoir quelle est la fonction exacte de votre bouton-poussoir, cliquez simplement avec le bouton droit de la souris>>Afficher les rappels>>rappels et cela ouvrira la fonction de votre bouton-poussoir, mais pour cette instructable, je suppose que c'est le même que le mien.

Pour le bouton Se connecter au robot:

Sous la fonction pushbutton6_Callback(hObject, eventdata, handles):

fonction pushbutton6_Callback(hObject, eventdata, handles) global ros_master_ip

ros_master_port global

global teleop_topic_name

robot mondial

velmsg global

ros_master_uri = strcat('https://', ros_master_ip, ':', ros_master_port)

setenv('ROS_MASTER_URI', ros_master_uri)

colophane

robot = rospublisher(teleop_topic_name, 'geometry_msgs/Twist');

velmsg = rosmessage(robot);

Ce rappel définira la variable ROS_MASTER_URI en concaténant ros_master_ip et le port. Ensuite, la commande rosinit initialisera la connexion. Après la connexion, il créera un éditeur de geometry_msgs/Twist, qui sera utilisé pour envoyer la commande speed. Le nom du sujet est le nom que nous donnons dans la zone d'édition. Une fois la connexion réussie, nous pourrons actionner les boutons poussoirs avant, arrière, gauche, droite.

Avant d'ajouter des rappels aux boutons push Forward, Backward, nous devons initialiser les vitesses de vitesse linéaire et angulaire.

Par conséquent ci-dessous _OpeningFcn(hObject, eventdata, handles, varargin) définissez ce qui suit (voir fig):

global left_spinVelocity global right_spinVelocity

global forwardVelocity

arrière globalVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

arrièreVelocity = -3;

Remarque: toutes les vitesses sont en rad/s

Maintenant que les variables globales sont définies, programmons les boutons de mouvement.

Pour le bouton poussoir Renvoi:

fonction pushbutton4_Callback(hObject, eventdata, handles) global velmsg

robot mondial

global teleop_topic_name

global forwardVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

envoyer(robot, velmsg);

latchpub = rospublisher(teleop_topic_name, 'IsLatching', true);

De même pour le bouton poussoir Backward:

fonction pushbutton5_Callback(hObject, eventdata, handles)

velmsg global

robot mondial

arrière globalVelocity

global teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = arrièreVelocity;

envoyer(robot, velmsg);

latchpub = rospublisher(teleop_topic_name, 'IsLatching', true);

De même pour le bouton Gauche: function pushbutton3_Callback(hObject, eventdata, handles)

global velmsgglobal robot global left_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

envoyer(robot, velmsg);

latchpub = rospublisher(teleop_topic_name, 'IsLatching', true);

De même pour le bouton poussoir Droit:

robot global velmsgglobal

global right_spinVelocity

global teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

envoyer(robot, velmsg);

latchpub = rospublisher(teleop_topic_name, 'IsLatching', true);

Une fois toutes les fonctions de rappel ajoutées et les fichiers sauvegardés, nous pouvons tester notre contrôleur.

Étape 8: Configuration de la configuration réseau sur ROS PC (Linux)

Configuration de la configuration réseau sur ROS PC (Linux)
Configuration de la configuration réseau sur ROS PC (Linux)
Configuration de la configuration réseau sur ROS PC (Linux)
Configuration de la configuration réseau sur ROS PC (Linux)

Nous allons tester le contrôleur sur un PC ros (Linux), ce qui nécessitera de configurer la configuration réseau. Si vous exécutez également le contrôleur sur un PC Linux, vous devrez également y configurer la configuration réseau.

Configuration du réseau:

Ouvrez votre fenêtre de terminal et tapez gedit.bashrc

Une fois le fichier ouvert, ajoutez les éléments suivants:

#Configuration de la machine robotique

exporter ROS_MASTER_URI=https://localhost:11311

#Adresse IP du nœud maître ROS

exporter ROS_HOSTNAME=

exporter ROS_IP=

echo "ROS_HOSTNAME: " $ROS_HOSTNAME

echo "ROS_IP: "$ROS_IP

echo "ROS_MASTER_URI:"$ROS_MASTER_URI

Vous devez suivre cette étape à chaque fois en raison de l'attribution dynamique d'IP.

Étape 9: Exécutez le contrôleur

Exécuter le contrôleur
Exécuter le contrôleur

Nous allons tester notre manette sur un bot Turtle dans Gazebo.

Pour installer Gazebo, veuillez vous référer à

Pour installer Turtle bot, veuillez vous référer à

Ouvrez le dossier dans lequel vous avez enregistré vos fichiers.fig et.m sur MATLAB et appuyez sur Exécuter (comme indiqué sur l'image). Cela ouvrira le contrôleur sur le PC. Avant d'appuyer sur connexion, assurez-vous que votre simulateur de robot tortue fonctionne.

Pour tester votre simulation TurtleBot:

Ouvrez Terminal sur Ros pc et tapez: $ roslaunch Turtlebot_gazebo Turtlebot_world.launch. Cela ouvrira une simulation de Turtlebot sur ce PC. Le nom du sujet de TurtleBot est /cmd_vel_mux/input/teleop, que nous avons déjà fourni dans l'application. Tapez l'adresse IP du ros pc, le port et le nom du sujet dans les boutons modifiables et appuyez sur le bouton. Connect to Robot. Votre robot tortue devrait commencer à se déplacer lorsque vous appuyez sur Avant, Arrière, etc.

Pour afficher les vitesses linéaires et angulaires:

Ouvrez un nouveau terminal et tapez la commande: $ rostopic echo /cmd_vel_mux/input/teleop

Et voilà, votre propre contrôleur robotique ROS basé sur Matlab. Si vous avez aimé mon instructable, donnez-lui un vote sur le concours d'auteur pour la première fois et partagez-le avec autant de personnes que possible. Merci.

Conseillé: