Ansteuerung des UR3 Roboters mit Matlab und URSim mittels Realtime Schnittstelle: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 38: Zeile 38:
end
end
</pre>
</pre>
Anschließend muss dieser String über die Verbindung mit „fprintf“ gesendet werden.
== Bewegungsarten ==
=== Unterschied Lineare und Joint Bewegung ===
Der Roboter kann die Zielposition entweder durch direkte Drehung der Achsen anfahren oder seine resultierende Bewegung vorher Berechnen und für den Greifer eine lineare, gradlinige Bewegung erzeugen. Mit der linearen Bewegung lässt sich besser die Bewegung des Roboters abschätzen, da er sich im Joint Modus auch bei kleinen Bewegungen um seine eigene Achse drehen kann. Damit es hierbei zu keinen unerwarteten Problemen, wie das Verfahren durch Hindernisse, bei einem Programmstart kommt, fahren wir den Roboter zunächst in eine Ausgangsposition, in welcher er senkrecht nach oben zeigt. Analog zu „movej“ gibt es hierzu den Befehl „movel“.
=== Zielangaben ===
Die Zielkoordinaten einer Bewegung können entweder als direkte Winkel der Achsen (q1, q2, q3, q4, q5, q6) oder als Transformationsmatrix T angegeben werden. Die Umrechnung erfolgt über ikine und fkine und erfordert ein aktives Robotermodell, das mit dem Befehl „mdl_ur3;“ aktiviert wird.
=== Ikine ===
Mit ikine lassen sich aus einer Transformationsmatrix T neue Zielwinkel q bestimmen. Hierzu werden jedoch noch Startwinkel für die Berechnung benötigt. Es empfiehlt sich, für den Startwinkel die aktuellen Winkel der Gelenke zu nutzen. Sollte die Berechnung mittels Matlab nicht funktionieren, müssen andere Startwinkel gewählt werden oder geprüft werden, ob das Ziel im erreichbaren Roboterbereich liegt. <br>
Der Code für ikine sieht so aus:
<pre>
q = ur3.ikine(T,'q0',q_Startwinkel);
</pre>
=== Fkine ===
Mit fkine lässt sich aus einem q eine Transformationsmatrix T errechnen. Dies kann folgend umgesetzt werden:
<pre>
T = ur3.fkine(q_neu);
</pre>
== Quellcode ==
=== Aufbau mit Funktionen für Übersicht ===
Der von unserer Gruppe generierte Matlab Code ist in Funktionen gegliedert, um eine übersichtliche Programmierung zu gewährleisten und einzelne Programmteile erneut verwenden zu können. Somit lässt sich übersichtlich eine Verbindung zum Roboter aufbauen, einige Sicherheitspositionen anfahren und gezielt bestimmte Koordinaten in wenigen Zeilen anfahren:
<pre>
%% Ausführen der Bewegungen/Aufruf der Funktionen
connectRobot();
normaleGeschwindigkeit();
ResetUR3_startPositionUp();
%startPositionWithTurn();               
Startposition_MoveJ();
if(StopOnCalibrationPosition) return; end
langsameGeschwindigkeit();
moveTo_XYZ(0,-0.3,0.3);
moveTo_XYZ(-0.3,-0.3,0.3);
testPlateCoordinate();
</pre>
=== Globale Variablen und Bedeutung ===


== Einleitung ==
== Einleitung ==

Version vom 6. Januar 2021, 22:18 Uhr

→ zurück zur Seite Praktikum Produktionstechnik

Autor: Jan Pinter und Rina Mucaj
Betreuer: Prof. Dr. Mirek Göbel & Marc Ebmeyer


Einleitung

In diesem Artikel wird die Ansteuerung des UR3 Roboters mit Matlab und URSim mittels Realtime Schnittstelle beschrieben. Das Projekt fand im Rahmen des Praktikum Produktionstechnik im Wintersemester 20/21 statt. Die Aufgabe bestand darin, den UR3 Roboter so zu programmieren, dass er Legoteile aus einem Ablageort greift und diese auf eine Legoplatte platziert. Außerdem musste er durch wiederholsichere Bewegungen die Legoteile in verschiedenen Stellen platzieren. Zusätzlich wurde noch ein Magazin als Entnahmeort entwickelt, an dem der Roboter die Legosteine abnehmen kann.


Funktionaler und technischer Systementwurf

Mithilfe vom funktionalen (schwarz) und technischen Systementwurf (orange) konnten wir genau das Verhalten des Roboters darstellen. Der UR3 Roboter muss nach einer erfolgreichen Ethernet-Verbindung mit der Matlabsteuerung erstmal zu einer Startposition fahren. Durch Anfahren der Sicherheitspositionen und Einstellung der Geschwindigkeit nimmt er die Legoteile aus dem Magazin ab und platziert diese auf die Legoplatte.

