Im Jahr 2009 war ich begeistert davon, meinen eigenen Industrieroboter zu bauen, der etwas Nützliches bewirken kann (nämlich kleine Teile auf einem Förderband sortieren). Ich muss sofort sagen, dass ich einen Roboter gebaut habe (das Ergebnis sehen Sie auf dem Titelfoto) und gleichzeitig als Nebenprodukt einen kurzen Artikel über die Kinematik von Delta-Robotern im TrossenRobotics-Forum geschrieben habe - einem amerikanischen Verkäufer von Roboterteilen. Zu dieser Zeit veranstalteten sie gerade einen Wettbewerb für Autoren. Natürlich habe ich den Wettbewerb nicht gewonnen, aber der Artikel in englischer Sprache blieb. Ich habe mehrmals versucht, es in meine Muttersprache zu übersetzen, aber ich habe es geschafft, das zu vervollständigen, was ich erst jetzt begonnen habe.Wenn Sie Ihr Modell eines Delta-Roboters erstellen oder einfach nur herausfinden möchten, wie Sie kinematische Formeln für diesen Robotertyp ableiten können (ohne über den Lehrplan in Algebra und Geometrie hinauszugehen), sind Sie bei cat willkommen. Für diejenigen, die Theorie nicht wirklich mögen, finden Sie am Ende des Artikels Beispiele für vorgefertigten Code in C.Was ist ein Delta-Roboter?
Der Schweizer Wissenschaftler Raymond Clavel hat den Delta-Roboter ( Wiki ) in den frühen 1980er Jahren erfunden. Das Folgende ist eine Illustration aus dem ursprünglichen US4976582-Patent für „Ein Gerät zum Bewegen und Positionieren eines Elements im Raum“:Der Roboter besteht aus zwei Plattformen: einer festen oberen Basis (1) und einer kleinen beweglichen Plattform (8), die durch drei Hebel verbunden sind. Jeder Hebel besteht aus zwei Teilen: Die obere Schulter (4) ist fest mit dem Motor (3) verbunden, der sich an der oberen Basis befindet, und der untere ist ein Parallelogramm (5), in dessen Ecken das sogenannte Universalgelenke (6, 7) ( Wiki), mit denen sich Winkel ändern können. Jedes Parallelogramm ist durch ein Scharnier (16) mit dem Oberarm verbunden, so dass seine Oberseite immer senkrecht zu seinem Arm und parallel zur Ebene der oberen Basis bleibt. Dank dessen ist die bewegliche Plattform des Roboters, die an den unteren Seiten der Parallelogramme angebracht ist, auch immer parallel zur oberen Basis. Wir können die Position der Plattform steuern, indem wir den Drehwinkel der oberen Hebel relativ zur Basis des Roboters mithilfe von Motoren ändern.In der Mitte der unteren Plattform (8) befindet sich die sogenannte der Arbeitskörper (auf Englisch wird der Begriff Endeffektor verwendet) des Roboters (9). Dies kann ein Manipulator, eine Greifvorrichtung oder beispielsweise ein Extruder im Fall eines 3D-Druckers sein. Zusätzlich kann ein anderer Motor (11) verwendet werden, der eine Drehung des Arbeitskörpers durch die Stange (14) bereitstellt.Der Hauptvorteil von Delta-Robotern ist die Geschwindigkeit: Schwere Motoren stehen auf einer festen Basis, nur die Hebel und die untere Plattform bewegen sich, was sie versuchen, aus leichten Verbundwerkstoffen herzustellen, wodurch ihre Trägheit verringert wird. Hier zum Beispiel ein Artikel über Geektimes mit ein paar sehr effektiven Videos.Aufgabenstellung
Um Ihren eigenen Delta-Roboter zu bauen, müssen Sie lernen, wie Sie zwei Probleme lösen. In der ersten Situation kennen wir die Position, in die wir den Roboterarm unseres Roboters bewegen möchten (zum Beispiel möchten wir einen Cookie auf dem Förderband an einem Punkt mit Koordinaten (x, y, z) greifen. Dazu müssen wir die Winkel bestimmen, in denen wir uns befinden Sie müssen die mit den Hebeln des Roboters verbundenen Motoren drehen, um ihn in die richtige Position zum Greifen zu bringen. Das Verfahren zum Bestimmen dieser Winkel wird als inverses kinematisches Problem bezeichnet (in einigen russischsprachigen Quellen wird das Wort „invers“ verwendet).In der zweiten Situation kennen wir die Winkel, in denen die Steuermotoren des Roboters eingeschaltet sind (wenn wir Servomotoren verwenden, können wir die Ecken leicht finden, indem wir die Messwerte von den Winkelsensoren ablesen), und wir möchten die Position der Roboterplattform im Raum ermitteln (zum Beispiel, um ihre Position anzupassen). . Dies ist eine direkte kinematische Aufgabe.Wir formalisieren beide Aufgaben. Sowohl die feste Basis des Roboters als auch seine bewegliche Plattform können als gleichseitige Dreiecke dargestellt werden: In der folgenden Abbildung sind sie grün bzw. pink lackiert. Die Drehwinkel der Roboterarme relativ zur Basisebene (sie sind auch die Drehwinkel der Motoren) werden als Ѳ 1 , Ѳ 2 und Ѳ 3 bezeichnet , und die Koordinaten des Punktes sind E 0befindet sich in der Mitte der beweglichen Plattform und in der der Roboterarm unseres Roboters im realen Leben fixiert wird - wie (x 0 , y 0 , z 0 ) .Es stellt sich heraus, dass wir uns zwei Funktionen einfallen lassen müssen:- f invers (x 0 , y 0 , z 0 ) → (Ѳ 1 , Ѳ 2 , Ѳ 3 ) , um das inverse kinematische Problem zu lösen und
- f vorwärts (Ѳ 1 , Ѳ 2 , Ѳ 3 ) → (x 0 , y 0 , z 0 ) , um das direkte kinematische Problem zu lösen.
Inverse Kinematik
Lassen Sie uns einige Schlüsselparameter einstellen, die durch die geometrischen Abmessungen unseres Roboters bestimmt werden:Bezeichne obere Basisseitenlänge f , die untere Seite der Plattform e , obere Hebelarmlänge R f und die unteren Armlänge (die lange Seite des Parallelogramms) r e . Für Berechnungen wählen wir ein Koordinatensystem mit einem Referenzpunkt, der mit dem geometrischen Zentrum des oberen Dreiecks übereinstimmt. Die Z- Achse wird nach oben gerichtet, sodass die Z-Koordinate der sich bewegenden Plattform immer negativ ist.Die Konstruktion des Roboters impliziert, dass sich der Hebel F 1 J 1 (siehe Abbildung unten) nur in der YZ- Ebene drehen kann , während ein Kreis mit dem Radius r f beschrieben wird , der an einem Punkt zentriert istF 1 (an dieser Stelle ist es am Motor befestigt). Im Gegensatz zu F 1 verwenden die Knoten J 1 und E 1 Universalgelenke, wodurch sich die Schulter E 1 J 1 relativ zu E 1 frei drehen kann , was eine Kugel mit dem Radius r e beschreibt, die am Punkt E 1 zentriert ist .Der Schnittpunkt dieser Kugel und der YZ- Ebene ist ein Kreis, der am Punkt E ' 1 des Radius E' 1 J 1 zentriert ist , wobei sich der Punkt E ' 1 als Projektion des Punktes E 1 auf die YZ- Ebene befindet . Dann liegt der Punkt J 1 am Schnittpunkt zweier Kreise mit Mittelpunkten an den Punkten E ' 1 und F 1 , und wir können die Radien dieser Kreise bestimmen. Es gibt eine leichte Subtilität: Die Kreise schneiden sich an zwei Punkten, aber wir interessieren uns nur für einen von ihnen - mit einem kleineren Wert der y- Koordinate, weil wir wollen, dass die Arme des Roboters immer „Ellbogen“ herausragen. Nachdem wir so die Koordinaten des Punktes J 1 bestimmt haben , können wir leicht den Winkel 1 finden, der für uns von Interesse ist .Zur Erleichterung der Wahrnehmung ist die Projektion unseres dreidimensionalen Bildes auf die YZ- Ebene unten dargestellt :Die untere Plattform ist ein gleichseitiges Dreieck, dessen Mittelpunkt der Punkt E 0 (x 0 , y 0 , z 0 ) ist . Mittlere EntfernungDies gibt uns die folgenden Koordinaten des Punktes E 1 und seiner Projektion E ' 1 auf die Ebene YZ :Der Abstand E 1 E ' 1 = x 0 , dann nach dem Satz von Pythagoras,Da die obere Plattform auch ein gleichseitiges Dreieck ist, werden die Koordinaten an dem Punkt F 1 wirdUm die Koordinaten des Punktes J 1 zu finden , der der Schnittpunkt zweier Kreise ist, muss das Gleichungssystem gelöst werden:Wir kennen die Koordinaten der Kreismittelpunkte. Wenn wir sie ersetzen, erhalten wir den folgenden Ausdruck:Wenn wir die Klammern öffnen und eine Gleichung von der anderen subtrahieren, können wir die z-Koordinate des Punktes J 1 linear als y-Koordinate ausdrücken. Danach erhalten wir durch Einsetzen in die zweite Gleichung die übliche quadratische Gleichung für y, aus der zwei Lösungen die kleinste auswählen (mehr dazu wir haben oben gesprochen). Wenn wir also die Koordinaten des Punktes J 1 erhalten , finden wir den WinkelAlle Ausdrücke erwiesen sich aufgrund der erfolgreichen Wahl des Koordinatensystems als recht einfach: Der Hebelarm F 1 J 1 bewegt sich immer in der YZ- Ebene , sodass wir die x- Koordinate einfach ignorieren können . Um diesen Vorteil beim Finden der beiden verbleibenden Winkel Ѳ 2 und Ѳ 3 zu erhalten , verwenden wir die Symmetrie der Konstruktion des Delta-Roboters. Drehen Sie zuerst unser Koordinatensystem in der XY- Ebene um 120 ° gegen den Uhrzeigersinn um die Z- Achse :Wir haben ein neues Koordinatensystem X'Y'Z ' und in diesem neuen System können wir unsere vorgefertigten Formeln verwenden, um den Winkel Ѳ 2 zu finden . Die einzige Subtilität besteht darin, dass wir zuerst die Koordinaten des Punktes E 0 im neuen Referenzrahmen neu berechnen müssen . Dies geschieht einfach mit der bekannten Formel (Transformationen, wenn sich das System um den Ursprung dreht), die in der obigen Abbildung dargestellt ist. Um den Winkel Ѳ 3Es ist auch erforderlich, den ursprünglichen Referenzrahmen zu drehen, jetzt jedoch im Uhrzeigersinn. Diese Technik wird sehr bequem in Form eines Programms implementiert: Es reicht aus, eine Funktion zur Berechnung des Winkels Ѳ in der YZ-Ebene zu schreiben und sie dann für jedes der Winkel- und Referenzsysteme dreimal aufzurufen.Direkte Kinematik
Versuchen wir, das inverse Problem zu lösen: Jetzt kennen wir die Winkel Ѳ 1 , Ѳ 2 und Ѳ 3 und wollen die Koordinaten (x 0 , y 0 , z 0 ) des Punktes E 0 finden, der sich in der Mitte der beweglichen Plattform unseres Roboters befindet. Wenn wir die Winkel kennen, können wir leicht die Koordinaten der Punkte J 1 , J 2 und J 3 finden (siehe die folgende Abbildung). Hebelschultern J 1 E 1 , J 2 E 2 und J 3 E.3 kann sich frei drehen können über die Punkte J 1 , J 2 und J 3 jeweils einen Raumin den drei Kugeln mit Radien bildet , r e .Wir verwenden eine knifflige Technik: Wir verschieben die Zentren jeder dieser Kugeln von den Punkten J 1 , J 2 , J 3 in der XY- Ebene in Richtung der Z- Achse unter Verwendung der Verschiebungsvektoren E 1 E 0 , E 2 E 0 bzw. E 3 E 0 (in der Abbildung sind sie) als rote Pfeile dargestellt). Nach dieser Transformation stellt sich heraus, dass sich alle drei Kugeln am Punkt E 0 schneiden , wie in der folgenden Abbildung gezeigt:Es stellt sich heraus, dass wir zur Bestimmung der Koordinaten (x 0 , y 0 , z 0 ) des Punktes E 0 den Schnittpunkt von drei Kugeln finden müssen, deren Radien und Koordinaten der Zentren uns bekannt sind. Mit anderen Worten, wir müssen ein System von drei Gleichungen lösen, die dreidimensionale Kugeln beschreiben:wobei (x i , y i , z i ) die Koordinaten der Zentren der Kugeln J ' 1 , J' 2 und J ' 3 sind , die wie folgt gefunden werden können:Um die Notation zu verkürzen, verwende ich unten die Notation (x 1 , y 1 , z 1 ) , (x 2 , y 2 , z 2 ) und (x 3 , y als Koordinaten der Punkte J ' 1 , J' 2 und J ' 3 3 , z 3 ) . Ich möchte auch beachten, dass x 1 = 0 ist (da der Punkt J ' 1 in der YZ- Ebene liegt ). Wir erhalten das folgende Gleichungssystem:Wir führen die Notation einund wenn wir die zweite und dritte von der oberen Gleichung sowie die dritte von der zweiten subtrahieren, erhalten wir:Subtrahiert man die zweite von der ersten Gleichung (wodurch y reduziert wird ) und die dritte von der zweiten Gleichung ( reduziert x ), so kann man x und y in Form von z ausdrücken :Wenn wir nun x und y , ausgedrückt durch z , in der Gleichung für den ersten Kreis (zentriert am Punkt J ' 1 ) einsetzen, erhalten wir:Es bleibt, diese quadratische Gleichung (auf die übliche Weise durch die Diskriminante) zu lösen, um z zu finden (wir erinnern uns, dass wir das kleinste der beiden z wählen müssen !) Und durch sie x und y .Beispiele für Quellcode
Die folgende sind Beispiele von Funktionen zur Berechnung der Kinematik des Delta - Roboters in C. Die Variablennamen entsprechen die in dem Artikel verwendet wird , der Winkel theta1
, theta2
und theta3
sind in Grad angegeben.
const float e = 115.0;
const float f = 457.3;
const float re = 232.0;
const float rf = 112.0;
const float sqrt3 = sqrt(3.0);
const float pi = 3.141592653;
const float sin120 = sqrt3/2.0;
const float cos120 = -0.5;
const float tan60 = sqrt3;
const float sin30 = 0.5;
const float tan30 = 1/sqrt3;
int delta_calcForward(float theta1, float theta2, float theta3, float &x0, float &y0, float &z0) {
float t = (f-e)*tan30/2;
float dtr = pi/(float)180.0;
theta1 *= dtr;
theta2 *= dtr;
theta3 *= dtr;
float y1 = -(t + rf*cos(theta1));
float z1 = -rf*sin(theta1);
float y2 = (t + rf*cos(theta2))*sin30;
float x2 = y2*tan60;
float z2 = -rf*sin(theta2);
float y3 = (t + rf*cos(theta3))*sin30;
float x3 = -y3*tan60;
float z3 = -rf*sin(theta3);
float dnm = (y2-y1)*x3-(y3-y1)*x2;
float w1 = y1*y1 + z1*z1;
float w2 = x2*x2 + y2*y2 + z2*z2;
float w3 = x3*x3 + y3*y3 + z3*z3;
float a1 = (z2-z1)*(y3-y1)-(z3-z1)*(y2-y1);
float b1 = -((w2-w1)*(y3-y1)-(w3-w1)*(y2-y1))/2.0;
float a2 = -(z2-z1)*x3+(z3-z1)*x2;
float b2 = ((w2-w1)*x3 - (w3-w1)*x2)/2.0;
float a = a1*a1 + a2*a2 + dnm*dnm;
float b = 2*(a1*b1 + a2*(b2-y1*dnm) - z1*dnm*dnm);
float c = (b2-y1*dnm)*(b2-y1*dnm) + b1*b1 + dnm*dnm*(z1*z1 - re*re);
float d = b*b - (float)4.0*a*c;
if (d < 0) return -1;
z0 = -(float)0.5*(b+sqrt(d))/a;
x0 = (a1*z0 + b1)/dnm;
y0 = (a2*z0 + b2)/dnm;
return 0;
}
int delta_calcAngleYZ(float x0, float y0, float z0, float &theta) {
float y1 = -0.5 * 0.57735 * f;
y0 -= 0.5 * 0.57735 * e;
float a = (x0*x0 + y0*y0 + z0*z0 +rf*rf - re*re - y1*y1)/(2*z0);
float b = (y1-y0)/z0;
float d = -(a+b*y1)*(a+b*y1)+rf*(b*b*rf+rf);
if (d < 0) return -1;
float yj = (y1 - a*b - sqrt(d))/(b*b + 1);
float zj = a + b*yj;
theta = 180.0*atan(-zj/(y1 - yj))/pi + ((yj>y1)?180.0:0.0);
return 0;
}
int delta_calcInverse(float x0, float y0, float z0, float &theta1, float &theta2, float &theta3) {
theta1 = theta2 = theta3 = 0;
int status = delta_calcAngleYZ(x0, y0, z0, theta1);
if (status == 0) status = delta_calcAngleYZ(x0*cos120 + y0*sin120, y0*cos120-x0*sin120, z0, theta2);
if (status == 0) status = delta_calcAngleYZ(x0*cos120 - y0*sin120, y0*cos120+x0*sin120, z0, theta3);
return status;
}
Gebrauchte Literatur
Ich habe alle wichtigen Ideen zur Kinematik des Delta-Roboters aus der Arbeit von prof. Paul Zsombor-Murray " Beschreibende geometrische kinematische Analyse von Clavels" Delta "-Roboter ." Ich gebe ehrlich zu, dass meine mathematische Ausbildung nicht ausreichte, um sie bis zum Ende zu verstehen, daher musste viel von mir selbst abgeleitet werden.Fazit
Vielen Dank an alle, die diesen Artikel bis zum Ende gelesen haben. Ich hoffe, dass es für jemanden nützlich und inspirierend sein wird, eigene Versionen des Delta-Roboters zu erstellen.