Die rvctools-Toolbox von MATLAB ist mit Kinematik vertraut [Beispiel eines Roboterarmroboters]

1. Laden Sie rvctools herunter und installieren Sie es

Rvctools-Download-Adresse: Rvctools-Download Der Screenshot sieht wie folgt aus: Klicken Sie zum Herunterladen auf Freigegebenen Ordner herunterladen “,
der durch den roten Pfeil gekennzeichnet ist

Entpacken Sie es nach dem Herunterladen in das Toolbox-Verzeichnis D:\MATLAB\toolbox . Wählen Sie diesen Installationspfad entsprechend Ihrer Situation. Wenn MATLAB nicht installiert ist, können Interessierte Folgendes überprüfen: Download, Installation und Verwendung von MatLab (gültig für persönliche Zwecke). testen)

Dann öffnen wir MATLAB, öffnen die oben dekomprimierte Roboter-Toolbox, doppelklicken auf „ startup_rvc.m“ und klicken auf „Ausführen“, wie unten gezeigt:

Auf diese Weise wird die Roboter-Toolbox problemlos installiert. Der Code von Startup_rvc.m lautet wie folgt: 

function startup_rvc
    disp('Robotics, Vision & Control: (c) Peter Corke 1992-2020 http://www.petercorke.com')
    
    if verLessThan('matlab', '7.0')
        warning('You are running a very old (and unsupported) version of MATLAB.  You will very likely encounter significant problems using the toolboxes but you are on your own with this');
    end
    tb = false;
    startup_path = fileparts( mfilename('fullpath') );
    [~,folder]=fileparts(startup_path);
    if strfind(folder, 'common')
        % startup_rvc is in common folder
        rvcpath = fileparts(startup_path);
    else
        % startup_rvc is in folder above common
        rvcpath = startup_path;
    end
    
    robotpath = fullfile(rvcpath, 'robot');
    if exist(robotpath, 'dir')
        addpath(robotpath);
        tb = true;
        if exist('startup_rtb') == 2
            startup_rtb
        end
    end
    
    visionpath = fullfile(rvcpath, 'vision');
    if exist(visionpath, 'dir')
        addpath(visionpath);
        tb = true;
        if exist('startup_mvtb') == 2
            startup_mvtb
        end
    end
    
    if tb
        % RTB or MVTB is present
        
        % add spatial math toolbox
        p = fullfile(rvcpath, 'spatial-math');
        if exist(p, 'dir')
            try
                fp = fopen( fullfile(p, 'RELEASE'), 'r');
                release = fgetl(fp);
                fclose(fp);
            catch ME
                release = [];
            end
            if release
                release = ['(release ' release ')'];
            else
                release = '';
            end
            fprintf('- Spatial Math Toolbox for MATLAB %s\n', release)
            addpath(p);
        end
                
        % add common files
        addpath(fullfile(rvcpath, 'common'));
    else
        fprintf('Neither Robotics Toolbox or MachineVision Toolbox found in %s\n', rvcpath);
    end
        
    % check for any install problems
    rvccheck(false)
end

Wenn Sie MATLAB später schließen und den Roboter ausführen möchten, führen Sie einfach die Funktion Startup_rvc aus

2. Kinesiologie

Die Bewegungen eines Roboters oder Flugzeugs, die sich im Laufe der Zeit ändern, werden als Kinematik bezeichnet. Dies unterscheidet sich von der Dynamik. Die Dynamik untersucht die Faktoren , die die Bewegung beeinflussen, während die Dynamik Kräfte .Dynamikund Bei der Bewegung handelt es sich im Wesentlichen um Translation und Rotation, die Transformationen wie Koordinatensysteme und Winkel beinhalten. Als nächstes wollen wir etwas darüber lernen.

2.1. Übersetzung

Die Translation des Objekts ist relativ einfach, nämlich die Translation entlang der drei XYZ-Achsen und
die Translation entlang der X-Achse: transl(2,0,0)

Entlang der Y-Achse verschieben: transl(0,2,0) 

Entlang der Z-Achse verschieben: transl(0,0,2) 

Natürlich können Sie auch auf beiden XYZ-Achsen übersetzen: transl(1,3,2) 

