| Operatoren |
create_pose — Erzeugen einer 3D-Lage (Pose).
create_pose( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)
create_pose erzeugt eine 3D-Lage Pose. Eine 3D-Lage beschreibt eine starre 3D-Transformation, d.h. eine Transformation bestehend aus einer beliebigen Translation und Rotation, mit 6 Parametern: TransX, TransY und TransZ beschreiben die Translation entlang der x-, y- und z-Achse, während RotX, RotY und RotZ die Rotation beschreiben.
3D-Lagen werden typischerweise für zwei Zwecke verwendet: Erstens zur Beschreibung der Position und Orientierung eines Koordinatensystems relativ zu einem anderen (z.B. die 3D-Lage eines Objektkoordinatensystems relativ zum Kamerakoordinatensystem - kurz, die 3D-Lage des Objekts relativ zur Kamera) und zweitens zur Beschreibung der Transformation von Koordinaten zwischen Koordinatensystemen (z.B. die Transformation von Objektkoordinaten in Kamerakoordinaten).
Eine 3D-Rotation um eine beliebige Achse kann mit drei Parametern in verschiedener Weise dargestellt werden. HALCON stellt drei davon über den Parameter OrderOfRotation zur Auswahl: Falls der Wert 'gba' übergeben wird, wird die Rotation durch die folgende Kette von Rotationen beschrieben (siehe hom_mat3d_rotate für den Inhalt der Rotationsmatrizen ):
Von rechts nach links gelesen, entspricht der folgenden Sequenz von Operatoraufrufen:
hom_mat3d_identity (HomMat3DIdent) hom_mat3d_rotate (HomMat3DIdent, RotZ, 'z', 0, 0, 0, HomMat3DRotZ) hom_mat3d_rotate (HomMat3DRotZ, RotY, 'y', 0, 0, 0, HomMat3DRotYZ) hom_mat3d_rotate (HomMat3DRotYZ, RotX, 'x', 0, 0, 0, HomMat3DXYZ)
Dagegen entspricht die folgende Sequenz der Leserichtung von links nach rechts:
hom_mat3d_identity (HomMat3DIdent) hom_mat3d_rotate_local (HomMat3DIdent, RotX, 'x', HomMat3DRotX) hom_mat3d_rotate_local (HomMat3DRotX, RotY, 'y', HomMat3DRotXY) hom_mat3d_rotate_local (HomMat3DRotXY, RotZ, 'z', HomMat3DXYZ)
wird in der Fachliteratur auch Roll-Pitch-Yaw Konvention genannt.
Falls in OrderOfRotation der Wert 'abg' übergeben wird, wird die Rotation durch die folgende Transformationskette dargestellt:
Falls der Wert 'rodriguez' in OrderOfRotation übergeben wird, werden die Rotationsparameter RotX, RotY und RotZ als die x-, y- und z-Komponente des so genannten Rodriguez-Rotationsvektors interpretiert. Die Richtung dieses Vektors definiert die (beliebige) Rotationsachse, seine Länge den Rotationswinkel (mathematisch positive Orientierung). HALCON verwendet eine Variation des Rodriguez-Vektors, in der die Länge des Vektors gleich dem Tangens des halben Winkels ist:
Bitte beachten Sie, dass diese Posen-Darstellung nicht immer eindeutig ist, d.h. mehrere Posen-Darstellungen beschreiben dieselbe homogene Transformationsmatrix. Beispielsweise für mit haben die folgenden zwei Posen die gleiche Darstellung als homogene Transformationsmatrix:
create_pose(0, 0, 0, 30 , 90, 54, 'Rp+T', 'gba', 'point', Pose1) create_pose(0, 0, 0, 17, 90, 67, 'Rp+T', 'gba', 'point', Pose2)
Alternativ können Rotationen auch durch homogene Transformationsmatrizen oder Quaternionen (axis_angle_to_quat) dargestellt werden.
Mit dem Operator pose_to_hom_mat3d erhält man die der 3D-Lage entsprechende homogene Transformationsmatrix. Gemäß der Standard-Definition ist dies die folgende Transformationsmatrix, welche in zwei separate Matrizen aufgespaltet werden kann, eine für die Translation (H(t)) und eine für die Rotation (H(R)):
Die folgende Gleichung zeigt, wie ein Punkt mit Hilfe einer 3D-Lage (bzw. der entsprechenden homogenen Transformationsmatrix ) von Koordinatensystem 1 in Koordinatensystem 2 transformiert werden kann (Ein- und Ausgabepunkte als homogene Vektoren dargestellt, vgl. affine_trans_point_3d). Beachten Sie, dass zur Transformation von Koordinatensystem 1 in System 2 die homogene Transformationsmatrix verwendet wird, die die 3D-Lage von System 1 relativ zu System 2 beschreibt:
Die Gleichung entspricht der folgenden Sequenz von Operatoraufrufen:
pose_to_hom_mat3d(PoseOf1In2, HomMat3DFrom1In2) affine_trans_point_3d(HomMat3DFrom1In2, P1X, P1Y, P1Z, P2X, P2Y, P2Z)
Bisher wurde die Standard-Definition von 3D-Lagen beschrieben. Um diese zu erzeugen, übergibt man in den Parametern OrderOfTransform und ViewOfTransform die (Standard-)Werte 'Rp+T' bzw. 'point'. Für andere Werte werden nicht dem Standard entsprechende Typen von 3D-Lagen erzeugt, die kurz im Folgenden beschrieben werden. Bitte beachten Sie, dass diese Darstellungstypen nur zur Abwärtskompatibiltät unterstützt werden; wir empfehlen nachdrücklich, die Standard-Typen zu verwenden.
Wenn 'R(p-T)' in OrderOfTransform übergeben wird, entspricht die erzeugte 3D-Lage der folgenden Transformationskette, d.h. die Reihenfolge von Translation und Rotation ist vertauscht und die Translation ist negiert:
Wenn in 'coordinate_system' in ViewOfTransform übergeben wird, bleibt die Reihenfolge der Transformationen gleich, aber die Rotationswinkel werden negiert. Bitte beachten Sie, dass dies nicht der Transformation eines Koordinatensystems entspricht, auch wenn der Parameterwert dies suggeriert!
Die erzeugte 3D-Lage wird in Pose zurückgeliefert, in Form eines Tupels mit sieben Elementen. Die ersten drei Elemente enthalten die Translationsparameter TransX, TransY und TransZ, gefolgt von den Rotationsparametern RotX, RotY und RotZ. Das letzte Element kodiert den Darstellungstyp der 3D-Lage, der mit den Parametern OrderOfTransform, OrderOfRotation und ViewOfTransform gewählt wurde. Die folgende Tabelle listet die möglichen Kombinationen. Wie schon erwähnt empfehlen wir, nur die Typen mit OrderOfTransform = 'Rp+T' und ViewOfTransform = 'point' zu verwenden (Codes 0, 2, and 4).
| OrderOfTransform | OrderOfRotation | ViewOfTransform | Code |
|---|---|---|---|
| 'Rp+T' | 'gba' | 'point' | 0 |
| 'Rp+T' | 'abg' | 'point' | 2 |
| 'Rp+T' | 'rodriguez' | 'point' | 4 |
| 'Rp+T' | 'gba' | 'coordinate_system' | 1 |
| 'Rp+T' | 'abg' | 'coordinate_system' | 3 |
| 'Rp+T' | 'rodriguez' | 'coordinate_system' | 5 |
| 'R(p-T)' | 'gba' | 'point' | 8 |
| 'R(p-T)' | 'abg' | 'point' | 10 |
| 'R(p-T)' | 'rodriguez' | 'point' | 12 |
| 'R(p-T)' | 'gba' | 'coordinate_system' | 9 |
| 'R(p-T)' | 'abg' | 'coordinate_system' | 11 |
| 'R(p-T)' | 'rodriguez' | 'coordinate_system' | 13 |
3D-Lagen können mit convert_pose_type in andere Darstellungstypen konvertiert werden; mit get_pose_type kann der Darstellungstyp einer 3D-Lage abgefragt werden.
Translation in Richtung der x-Achse (in [m]).
Defaultwert: 0.1
Wertevorschläge: -1.0, -0.75, -0.5, -0.25, -0.2, -0.1, -0.5, -0.25, -0.125, -0.01, 0.0, 0.01, 0.125, 0.25, 0.5, 0.1, 0.2, 0.25, 0.5, 0.75, 1.0
Translation in Richtung der y-Achse (in [m]).
Defaultwert: 0.1
Wertevorschläge: -1.0, -0.75, -0.5, -0.25, -0.2, -0.1, -0.5, -0.25, -0.125, -0.01, 0.0, 0.01, 0.125, 0.25, 0.5, 0.1, 0.2, 0.25, 0.5, 0.75, 1.0
Translation in Richtung der z-Achse (in [m]).
Defaultwert: 0.1
Wertevorschläge: -1.0, -0.75, -0.5, -0.25, -0.2, -0.1, -0.5, -0.25, -0.125, -0.01, 0.0, 0.01, 0.125, 0.25, 0.5, 0.1, 0.2, 0.25, 0.5, 0.75, 1.0
Rotation um x-Achse bzw. x-Komponente des Rodriguez-Vektors (in [°] bzw. ohne Einheit).
Defaultwert: 90.0
Wertevorschläge: 0.0, 90.0, 180.0, 270.0
Typischer Wertebereich: 0 ≤ RotX ≤ 360
Rotation um y-Achse bzw. y-Komponente des Rodriguez-Vektors (in [°] bzw. ohne Einheit).
Defaultwert: 90.0
Wertevorschläge: 0.0, 90.0, 180.0, 270.0
Typischer Wertebereich: 0 ≤ RotY ≤ 360
Rotation um z-Achse bzw. z-Komponente des Rodriguez-Vektors (in [°] bzw. ohne Einheit).
Defaultwert: 90.0
Wertevorschläge: 0.0, 90.0, 180.0, 270.0
Typischer Wertebereich: 0 ≤ RotZ ≤ 360
Reihenfolge von Rotation und Translation.
Defaultwert: 'Rp+T'
Wertevorschläge: 'Rp+T', 'R(p-T)'
Bedeutung der Rotationswerte.
Defaultwert: 'gba'
Wertevorschläge: 'gba', 'abg', 'rodriguez'
Sichtweise der Transformation.
Defaultwert: 'point'
Wertevorschläge: 'point', 'coordinate_system'
* Create a pose. create_pose (0.1, 0.2, 0.3, 40, 50, 60, 'Rp+T', 'gba', 'point', Pose)
Sind die Parameterwerte korrekt, dann liefert create_pose den Wert 2 (H_MSG_TRUE).
pose_to_hom_mat3d, write_pose, camera_calibration, hand_eye_calibration
hom_mat3d_rotate, hom_mat3d_translate, convert_pose_type, get_pose_type, hom_mat3d_to_pose, pose_to_hom_mat3d, write_pose, read_pose
Foundation
| Operatoren |