Inhaltsverzeichnis:

Matlab-basierte ROS Robotersteuerung - Gunook
Matlab-basierte ROS Robotersteuerung - Gunook

Video: Matlab-basierte ROS Robotersteuerung - Gunook

Video: Matlab-basierte ROS Robotersteuerung - Gunook
Video: Robotik 1 - Kapitel 6 - Bahnsteuerung 2024, Juli
Anonim
Image
Image
Matlab-basierte ROS Robotersteuerung
Matlab-basierte ROS Robotersteuerung

Seit meiner Kindheit habe ich immer davon geträumt, Iron Man zu sein und tue es immer noch. Iron Man ist einer dieser Charaktere, der realistisch möglich ist und einfach gesagt, ich strebe danach, eines Tages Iron Man zu werden, auch wenn die Leute über mich lachen oder sagen, es ist unmöglich, weil "es nur unmöglich ist, bis es jemand tut" - Arnold Schwarzenegger.

ROS ist ein aufstrebendes Framework, das zur Entwicklung komplexer Robotiksysteme verwendet wird. Seine Anwendungen umfassen: Automatisierte Montagesysteme, Teleoperation, Prothesenarme und schwere Maschinen des Industriesektors.

Forscher und Ingenieure nutzen ROS für die Entwicklung der Prototypen, während verschiedene Anbieter es für die Erstellung ihrer Produkte verwenden. Es hat eine komplexe Architektur, die es schwierig macht, von einem lahmen Mann verwaltet zu werden. Die Verwendung von MATLAB zum Erstellen der Schnittstellenverbindung mit ROS ist ein neuartiger Ansatz, der Forschern, Ingenieuren und Anbietern bei der Entwicklung robusterer Lösungen helfen kann.

In diesem anweisbaren geht es also darum, wie man einen Matlab-basierten ROS-Roboter-Controller herstellt. Dies wird eines der wenigen Tutorials zu diesem Thema und unter den wenigen ROS-Anleitungen sein. Das Ziel dieses Projekts ist es, einen Controller zu entwickeln, der jeden an Ihr Netzwerk angeschlossenen ROS-Roboter steuern kann. Also lasst uns anfangen!

Credits für die Videobearbeitung: Ammar Akher, unter [email protected]

Lieferungen

Folgende Komponenten werden für das Projekt benötigt:

(1) ROS-PC/Roboter

(2) Router

(3) PC mit MATLAB (Version: 2014 oder höher)

Schritt 1: Alles einrichten

Alles einrichten
Alles einrichten

Für dieses anweisbare verwende ich Ubuntu 16.04 für meinen Linux-PC und Ros-Kinetic. Um Verwirrung zu vermeiden, empfehle ich die Verwendung von Ros-Kinetik und Ubuntu 16.04, da es die beste Unterstützung für Ros-Kinetik hat. Weitere Informationen zur Installation von ros kinetic finden Sie unter https://wiki.ros.org/kinetic/Installation/Ubuntu. Für MATLAB kaufen Sie entweder eine Lizenz oder laden hier eine Trail-Version herunter.

Schritt 2: Verstehen, wie der Controller funktioniert

Verstehen, wie der Controller funktioniert
Verstehen, wie der Controller funktioniert

Ein PC führt die Robotersteuerung auf MATLAB aus. Der Controller übernimmt die IP-Adresse und den Port des ros-PCs/Roboters.

Ein ros-Topic dient zur Kommunikation zwischen der Steuerung und dem ros-PC/Roboter, das auch als Eingabe von der Steuerung verwendet wird. Das Modem wird benötigt, um ein LAN (Local Area Network) zu erstellen und weist allen Geräten, die mit seinem Netzwerk verbunden sind, die IP-Adressen zu. Daher müssen der ros-PC/Roboter und der PC, auf dem der Controller läuft, beide mit demselben Netzwerk (dh dem Netzwerk des Modems) verbunden sein. Nun, da Sie wissen, "wie es funktioniert", kommen wir zu "wie es aufgebaut ist" …

Schritt 3: Erstellen einer ROS-MATLAB-Schnittstelle

Erstellen einer ROS-MATLAB-Schnittstelle
Erstellen einer ROS-MATLAB-Schnittstelle
Erstellen einer ROS-MATLAB-Schnittstelle
Erstellen einer ROS-MATLAB-Schnittstelle
Erstellen einer ROS-MATLAB-Schnittstelle
Erstellen einer ROS-MATLAB-Schnittstelle

