Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Alles einrichten
- Schritt 2: Verstehen, wie der Controller funktioniert
- Schritt 3: Erstellen einer ROS-MATLAB-Schnittstelle
- Schritt 4: Abrufen der IP-Adresse
- Schritt 5: Erstellen Sie eine GUI für den Controller
- Schritt 6: Programmieren der bearbeitbaren GUI-Tasten
- Schritt 7: Programmierung der GUI-Tasten
- Schritt 8: Einrichten der Netzwerkkonfiguration auf einem ROS-PC (Linux)
- Schritt 9: Führen Sie den Controller aus
Video: Matlab-basierte ROS Robotersteuerung - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
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
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
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
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
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
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
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
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)
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
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:
ROS installieren: 6 Schritte
So installieren Sie ROS: In diesem Tutorial erfahren Sie, wie Sie ROS installieren. Das Robot Operating System (ROS) ist eine Open-Source-Robotik-Middleware, mit der Sie Ihr Arduino steuern. Wenn Sie mehr erfahren möchten, besuchen Sie: http://wiki.ros.org/ROS/Introduction
So programmieren und veröffentlichen Sie Matlab 2016b in Word (Anleitung für Anfänger): 4 Schritte
So codieren und veröffentlichen Sie Matlab 2016b in Word (Einsteigerhandbuch): Matlab ist ein leistungsstarkes Sprachprogramm, das zum Berechnen technischer Ergebnisse verwendet wird. Es hat die Fähigkeit, Visualisierungen, Berechnungen und Programmierung auf benutzerfreundliche Weise zu integrieren. Mit diesem Programm kann der Benutzer Probleme und Lösungen veröffentlichen
Programmiererweiterungen in MATLAB trainieren: 6 Schritte
Verbesserungen bei der Zugprogrammierung in MATLAB: Ziel: Das Ziel dieses programmierten Systems besteht darin, einen kleinen Arduino zu betrachten und die Codierung in größerem Maßstab anzuwenden, um möglicherweise bestimmte Sicherheitsfunktionen von Amtrak-Eisenbahnsystemen zu verbessern. Dazu haben wir einen Bodenfeuchtesensor hinzugefügt
Tutorial zum Abtasten analoger Signale - MATLAB: 8 Schritte
Tutorial zum Abtasten analoger Signale | MATLAB: In diesem Tutorial zeigen wir, was Sampling ist. und Wie man ein analoges Signal mit der MATLAB-Software abtastet
So erstellen Sie mit MATLAB einen Hörtest für Erwachsene – wikiHow
So erstellen Sie einen Hörtest für Erwachsene mit MATLAB: HAFTUNGSAUSSCHLUSS: Unser Test ist KEINE medizinische Diagnose und sollte nicht als solche verwendet werden. Um das Gehör genau zu messen, wenden Sie sich bitte an einen Arzt. Mit Materialien, die wir bereits hatten, führte unsere Gruppe einen Hörtest durch. Unser Test ist nur für Erwachsene und Jugendliche bestimmt