Schauen wir uns den Effekt der letzten Zeichnung an: trplot(transl(1,3,2)) , wie unten gezeigt:

Die Position des roten Punkts, den ich markiert habe, ist (1,3,2) . Da er im dreidimensionalen Raum angezeigt wird, scheinen die Werte der XYZ-Achse falsch zu sein. Tatsächlich sind sie korrekt . Sie können dieses Bild in MATLAB ziehen und drehen. Dann werden Sie feststellen, dass die Koordinaten des roten Punktes (1,3,2) sind. 

2.2. Rotation

Rotation ist eine kreisförmige Bewegung um eine Achse

Um die X-Achse drehen: Rx = rotx(pi/2) 

Um die Y-Achse drehen: Ry = roty(pi/2)

Um die Z-Achse drehen: Rz = rotz(pi/2) 

Rotationsüberlagerung: Rxy = Rx * Ry

Animationsdemonstration: tranimate(Rxy) , die sehr klar und intuitiv aussieht. 

Schauen wir uns Punkt (3,4) an , um 60 Grad gedreht:

T1=SE2(3,4,pi/3)

T1 = 
    0.5000   -0.8660         3
    0.8660    0.5000         4
         0         0         1

Zeichnen Sie es: trplot(T1) wie folgt:

Wir können die Ergebnisse in der transforms3d- Bibliothek auch verwenden, um die in MATLAB generierten Ergebnisse zu überprüfen. Der Code lautet wie folgt:

import transforms3d as tfs
import math
print(tfs.euler.euler2mat(math.pi/3,0,0))
/*
[[ 1.         0.         0.       ]
 [ 0.         0.5       -0.8660254]
 [-0.         0.8660254  0.5      ]]
*/

 Die Ergebnisse in MATLAB sind wie folgt:

T2=rotx(pi/3)
/*
T2 =

    1.0000         0         0
         0    0.5000   -0.8660
         0    0.8660    0.5000
*/

Das Obige ist das Bogenmaßsystem. Sie können auch das Winkelsystem verwenden und den Grad-Parameter angeben: rotx (60, 'deg')

3. Sechsachsiger Roboter

3.1. Gelenkverbindungsstange

Hier verwenden wir die geänderten DH-Parameter , das heißt, die nächste Link-Funktion gibt die geänderten Parameter  an

L = Link([1 2 3 4],'modified')
%L = Revolute(mod): theta=q, d=2, a=3, alpha=4, offset=0

Die Parameter in der Link-Funktion werden jeweils als Gelenkwinkel [L1.theta], Link-Offset [L1.d], Link-Länge [L1.a], Link-Rotationswinkel [L1.alpha] ausgedrückt, und der geänderte Parameter stellt dies dar eine verbesserte Version der DH-Parameter.
Hier ist eine Einführung in das relevante Wissen über DH:
DH-Parameter sind eine von Denavit und Hartenberg vorgeschlagene Parametrisierungsmethode, die die Beziehung zwischen Robotergelenken beschreibt. Die DH-Parametermethode kann vier Parameter verwenden, um die relative Beziehung zwischen starren Körpern darzustellen, einschließlich der Translationslänge a entlang der Z-Achse, des Rotationswinkels α entlang der gemeinsamen Normalen, des Versatzabstands d in der XZ-Ebene und der Rotation um die Z-Achse. Winkel θ.
DH-Parameter werden in ROS häufig verwendet, um die Beziehung zwischen Robotergelenken und Koordinatensystemen zu beschreiben. Sie werden hauptsächlich für Vorwärtskinematikberechnungen verwendet. Die Transformationsmatrix jedes Gelenks kann über die DH-Tabelle erhalten werden, und alle Transformationsmatrizen werden miteinander multipliziert. Schließlich , wird die Transformationsmatrix vom Referenzkoordinatensystem zum Endeffektorkoordinatensystem erhalten.
Diese DH-Methode ist in der Kinematik relativ verbreitet, es gibt aber auch andere Methoden wie Lie-Algebra-Methoden.

Pleueltyp

L.type()
%ans =    'R'