Funktionaler und technischer Systementwurf



Ansteuerung des Roboters

Das Ansteuern des UR3 mit Matlab ist möglich, jedoch nicht einfach. Bereits nach 2 Stunden war es möglich, ohne Matlab mit der Programmierung des Polyscopes einen LEGO Stein wiederholt aufzunehmen und auf der Platte zu platzieren. Die Programmierung in Matlab erwies sich als schwierig, da viele Funktionen, die es im Polyscope gibt, nicht direkt in Matlab gibt. Die Verwendung der Robotic Toolbox von Peter Corke schafft zwar eine Lösungsmöglichkeit, jedoch muss man hier bereits genau wissen, wie die einzelnen Befehle anzuwenden sind, da es sonst zu Fehlern oder Abbrüchen des Programms kommt. Ebenso werden einige nützliche Polyscopebefehle nicht unterstützt. Abhilfe muss hier über andere Wege geschafft werden, wie über die Variablentabelle der Realtime TCP Verbindung. Sind alle Befehle bekannt und lassen sich alle Funktionen umsetzen, bietet die Programmierung über Matlab jedoch den Vorteil, weitere Funktionalitäten aus Matlab einzubeziehen, wie das Auslesen einer Excel Tabelle für die Steinkoordinaten. Eine Simulation der Bewegungen kann in Matlab auch erfolgen. Diese wäre jedoch auch ohne Matlab mit URSim möglich. Durch die Verwendung von Matlab erlernt man den Umgang mit Skripthandbüchern, die für die Anwendung von nicht selbst programmierten Befehlen nötig sind.

Herstellung der Verbindung und einfache Bewegungen mit Matlab

Um mit dem Roboter über eine Ethernet-Verbindung kommunizieren zu können, muss ein TCP Port geöffnet werden. Der Port für die Realtime Kommunikation zum Roboter ist 30003. Die IP des Roboters muss gegebenenfalls auf statisch festgelegt werden anstatt DHCP. Für das Erzeugen einer Bewegung gibt es im Skripthandbuch von UR bestimmte Befehle. So ist eine Bewegung aller Achsen des Roboters auf bestimmte Zielwinkel „q“ mit der Funktion „movej(q, a, v, t=0, r=0)“ möglich. Die zu übergebenden Variablen sind hier ebenfalls beschrieben, wobei in diesem Beispiel „a“ die Beschleunigung und „v“ die maximale Geschwindigkeit der Achsen sind. Dieser Befehl muss als String, also nicht als Variablen, an die Steuerung des Roboters übergeben werden. Dies kann in Matlab mit „num2str“ so umgesetzt werden:

function [commandString] = command2string(q,a,v,t,r)
    
    commandString = ['movej([' num2str(q(1)) ', ' num2str(q(2)) ', ' num2str(q(3)) ', ' num2str(q(4))...
                    ', ' num2str(q(5)) ', ' num2str(q(6)) '], ' num2str(a) ', ' num2str(v) ', ' num2str(t)...
                    ', ' num2str(r) ')'];

end

Anschließend muss dieser String über die Verbindung mit „fprintf“ gesendet werden.

Bewegungsarten

Unterschied Lineare und Joint Bewegung

Der Roboter kann die Zielposition entweder durch direkte Drehung der Achsen anfahren oder seine resultierende Bewegung vorher Berechnen und für den Greifer eine lineare, gradlinige Bewegung erzeugen. Mit der linearen Bewegung lässt sich besser die Bewegung des Roboters abschätzen, da er sich im Joint Modus auch bei kleinen Bewegungen um seine eigene Achse drehen kann. Damit es hierbei zu keinen unerwarteten Problemen, wie das Verfahren durch Hindernisse, bei einem Programmstart kommt, fahren wir den Roboter zunächst in eine Ausgangsposition, in welcher er senkrecht nach oben zeigt. Analog zu „movej“ gibt es hierzu den Befehl „movel“.

Zielangaben

Die Zielkoordinaten einer Bewegung können entweder als direkte Winkel der Achsen (q1, q2, q3, q4, q5, q6) oder als Transformationsmatrix T angegeben werden. Die Umrechnung erfolgt über ikine und fkine und erfordert ein aktives Robotermodell, das mit dem Befehl „mdl_ur3;“ aktiviert wird.

Ikine

Mit ikine lassen sich aus einer Transformationsmatrix T neue Zielwinkel q bestimmen. Hierzu werden jedoch noch Startwinkel für die Berechnung benötigt. Es empfiehlt sich, für den Startwinkel die aktuellen Winkel der Gelenke zu nutzen. Sollte die Berechnung mittels Matlab nicht funktionieren, müssen andere Startwinkel gewählt werden oder geprüft werden, ob das Ziel im erreichbaren Roboterbereich liegt.
Der Code für ikine sieht so aus:


q = ur3.ikine(T,'q0',q_Startwinkel);

Fkine

Mit fkine lässt sich aus einem q eine Transformationsmatrix T errechnen. Dies kann folgend umgesetzt werden:


T = ur3.fkine(q_neu);

Quellcode

Aufbau mit Funktionen für Übersicht

Der von unserer Gruppe generierte Matlab Code ist in Funktionen gegliedert, um eine übersichtliche Programmierung zu gewährleisten und einzelne Programmteile erneut verwenden zu können. Somit lässt sich übersichtlich eine Verbindung zum Roboter aufbauen, einige Sicherheitspositionen anfahren und gezielt bestimmte Koordinaten in wenigen Zeilen anfahren:


%% Ausführen der Bewegungen/Aufruf der Funktionen
connectRobot();
normaleGeschwindigkeit();
ResetUR3_startPositionUp();
%startPositionWithTurn();                
Startposition_MoveJ();
if(StopOnCalibrationPosition) return; end
langsameGeschwindigkeit();
moveTo_XYZ(0,-0.3,0.3);
moveTo_XYZ(-0.3,-0.3,0.3);
testPlateCoordinate();

Globale Variablen und Bedeutung

Einleitung

Dieser Artikel ist eine Vorlage für einen Wiki-Artikel. Tipp: Kopieren Sie den gesamten Quelltext und ändern Sie ihn so, dass er Ihr Projekt beschreibt.

Dieser Artikel ist aus der Kategorie "How-To".

Inhalt

Die Gliederung des Inhalts hängt stark von Ihrem individuellen Projekt ab. Benutzen Sie einen leicht nachvollziehbaren roten Faden und gliedern Sie nach gesundem Menschenverstand!


Unterabschnitt

  1. Nutzen Sie Aufzählungen
    • mit verschiedenen Schachtelungen
    • und so weiter
  2. zweite Ebene
    • mit erneuter Unterebene

Bilder

Bauen Sie Bilder ein, am besten mit darin gekennzeichneten Stellen, die Sie dann im Text erklären.

Beispielbild mit Quelle [1]

Bilder in den Text einbetten

Wenn Sie Bilder anzeigen möchten, ohne das der Artikel links oder rechts weiter läuft, können Sie den Textfluss mit dem Befehl <br clear=all> stoppen.

Beispiel <br clear=all>


Alternativ können Sie das Bild in einer "wikitable" anzeigen lassen. Dadurch wird das Bild auch auf Bildschirmen mit einer anderen Auflösung in der richtigen Darstellungsart angezeigt.

Beispiel wikitable

Hier geht es weiter mit dem Text.

Tabellen

Eine tolle Tabelle ist hier dargestellt.

Spalte 1 Spalte 2 Spalte 3
blabla sowieso sowieso
test sowieso test1

Formeln

Für Formeln nutzen Sie die <math>-Umgebung.

Dieser Quelltext

<math> y = \int\limits_0^2 {\sin \frac{x}{2}dx}</math>

wird dann so dargestellt .

Eine Übersicht über die Befehle findet sich z. B. hier: Gleichungen in math.

Formatierung

Nutzen Sie zur Formatierung Beispiele, z. B. aus dem weltbekannten Wikipedia selbst (das ist die gleiche Syntax!) oder anderer Hilfeseiten wie z. B. [2].

Quelltext

Details siehe: Quelltext_einbinden.


Bei lang= muss die richtige Sprache eingetragen werden (matlab, c,...).

 
for i=1:10 
%     try
%         image = CAMERA_DumpFrame(s);       
%     catch err
%         error('MATLAB:RWTHMindstormsNXT:Sensor:unknown', 'An unknown Error occured while fetching the image. Please check that the Camera is connected and try again');
%     end
    image = CAMERA_GetImage(com);
    handle = imshow(image);
    %pause(0.1)
    currTime(i) = toc(startTime);
    disp(['Aktuelle Zeit: ',num2str(currTime(i))])
    %imwrite(image,sprintf('NXTCamImage%03d.png',i));
    %imwrite(img,fullfile(workingDir,sprintf('HexBug%03d.png',n)));
    % ca. alle 4.8 Sekunden ein Bild
end;

Zusammenfassung

Was ist das Ergbnis? Das Ergebnis dieses Artikels ist eine Vorlage, mit der Nutzer des Wikis schnell und leicht eigene Artikel verwirklichen können. Diese Vorlage ist Bestandteil der Anleitungen aus den How-To's.


Ausblick

Was kann/muss noch verbessert werden?


Literaturverzeichnis