Das ROS-MATLABInterface ist eine nützliche Schnittstelle für Forscher und Studenten, um ihre Roboteralgorithmen in MATLAB zu prototypieren und auf ROS-kompatiblen Robotern zu testen. Diese Schnittstelle kann mit der Robotiksystem-Toolbox in Matlab erstellt werden und wir können unseren Algorithmus prototypisieren und testen einem ROS-fähigen Roboter oder in Robotersimulatoren wie Gazebo und V-REP.

Um die Robotiksystem-Toolbox auf Ihrem MATLAB zu installieren, gehen Sie einfach auf die Option Add-on in der Symbolleiste und suchen Sie im Add-on-Explorer nach robotic toolbox. Mit der Robotik-Toolbox können wir ein Thema veröffentlichen oder abonnieren, z. B. einen ROS-Knoten, und wir können ihn zu einem ROS-Master machen. Die MATLAB-ROS-Schnittstelle verfügt über die meisten ROS-Funktionalitäten, die Sie für Ihre Projekte benötigen.

Schritt 4: Abrufen der IP-Adresse

Abrufen der IP-Adresse
Abrufen der IP-Adresse
Abrufen der IP-Adresse
Abrufen der IP-Adresse

Damit der Controller funktioniert, müssen Sie unbedingt die IP-Adresse Ihres ROS-Roboters/-PCs und des PCs kennen, auf dem der Controller unter MATLAB ausgeführt wird.

So erhalten Sie die IP Ihres PCs:

Unter Windows:

Öffnen Sie die Eingabeaufforderung und geben Sie den Befehl ipconfig ein und notieren Sie die IPv4-Adresse

Für Linux:

Geben Sie den Befehl ifconfig ein und notieren Sie die inet-Adresse. Jetzt, da Sie die IP-Adresse haben, ist es an der Zeit, die GUI zu erstellen …

Schritt 5: Erstellen Sie eine GUI für den Controller

Erstellen Sie eine GUI für den Controller
Erstellen Sie eine GUI für den Controller
Erstellen Sie eine GUI für den Controller
Erstellen Sie eine GUI für den Controller
Erstellen Sie eine GUI für den Controller
Erstellen Sie eine GUI für den Controller

Um die GUI zu erstellen, öffnen Sie MATLAB und geben Sie guide in das Befehlsfenster ein. Dadurch wird die Guide-App geöffnet, über die wir unsere GUI erstellen werden. Sie können auch den App-Designer in MATLAB verwenden, um Ihre GUI zu entwerfen.

Wir werden insgesamt 9 Schaltflächen erstellen (wie in Abb. gezeigt):

6 Drucktasten: Vorwärts, Rückwärts, Links, Rechts, Mit Roboter verbinden, Trennen

3 Editierbare-Buttons: Ros PC IP, Port und Topic Name.

Die Editable-Buttons sind die Buttons, die die IP des ROS-PCs, seinen Port und den Topic-Namen als Eingabe annehmen. Der Themenname ist die Kommunikation zwischen dem MATLAB-Controller und dem ROS-Roboter/-PC. Um die Zeichenfolge auf der bearbeitbaren Schaltfläche zu bearbeiten, klicken Sie mit der rechten Maustaste auf die Schaltfläche >> gehen Sie zu Inspektoreigenschaften >> Zeichenfolge und bearbeiten Sie den Text der Schaltfläche.

Sobald Ihre GUI fertig ist, können Sie die Tasten programmieren. Hier beginnt der wahre Spaß…

Schritt 6: Programmieren der bearbeitbaren GUI-Tasten

Programmieren der bearbeitbaren GUI-Tasten
Programmieren der bearbeitbaren GUI-Tasten
Programmieren der bearbeitbaren GUI-Tasten
Programmieren der bearbeitbaren GUI-Tasten
Programmieren der bearbeitbaren GUI-Tasten
Programmieren der bearbeitbaren GUI-Tasten
Programmieren der bearbeitbaren GUI-Tasten
Programmieren der bearbeitbaren GUI-Tasten

Die GUI wird als.fig-Datei gespeichert, aber der Code/Callback-Funktionen werden im.m-Format gespeichert. Die.m-Datei enthält den Code für alle Ihre Schaltflächen. Um Ihren Schaltflächen Callback-Funktionen hinzuzufügen, klicken Sie mit der rechten Maustaste auf die Schaltfläche > >Rückrufe anzeigen>>Rückruf. Dadurch wird die.m-Datei für Ihre GUI dort geöffnet, wo diese bestimmte Schaltfläche definiert ist.

Der erste Rückruf, den wir codieren werden, ist für die bearbeitbare Schaltfläche ROS IP. Schreiben Sie unter Funktion edit1_Callback folgenden Code:

Funktion edit1_Callback(hObject, eventdata, handles)

global ros_master_ip

ros_master_ip = get(hObject, 'String')