Mit anderen Worten handelt es sich um einen rotierenden R- Gelenktyp (Revolute-Gelenk). Darüber hinaus gibt es auch ein zylindrisches (prismatisches) Gelenk.

Der nächste Schritt besteht darin, jeweils 6 Gelenke zu erstellen, um den 6-Achsen-Roboterarm vorzubereiten:

L1 = Link([0 0 0 0],'modified')
L2 = Link([0 0.138+0.024 0 -pi/2],'modified')
L3 = Link([0 -0.127-0.024 0.42 0],'modified')
L4 = Link([0 0.114+0.021 0.375 0],'modified')
L5 = Link([0 0.114+0.021  0 -pi/2],'modified')
L6 = Link([0 0.09+0.021  0 pi/2],'modified')

3.2. SerialLink-Roboterarm

Die 6 Gelenke sind oben definiert. Als nächstes verwenden wir SerialLink , um diese Gelenke zu verbinden, um einen sechsachsigen Roboterarm zu bilden. 

MyBot = SerialLink([L1,L2,L3,L4,L5,L6],'name','Six Axis Robot')

Werfen wir zunächst einen Blick auf die Methoden von SerialLink : help(SerialLink)

---SerialLink-Hilfe---

 SerialLink Roboterklasse mit serieller Verbindung
 
  Eine konkrete Klasse, die einen Armroboter mit serieller Verbindung darstellt. Jedes Glied
  und Gelenk in der Kette wird durch ein Link-Klassenobjekt unter Verwendung von Denavit-Hartenberg-
  Parametern (Standard oder modifiziert) beschrieben.
 
  Konstruktormethoden::
   Allgemeiner SerialLink-Konstruktor
   L1+L2, Konstrukt aus Link-Objekten.
 
  Anzeige-/Plot-Methoden::
   animieren, animieren, Robotermodell
   anzeigen, die Link-Parameter in für Menschen lesbarer Form drucken,
   dyn, dynamische Parameter des Links anzeigen
   , bearbeiten, kinematische und dynamische Parameter anzeigen und bearbeiten,
   getpos, die Position von abrufen Grafischer
   Roboterplot, grafische Darstellung des Roboterplots,
   3D-Anzeige, grafisches 3D-Modell des Roboters,
   Anlernen des grafischen Roboters, Fahren.
 
  Testmethoden:
   islimit-Test, ob der Roboter an der Gelenkgrenze ist,
   isconfig-Test, Robotergelenkkonfiguration,
   issym-Test, ob der Roboter symbolische Parameter hat,
   isprismatischer Index der prismatischen Gelenke,
   isrevolute-Index der Drehgelenke
   issphärischer Test, wenn der Roboter ein sphärisches Handgelenk hat
   isdh Test, wenn der Roboter ein Standard-DH-Modell hat
   ismdh Test, wenn der Roboter ein modifiziertes DH-Modell hat
 
  Konvertierungsmethoden::
   char in String umwandeln
   sym in symbolische Parameter umwandeln
   in Grad umwandeln Gelenkwinkel in Grad
   umrechnen Winkelmaß umwandeln Gelenkwinkel in Bogenmaß

Aus den von der SerialLink- Klasse bereitgestellten Methoden wissen wir, dass sie zur Beschreibung der Verbindungsstruktur des Roboters verwendet werden kann: Die SerialLink- Klasse beschreibt die Verbindungsstruktur des Roboters, einschließlich der Länge, Richtung und Drehachse jeder Verbindung. Mit diesen Informationen können wir das kinematische Modell des Roboters berechnen, um die Bewegung des Roboters zu steuern und zu planen. 

Verbindungsparameter anzeigen: MyBot.display()

MyBot = 
 
Six Axis Robot:: 6 axis, RRRRRR, modDH, slowRNE                  
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|          0|          0|
|  2|         q2|      0.162|          0|    -1.5708|          0|
|  3|         q3|     -0.151|       0.42|          0|          0|
|  4|         q4|      0.135|      0.375|          0|          0|
|  5|         q5|      0.135|          0|    -1.5708|          0|
|  6|         q6|      0.111|          0|     1.5708|          0|
+---+-----------+-----------+-----------+-----------+-----------+

 Bedienen Sie den Roboterarm: MyBot.teach()

 Dadurch wird ein sechsachsiger Roboterarm erzeugt, und dann können wir den Roboterarm des Roboters durch Betätigung verschiedener Gelenke bedienen, wie unten gezeigt:

Wenn wir links q1~q6 bedienen , sehen wir die Bewegung des Roboterarms und die Änderungen der XYZ-Achse und des RPY-Euler-Winkels.

4. Kinesiologie

4.1. Vorwärtskinematik

Die Kinematik ist in Vorwärtslösungen und Umkehrlösungen unterteilt. Vorwärtskinematik : Wenn Sie die Stellung jedes Gelenks, die Länge der Pleuelstange und andere Parameter kennen, können Sie die Stellung des Endeffektors ermitteln.
Werfen wir einen Blick auf die richtige Antwort

MyBot.fkine([pi/2 -pi/4 pi/2 pi/3 -pi/2 pi/6])
/*
ans = 
   -0.8660    0.5000         0    -0.146
   -0.4830   -0.8365    0.2588    0.4605
    0.1294    0.2241    0.9659     0.174
         0         0         0         1
*/

Es entsteht eine homogene Transformationsmatrix, die dem Ende des Gelenkwinkels entspricht.

4.2. Inverse Kinematik

Die inverse Kinematik ist das Gegenteil der Vorwärtskinematik. Basierend auf der Haltung des Endeffektors des Roboters werden die Haltung und andere Bewegungsparameter jedes Gelenks des Roboters berechnet. Dies ist etwas komplizierter, da die Lösung möglicherweise eine unsichere und eindeutige Lösung ist, was zu mehreren Lösungsproblemen führen kann. Natürlich ist es möglicherweise nicht möglich, eine analytische Lösung zu erhalten.

Iterative Methode:

%起始状态
init = [0.795 0.257 -0.135 0 0 -pi/2]
%目标状态
targ = [0 0.836 -0.135 0 -pi/3 -pi/2]
T0=MyBot.fkine(init)
/*
T0 = 
    0.0852    0.6951   -0.7139    0.3501
    0.0869    0.7086    0.7003    0.7239
    0.9926   -0.1217         0   -0.2864
         0         0         0         1
*/
TF=MyBot.fkine(targ)
/*
TF = 
    0.6450    0.3821   -0.6618    0.4076
         0    0.8660    0.5000    0.2015
    0.7642   -0.3225    0.5586   -0.5947
         0         0         0         1
*/
%每次迭代的末端执行器相对于首端的齐次变换矩阵
step =50
%ctraj是Matlab中机器人轨迹(trajectory)规划的函数
TC=ctraj(T0,TF,step)
%比如迭代到第50次
/*
TC(50) = 
    0.6450    0.3821   -0.6618    0.4076
         0    0.8660    0.5000    0.2015
    0.7642   -0.3225    0.5586   -0.5947
         0         0         0         1
*/
qq = MyBot.ikine(TC,'mask',[1 1 1 0 0 0])

Zurückgegeben wird ein 50*6-Array mit doppelter Genauigkeit und einer Länge von 50: Länge(qq)

    0,7951 0,1852 0,0167 -0,0314 0,0432 0 0,7946 0,1853 0,0174 -0,0303 0,0422 0     0,7931 0,1856 0,0196 -0,0267 0,0394 0
    ...... -0,1278    0,6 478 0,4212 0,2245 -0,2429 0 -0,1317 0,6494 0,4203 0,2230 -0,2419    0 -0,1330 0,6500    0,4201 0,2226 -0,2416 0 




Als nächstes verwenden wir ctraj, um die Flugbahn zu planen, verwenden die Ikine-Funktion, um die inverse Lösung durchzuführen, und bewegen uns entlang der Flugbahn. 

5. Lineare Flugbahnplanung

Hier verwenden wir Standard-DH-Parameter, um zu testen, wie ein Roboterarm mit drei Freiheitsgraden die Bewegungsplanung durchführt. Lassen Sie uns gemeinsam mehr darüber lernen:

%这里是第一次开启MATLAB时,运行这个函数,启动rvc:startup_rvc
%参数:关节角、偏置距离、连杆长度、连杆扭角、sigma为0表示旋转关节
L1 = Link([0 84.72 41.04 pi/2 0]);
L2 = Link([0 0 200 0 0]);
L3 = Link([0 0 214.8 0 0]);
 
% 可以限制旋转角度范围
L1.qlim = [deg2rad(-170) deg2rad(170)];
L2.qlim = [deg2rad(-60) deg2rad(85)];
L3.qlim = [deg2rad(-90) deg2rad(10)];

Bot2 = SerialLink([L1 L2 L3], 'name', '机械臂运动学');
%手动操作关节进行旋转
Bot2.teach()

%起点
T1 = transl(100,-10,50);
%终点
T2 = transl(300,-30,200);
%规划轨迹(trajectory)
T = ctraj(T1,T2,50);
Tj = transl(T);
%输出末端轨迹
plot3(Tj(:,1),Tj(:,2),Tj(:,3));
%当反解的机械臂自由度少于6时,要用mask掩码减少自由度,否则无法直接调用ikine作为运动学反解函数
q = Bot2.ikine(T,'mask',[1 1 1 0 0 0]);
Bot2.plot(q);

 Auf diese Weise sehen Sie, dass die Bewegung automatisch entlang der geplanten Geraden ausgeführt wird. Der Einfachheit halber sieht ein Screenshot wie folgt aus (das Wesentliche ist die Bewegung):

6. Kreisförmige Flugbahnplanung

N = (0:0.5:100)'; 
center = [200 -150 -50];
radius = 60;
theta = (N/N(end))*2*pi;
points = (center + radius*[cos(theta) sin(theta) zeros(size(theta))])';  
plot3(points(1,:),points(2,:),points(3,:),'r');

%沿着圆的轨迹平移
T = transl(points');
q2 = Bot2.ikine(T,'mask',[1 1 1 0 0 0]);
Bot2.plot(q2);

Auf diese Weise sehen Sie, dass die Bewegung automatisch entlang des geplanten Kreises ausgeführt wird. Der Einfachheit halber sieht ein Screenshot wie folgt aus (das Wesentliche ist die Bewegung):

 

7. Allgemeiner Gebrauch

Einige andere häufige Verwendungen sind wie folgt:
Anzahl der Gelenke: MyBot.n
zeichnet den Roboterarm: MyBot.plot([0 0 0 0 0 0])
Roboterstrukturtyp: Mybot.config
Gelenkbereich: MyBot.qlim
Link-Vektor ( Mehr intuitiv): MyBot.links
Schwerkraftrichtung ([gx gy gz]): Dynamische Eigenschaften des MyBot.gravity- Links: MyBot.dyn ist ein rotierendes Gelenk: MyBot.isrevolute ist ein bewegliches Gelenk: MyBot.isprismatic ist ein Kugelgelenk: MyBot .issphärische Gelenke und Pleuel haben symbolische Parameter: MyBot.issym kann dynamische Parameter bearbeiten: MyBot.edit





 

8. Zusammenfassung

Der Artikel stellt hauptsächlich die Roboter-Toolbox rvctools und ihre Verwendung vor, versteht die relevanten Kenntnisse der Kinematik und verfügt über ein intuitives Verständnis der Koordinatentransformation, der Trajektorienplanung usw. Schließlich wird bei der Bewegungsplanung manchmal Folgendes angezeigt: Fehler:
Warnung: fehlgeschlagen Um zu konvergieren: Versuchen Sie es mit einem anderen Anfangswert der Gelenkkoordinaten. 
In
diesem Fall kann das Gelenk diese Koordinate nicht erreichen , daher müssen die Koordinaten auf einen angemessenen Wert geändert werden.
Wenn Sie den Code sorgfältig beobachten, werden außerdem einige Matrizen mit einfachen Anführungszeichen ' angezeigt , was Transposition bedeutet . Beispiel: Die Form von
Größe (N) ist 1 x 201 und die Form von Größe (N') ist 201 x 1.
Die Anzahl der Elemente ist numel. (N) Ergebnis: 201, Dimension ndims (N) Ergebnis: 2 

Guess you like

Origin blog.csdn.net/weixin_41896770/article/details/134652957