Da wird wohl eher selten 0, 90, 180 drin stehen, schon klar.
N bisschen was muss man noch dazu schreiben
Da wird wohl eher selten 0, 90, 180 drin stehen, schon klar.
N bisschen was muss man noch dazu schreiben
Ich versteh das Problem immer noch nicht, glaube ich.
- Der Bediener hat ein Koordinatensystem im Kopp, um das er drehen möchte. Dies ist zwar in der Position richtig, aber nicht in der Orientierung, denn im Kopp des Bedieners ist es global?
- Der Bediener möchte das anpassen, aber eben nicht toolbezogen? Toolbezogen wäre aber nötig, um Greiferfehler auszugleichen. Aber egal, er will das global ausgleichen?
Man rechne also die Korrektur darauf, wo man sie haben möchte. Angenommen, man wolle sie gegen die Vernunft jetzt tatsächlich "global" ausgleichen, dann rechnet man eben in mehreren Schritten und macht Lage und Orientierung unabhängig voneinander und schiebt die Korrektur dazwischen:
{xpos,ypos,zpos,0,0,0}: //Position (ohne Orientierung) im Base
{0,0,0,akorr,bkorr,ckorr}: // globale Winkelkorrektur
{0,0,0,apos,bpos,cpos} //und hier dann die Orientierung des Zielpunktes hinten drauf auf die Korrektur.
Wenn man dann noch jedes Zwischenergebnis in eine eigene Variable sichert und nicht nur, weil es cool ist, in einer Zeile rechnet, dann sieht man step by step, was man da macht und kann sogar probehalber hinfahren.
Oder was?
Alles anzeigenIch versteh das Problem immer noch nicht, glaube ich.
- Der Bediener hat ein Koordinatensystem im Kopp, um das er drehen möchte. Dies ist zwar in der Position richtig, aber nicht in der Orientierung, denn im Kopp des Bedieners ist es global?
- Der Bediener möchte das anpassen, aber eben nicht toolbezogen? Toolbezogen wäre aber nötig, um Greiferfehler auszugleichen. Aber egal, er will das global ausgleichen?
Man rechne also die Korrektur darauf, wo man sie haben möchte. Angenommen, man wolle sie gegen die Vernunft jetzt tatsächlich "global" ausgleichen, dann rechnet man eben in mehreren Schritten und macht Lage und Orientierung unabhängig voneinander und schiebt die Korrektur dazwischen:
{xpos,ypos,zpos,0,0,0}: //Position (ohne Orientierung) im Base
{0,0,0,akorr,bkorr,ckorr}: // globale Winkelkorrektur
{0,0,0,apos,bpos,cpos} //und hier dann die Orientierung des Zielpunktes hinten drauf auf die Korrektur.
Wenn man dann noch jedes Zwischenergebnis in eine eigene Variable sichert und nicht nur, weil es cool ist, in einer Zeile rechnet, dann sieht man step by step, was man da macht und kann sogar probehalber hinfahren.
Oder was?
Hallo Programmiersklave,
ja im Prinzip hast du Recht mit deiner Beschreibung: ich möchte um den TCP drehen aber eben in dem Koordinatensystem der Base. Das ist nämlich das was der Bediener noch halbwegs verstehen kann. Ich kann ihm nicht erklären, dass das TCP mal so und mal so orientiert ist für unterschiedliche Setzpositionen mit verschiedenen Winkelwerten.
Es wurden ja jetzt 2 Vorschläge genannt die ich sobald ich kann mal testen werde letzterer wäre ja dann auch dein Vorschlag (nur nicht so ausführlich), nämlich dass ich Hilfs-Frames bastle.
Stelle ich mir momentan so vor:
Setzpos_x1 = {x Setzpos.X, y Setzpos.Y, z Setzpos.Z, 0, 0, 0} : {0, 0, 0, a Korr.A, b Korr.B, c Korr.C}
Setzpos_x2 = Setzpos_x1 : {0, 0, 0, a Setzpos.A, b Setzpos.B, c Setzpos.C}
LIN Setzpos_x2
Für Setpos_x1 werden die Drehungen auch in der "richtigen" Orientierung ausgeführt weil ich das $Tool so angelegt habe dass es für 0-Winkelorientierung genau zur Base orientiert ist...
Und die beiden geom. Operatoren verstehe ich momentan als zwei "hintereinander" ausgeführte Drehungen und sind nich gleichzusetzen mit einer Addition der Werte oder ?
Also nicht:
Setzpos_x2 = {x Setzpos.X, y Setzpos.Y, z Setzpos.Z, a Setzpos.A+Korr.A, b Setzpos.B+Korr.B, c Setzpos.C+Korr.C}
Oder wie bei den anderen Kommentaren angedeutet (also mittels geom. Op auf der linken Seite oder ansatzweise die Idee mit der Vektorberechnung aber da muss ja noch ein Zwischenschritt passieren. Danke schonmal jedenfalls ich glaube ich komme zum Ziel
Setzpos_x1 = {x Setzpos.X, y Setzpos.Y, z Setzpos.Z, 0, 0, 0} : {0, 0, 0, a Korr.A, b Korr.B, c Korr.C}
Setzpos_x2 = Setzpos_x1 : {0, 0, 0, a Setzpos.A, b Setzpos.B, c Setzpos.C}
LIN Setzpos_x2
Habe ich gar nicht mehr getestet.. (führt evtl. auch zum Ziel)
Um das vorherige Wirr-Warr etwas aufzuklären:
Also was ich wollte ist die Drehung des Tools (TCP) gemäß den Winkeln der aktuellen Base..
Bin jetzt zum Ziel gekommen:
mk_setzpos = setzpos
setzpos = winkelkorrektur:setzpos
setzpos.x = mk_setzpos.x
setzpos.y = mk_setzpos.y
setzpos.z = mk_setzpos.z
der geometrische Operator auf der linken Seite führt zum Ziel!! Denn der dreht das Frame gemäss den Base Koordinatenachsen so wie ich das möchte.. Musste jedoch beachten, dass dabei die Translationen der Setzpositionen entsprechend manipuliert werden. Deshalb hier in Zeile 3-5 nochmal das rücksetzen auf die alten Translationswerte..
Grüsse,
Robin
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können