Hier ist die Funktion als edit1_Callback definiert, was sich auf den ersten editierbaren Button bezieht. Wenn wir in diese bearbeitbare Schaltfläche eine IP-Adresse aus dem ROS-Netzwerk eingeben, wird die IP-Adresse als String in einer globalen Variablen namens ros_master_ip gespeichert.

Dann direkt unter _OpeningFcn(hObject, eventdata, handles, varargin) folgendes definieren (siehe Abb):

global ros_master_ip

globaler ros_master_port

globaler teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Sie haben gerade die ros-pc-IP (ros_master_ip), den Port (ros_master_port) und den Teleop-Topic-Namen global hartcodiert. Dies bewirkt, dass diese vordefinierten Werte beim Verbinden verwendet werden, wenn Sie die bearbeitbaren Schaltflächen leer lassen.

Der nächste Rückruf, den wir codieren werden, ist für die Schaltfläche Port editierbar.

Schreiben Sie unter der Funktion edit2_Callback folgenden Code:

Funktion edit2_Callback(hObject, eventdata, handles)

globaler ros_master_port

ros_master_port = get(hObject, 'String')

Hier ist die Funktion als edit2_Callback definiert, was sich auf den zweiten editierbaren Button bezieht. Wenn wir hier den Port des ros-PC/Roboters aus dem ROS-Netzwerk in diese bearbeitbare Schaltfläche eingeben, wird der Port als String in einer globalen Variablen namens ros_master_port gespeichert.

In ähnlicher Weise ist der nächste Callback, den wir codieren werden, für die Schaltfläche zum Bearbeiten des Themennamens.

Schreiben Sie unter der Funktion edit3_Callback folgenden Code:

Funktion edit3_Callback(hObject, eventdata, handles)

globaler teleop_topic_name

teleop_topic_name = get(hObject, 'String')

Ähnlich wie ros_master_port wird auch dieser als String in einer globalen Variablen gespeichert.

Als nächstes schauen wir uns die Rückruffunktionen für die Taster an…

Schritt 7: Programmierung der GUI-Tasten

Programmierung der GUI-Tasten
Programmierung der GUI-Tasten
Programmierung der GUI-Tasten
Programmierung der GUI-Tasten

Die zuvor erstellten Drucktasten werden zum Bewegen, Verbinden und Trennen des Roboters von der Steuerung verwendet. Die Callbacks auf Knopfdruck sind wie folgt definiert:

z. B. Funktion pushbutton6_Callback(hObject, eventdata, handles)

Hinweis: Abhängig von der Reihenfolge, in der Sie Ihre Drucktasten erstellt haben, werden sie entsprechend nummeriert. Daher könnte die Funktion pushbutton6 in meiner.m-Datei für Vorwärts sein, während sie in Ihrer.m-Datei für Rückwärts sein könnte, also denken Sie daran. Um zu wissen, welche die genaue Funktion für Ihre Drucktaste ist, klicken Sie einfach mit der rechten Maustaste>> Rückrufe anzeigen>> Rückrufe und es wird die Funktion für Ihre Drucktaste geöffnet, aber für dieses anweisbare gehe ich davon aus, dass es dasselbe ist wie meins.

Für die Schaltfläche Mit Roboter verbinden:

Unter der Funktion pushbutton6_Callback(hObject, eventdata, handles):

Funktion pushbutton6_Callback(hObject, eventdata, handles) global ros_master_ip

globaler ros_master_port

globaler teleop_topic_name

globaler Roboter

globale velmsg

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

setenv('ROS_MASTER_URI', ros_master_uri)

Kolophonium

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

velmsg = rosmessage(Roboter);

Dieser Callback setzt die Variable ROS_MASTER_URI, indem er ros_master_ip und den Port verkettet. Dann wird der rosinit-Befehl die Verbindung initialisieren. Nach der Verbindung wird ein Herausgeber von Geometrie_msgs/Twist erstellt, der zum Senden der Befehlsgeschwindigkeit verwendet wird. Der Themenname ist der Name, den wir im Bearbeitungsfeld eingeben. Sobald die Verbindung erfolgreich ist, können wir die Tasten Vorwärts, Rückwärts, Links und Rechts bedienen.

Bevor wir Callbacks zu den Vorwärts- und Rückwärts-Tasten hinzufügen, müssen wir die Geschwindigkeiten der Linear- und Winkelgeschwindigkeit initialisieren.

Definieren Sie daher unten _OpeningFcn(hObject, eventdata, handles, varargin) Folgendes (siehe Abb):

global left_spinVelocity global right_spinVelocity

globale Vorwärtsgeschwindigkeit

globale Rückwärtsgeschwindigkeit

left_spinVelocity = 2;

right_spinVelocity = -2;

