Normalenvektor anhand Eulerwinkel
Dieser Artikel beschreibt, wie man anhand von Eulerwinkeln an den Normalenvektor kommt. Dies kann f�r mathematische Operationen sinnvoll sein. Ein Beispiel hierf�r ist, das eine Kamera neben der Translation auch eine Rotation in Eulerwinkeln liefert. Soll das TCP nicht direkt dorthin fahren, sondern zuerst mit einem bestimmten Abstand entlang der Ausrichtung des Zielobjekts.
Die Funktion getSurfaceNormalByEuler liefert eine Map zur�ck, die drei Eintr�ge enth�lt: x, y und z. Diese geben den Normalenvektor der Z-Achse des TCP an, wenn dieser nach den �bergebenen Eulerwinkeln ausgerichtet ist. Auf die entsprechenden Eintr�ge kann mit getX(), getY() und getZ() zugegriffen werden.
var normal = getSurfaceNormalByEuler(rx, ry, rz);
var x = normal.getX();
var y = normal.getY();
vaz z = normal.getZ();
Beispiel
Mit den von der Funktion erhaltenen Werten kann man z.b. das TCP in einem bestimmten Abstand zu einem Zielobjekt in Ausrichtung des Zielobjekts platzieren. Dazu hier ein kleines Beispiel.
In diesem Beispiel wird zuerst mit der hier beschriebenen Funktion getSurfaceNormalByEuler() der Normalenvektor ermittelt. Als Parameter gibt man die z.b. von einer Kamera erhaltene Ausrichtung des Zielobjekts.
Um das TCP mit einem bestimmten Abstand zu dem Zielobjekt in Ausrichtung des Zielobjekts zu platzieren, wird nun ein move-Befehl verwendet. Die Zielausrichtung ist die Ausrichtung des Zielobjekts. Die Zielposition ist die Position des Zielobjekts plus ein bestimmter Abstand. Damit man die L�nge des Abstands bestimmen kann, wird hier der Faktor moveFactor genutzt.
var target = {x: 0.3, y: 0.4, z: 0.5, rx: 20, ry: 30, rz: 60};
var normal = getSurfaceNormalByEuler(target.rx, target.ry, target.rz);
var moveFactor = 0.1;
move({
'Coord': 'CARTESIAN_BASIS',
'MoveType': 'LINEAR',
'PoseRelation': 'ABSOLUTE',
'speed.ratio': 1.0,
'targetpose.rx': target.rx,
'targetpose.ry': target.ry,
'targetpose.rz': target.rz,
'targetpose.x': target.x + moveFactor * normal.getX(),
'targetpose.y': target.y + moveFactor * normal.getY(),
'targetpose.z': target.z + moveFactor * normal.getZ()
}, "Wegpunkt 1");
Normalenvektor anhand der Z-Achse des TCP
Dieser Artikel beschreibt, wie man an den Normalenvektor kommt, der vom TCP aus in Richtung der Z-Achse des TCPs zeigt. Dies kann f�r mathematische Operationen sinnvoll sein oder einfach nur, um an dieser Achse entlang zu verfahren.
Die Funktion getSurfaceNormal() liefert eine Map zur�ck, die drei Eintr�ge enth�lt: x, y und z. Diese geben den Normalenvektor der Z-Achse des TCP an. Auf die entsprechenden Eintr�ge kann mit getX(), getY() und getZ() zugegriffen werden.
var normal = getSurfaceNormal();
var x = normal.getX();
var y = normal.getY();
var z = normal.getZ();
Beispiel
Mit den von der Funktion erhaltenen Werten kann man z.b. im textuellen Programmieren entlang der Z-Achse des TCPs verfahren. Dazu hier ein kleines Beispiel.
In diesem Beispiel wird zuerst mit der hier beschriebenen Funktion getSurfaceNormal() der Normalenvektor ermittelt.
Zudem wird mit der Funktion getCurrentPose() die aktuelle Position des TCPs ermittelt.
Um entlang der Z-Achse zu verfahren wird nun ein move-Befehl verwendet. Dabei soll die Ausrichtung des TCPs nicht ver�ndert werden. Daher �bernehmen wir die 4 Quaternionen aus der aktuellen Position. Die Position des TCPs soll sich aber entlang seiner Z-Achse ver�ndern. Daher addieren wir zu der aktuellen Position die entsprechende Komponente des Normalenvektors. Damit man die L�nge der Bewegung bestimmen kann, wird hier noch der Faktor moveFactor genutzt.
var normal = getSurfaceNormal();
var moveFactor = 0.1;
var pose = getCurrentPose();
move({
'Coord': 'CARTESIAN_BASIS',
'MoveType': 'JOINT',
'PoseRelation': 'ABSOLUTE',
'speed.ratio': 1.0,
'targetpose.q0': pose.q0,
'targetpose.q1': pose.q1,
'targetpose.q2': pose.q2,
'targetpose.q3': pose.q3,
'targetpose.x': pose.x + moveFactor * normal.getX(),
'targetpose.y': pose.y + moveFactor * normal.getY(),
'targetpose.z': pose.z + moveFactor * normal.getZ()
}, "Wegpunkt 1");