Vorwärtsgeschwindigkeit = 3;

Rückwärtsgeschwindigkeit = -3;

Hinweis: Alle Geschwindigkeiten sind in rad/s

Nachdem nun die globalen Variablen definiert sind, programmieren wir die Bewegungstasten.

Für die Vorwärts-Taste:

Funktion pushbutton4_Callback(hObject, eventdata, handles) global velmsg

globaler Roboter

globaler teleop_topic_name

globale Vorwärtsgeschwindigkeit

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

senden (Roboter, velmsg);

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

Ähnlich für die Rückwärtstaste:

Funktion pushbutton5_Callback(hObject, eventdata, handles)

globale velmsg

globaler Roboter

globale Rückwärtsgeschwindigkeit

globaler teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = rückwärtsGeschwindigkeit;

senden (Roboter, velmsg);

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

Ähnlich für die linke Drucktaste: Funktion pushbutton3_Callback(hObject, eventdata, handles)

globaler velmsgglobal-Roboter global left_spinVelocity

globaler teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

senden (Roboter, velmsg);

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

Ähnlich für die rechte Drucktaste:

globaler velmsglobal-Roboter

global right_spinVelocity

globaler teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

senden (Roboter, velmsg);

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

Nachdem alle Callback-Funktionen hinzugefügt und die Dateien gespeichert wurden, können wir unseren Controller testen.

Schritt 8: Einrichten der Netzwerkkonfiguration auf einem ROS-PC (Linux)

Einrichten der Netzwerkkonfiguration auf einem ROS-PC (Linux)
Einrichten der Netzwerkkonfiguration auf einem ROS-PC (Linux)
Einrichten der Netzwerkkonfiguration auf einem ROS-PC (Linux)
Einrichten der Netzwerkkonfiguration auf einem ROS-PC (Linux)

Wir werden den Controller auf einem Ros-PC (Linux) testen, wofür die Netzwerkkonfiguration eingerichtet werden muss. Wenn Sie den Controller auch auf einem Linux-PC betreiben, müssen Sie dort auch die Netzwerkkonfiguration einrichten.

Netzwerkkonfiguration:

Öffnen Sie Ihr Terminalfenster und geben Sie gedit.bashrc. ein

Sobald die Datei geöffnet ist, fügen Sie Folgendes hinzu:

#Robotermaschinenkonfiguration

export ROS_MASTER_URI=https://localhost:1311

#IP-Adresse des ROS-Masterknotens

export ROS_HOSTNAME=

ROS_IP exportieren=

echo "ROS_HOSTNAME: " $ROS_HOSTNAME

echo "ROS_IP:"$ROS_IP

echo "ROS_MASTER_URI:"$ROS_MASTER_URI

Aufgrund der dynamischen IP-Vergabe müssen Sie diesen Schritt jedes Mal wiederholen.

Schritt 9: Führen Sie den Controller aus

Führen Sie den Controller aus
Führen Sie den Controller aus

Wir werden unseren Controller auf einem Turtle-Bot in Gazebo testen.

Informationen zur Installation von Gazebo finden Sie unter

Informationen zur Installation des Turtle-Bots finden Sie unter

Öffnen Sie den Ordner, in dem Sie Ihre.fig- und.m-Dateien auf MATLAB gespeichert haben, und drücken Sie Ausführen (wie im Bild gezeigt). Dadurch wird der Controller auf dem PC geöffnet. Stellen Sie vor dem Drücken von Verbinden sicher, dass Ihr Turtle-Bot-Simulator funktioniert.

So testen Sie Ihre TurtleBot-Simulation:

Öffnen Sie das Terminal auf dem Ros-PC und geben Sie Folgendes ein: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Dies öffnet eine Simulation von Turtlebot auf diesem PC. Der Themenname von TurtleBot ist /cmd_vel_mux/input/teleop, den wir bereits in der Anwendung bereitgestellt haben. Geben Sie die ros pc-IP-Adresse, den Port und den Themennamen in die bearbeitbaren Schaltflächen ein und drücken Sie die Schaltfläche. Mit Roboter verbinden. Ihr Turtle-Bot sollte sich bewegen, wenn Sie Vorwärts, Rückwärts usw. drücken.

So zeigen Sie die Linear- und Winkelgeschwindigkeiten an:

Öffnen Sie ein neues Terminal und geben Sie den Befehl ein: $ rostopic echo /cmd_vel_mux/input/teleop

Und da haben Sie Ihren ganz eigenen ROS Robotic Controller auf Matlab-Basis. Wenn Sie mein instructable mochten, geben Sie es bitte über den Erstautorenwettbewerb ab und teilen Sie es mit so vielen Leuten wie möglich. Dankeschön.

Empfohlen: