Name
create_pose T_create_pose CreatePose create_pose CreatePose CreatePose — Erzeugen einer 3D-Lage (Pose).
void CreatePose (const HTuple& TransX , const HTuple& TransY , const HTuple& TransZ , const HTuple& RotX , const HTuple& RotY , const HTuple& RotZ , const HTuple& OrderOfTransform , const HTuple& OrderOfRotation , const HTuple& ViewOfTransform , HTuple* Pose )
void HPose ::HPose (double TransX , double TransY , double TransZ , double RotX , double RotY , double RotZ , const HString& OrderOfTransform , const HString& OrderOfRotation , const HString& ViewOfTransform )
void HPose ::HPose (double TransX , double TransY , double TransZ , double RotX , double RotY , double RotZ , const char* OrderOfTransform , const char* OrderOfRotation , const char* ViewOfTransform )
void HPose ::CreatePose (double TransX , double TransY , double TransZ , double RotX , double RotY , double RotZ , const HString& OrderOfTransform , const HString& OrderOfRotation , const HString& ViewOfTransform )
void HPose ::CreatePose (double TransX , double TransY , double TransZ , double RotX , double RotY , double RotZ , const char* OrderOfTransform , const char* OrderOfRotation , const char* ViewOfTransform )
void HOperatorSetX .CreatePose ( [in] VARIANT TransX , [in] VARIANT TransY , [in] VARIANT TransZ , [in] VARIANT RotX , [in] VARIANT RotY , [in] VARIANT RotZ , [in] VARIANT OrderOfTransform , [in] VARIANT OrderOfRotation , [in] VARIANT ViewOfTransform , [out] VARIANT* Pose )
VARIANT HPoseX .CreatePose ( [in] double TransX , [in] double TransY , [in] double TransZ , [in] double RotX , [in] double RotY , [in] double RotZ , [in] BSTR OrderOfTransform , [in] BSTR OrderOfRotation , [in] BSTR ViewOfTransform )
static void HOperatorSet .CreatePose (HTuple transX , HTuple transY , HTuple transZ , HTuple rotX , HTuple rotY , HTuple rotZ , HTuple orderOfTransform , HTuple orderOfRotation , HTuple viewOfTransform , out HTuple pose )
public HPose (double transX , double transY , double transZ , double rotX , double rotY , double rotZ , string orderOfTransform , string orderOfRotation , string viewOfTransform )
void HPose .CreatePose (double transX , double transY , double transZ , double rotX , double rotY , double rotZ , string orderOfTransform , string orderOfRotation , string viewOfTransform )
create_pose create_pose CreatePose create_pose CreatePose CreatePose erzeugt eine 3D-Lage Pose Pose Pose Pose Pose pose . Eine 3D-Lage
beschreibt eine starre 3D-Transformation, d.h. eine Transformation bestehend
aus einer beliebigen Translation und Rotation, mit 6 Parametern:
TransX TransX TransX TransX TransX transX , TransY TransY TransY TransY TransY transY und TransZ TransZ TransZ TransZ TransZ transZ beschreiben die
Translation entlang der x-, y- und z-Achse, während RotX RotX RotX RotX RotX rotX ,
RotY RotY RotY RotY RotY rotY und RotZ RotZ RotZ RotZ RotZ 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).
Darstellung der Orientierung (Rotation)
Eine 3D-Rotation um eine beliebige Achse kann mit drei Parametern in
verschiedener Weise dargestellt werden. HALCON stellt drei davon über den
Parameter OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation orderOfRotation zur Auswahl: Falls der Wert 'gba' "gba" "gba" "gba" "gba" "gba"
übergeben wird, wird die Rotation durch die folgende Kette von Rotationen
beschrieben (siehe hom_mat3d_rotate hom_mat3d_rotate HomMat3dRotate hom_mat3d_rotate HomMat3dRotate HomMat3dRotate für den Inhalt der
Rotationsmatrizen
):
wird in der
Fachliteratur auch Yaw-Pitch-Roll Konvention genannt.
Bitte beachten Sie, dass diese Kette auf zwei Arten „gelesen“ werden kann:
Wenn man von rechts startet, werden die Rotationen immer relativ zum globalen
(unveränderten oder „alten“) Koordinatensystem ausgeführt. D.h.,
kann wie folgt gelesen
werden: Erst wird um die z-Achse rotiert, dann um die „alte“ y-Achse und
schließlich um die „alte“ x-Achse. Falls die Kette dagegen von links nach
rechts gelesen wird, werden die Rotationen jeweils relativ zum lokalen
(„neuen“) Koordinatensystem ausgeführt. Dann liest sich
wie folgt: Erst wird um
die x-Achse rotiert, dann um die „neue“ y-Achse und schließlich um die
„neu(st)e“ z-Achse.
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 OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation orderOfRotation der Wert 'abg' "abg" "abg" "abg" "abg" "abg" übergeben wird,
wird die Rotation durch die folgende Transformationskette dargestellt:
Falls der Wert 'rodriguez' "rodriguez" "rodriguez" "rodriguez" "rodriguez" "rodriguez" in OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation orderOfRotation übergeben
wird, werden die Rotationsparameter RotX RotX RotX RotX RotX rotX , RotY RotY RotY RotY RotY rotY und
RotZ RotZ RotZ RotZ RotZ 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 axis_angle_to_quat AxisAngleToQuat axis_angle_to_quat AxisAngleToQuat AxisAngleToQuat ) dargestellt werden.
Entsprechende homogene Transformationsmatrix
Mit dem Operator pose_to_hom_mat3d pose_to_hom_mat3d PoseToHomMat3d pose_to_hom_mat3d PoseToHomMat3d PoseToHomMat3d 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)):
Koordinatentransformation
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 affine_trans_point_3d AffineTransPoint3d affine_trans_point_3d AffineTransPoint3d AffineTransPoint3d ). 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)
Nicht dem Standard entsprechende Darstellungen von 3D-Lagen
Bisher wurde die Standard-Definition von 3D-Lagen beschrieben. Um diese zu
erzeugen, übergibt man in den Parametern OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform orderOfTransform und
ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform viewOfTransform die (Standard-)Werte 'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"
bzw. 'point' "point" "point" "point" "point" "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)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" in OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform 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' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" in ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform 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!
Zurückgelieferte Datenstruktur
Die erzeugte 3D-Lage wird in Pose Pose Pose Pose Pose pose zurückgeliefert, in Form eines
Tupels mit sieben Elementen. Die ersten drei Elemente enthalten die
Translationsparameter TransX TransX TransX TransX TransX transX , TransY TransY TransY TransY TransY transY und TransZ TransZ TransZ TransZ TransZ transZ ,
gefolgt von den Rotationsparametern RotX RotX RotX RotX RotX rotX , RotY RotY RotY RotY RotY rotY und
RotZ RotZ RotZ RotZ RotZ rotZ . Das letzte Element kodiert den Darstellungstyp der 3D-Lage,
der mit den Parametern OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform orderOfTransform , OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation orderOfRotation
und ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform viewOfTransform gewählt wurde. Die folgende Tabelle listet die
möglichen Kombinationen. Wie schon erwähnt empfehlen wir, nur die Typen mit
OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform orderOfTransform = 'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T" und ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform viewOfTransform =
'point' "point" "point" "point" "point" "point" zu verwenden (Codes 0, 2, and 4).
OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform OrderOfTransform orderOfTransform
OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation OrderOfRotation orderOfRotation
ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform ViewOfTransform viewOfTransform
Code
'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"
'gba' "gba" "gba" "gba" "gba" "gba"
'point' "point" "point" "point" "point" "point"
0
'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"
'abg' "abg" "abg" "abg" "abg" "abg"
'point' "point" "point" "point" "point" "point"
2
'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"
'rodriguez' "rodriguez" "rodriguez" "rodriguez" "rodriguez" "rodriguez"
'point' "point" "point" "point" "point" "point"
4
'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"
'gba' "gba" "gba" "gba" "gba" "gba"
'coordinate_system' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system"
1
'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"
'abg' "abg" "abg" "abg" "abg" "abg"
'coordinate_system' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system"
3
'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T"
'rodriguez' "rodriguez" "rodriguez" "rodriguez" "rodriguez" "rodriguez"
'coordinate_system' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system"
5
'R(p-T)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)"
'gba' "gba" "gba" "gba" "gba" "gba"
'point' "point" "point" "point" "point" "point"
8
'R(p-T)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)"
'abg' "abg" "abg" "abg" "abg" "abg"
'point' "point" "point" "point" "point" "point"
10
'R(p-T)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)"
'rodriguez' "rodriguez" "rodriguez" "rodriguez" "rodriguez" "rodriguez"
'point' "point" "point" "point" "point" "point"
12
'R(p-T)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)"
'gba' "gba" "gba" "gba" "gba" "gba"
'coordinate_system' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system"
9
'R(p-T)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)"
'abg' "abg" "abg" "abg" "abg" "abg"
'coordinate_system' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system"
11
'R(p-T)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)"
'rodriguez' "rodriguez" "rodriguez" "rodriguez" "rodriguez" "rodriguez"
'coordinate_system' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system"
13
3D-Lagen können mit convert_pose_type convert_pose_type ConvertPoseType convert_pose_type ConvertPoseType ConvertPoseType in andere Darstellungstypen
konvertiert werden; mit get_pose_type get_pose_type GetPoseType get_pose_type GetPoseType GetPoseType kann der Darstellungstyp einer
3D-Lage abgefragt werden.
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Wird ohne Parallelisierung verarbeitet.
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
RotX
RotX
RotX
RotX
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
RotY
RotY
RotY
RotY
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
RotZ
RotZ
RotZ
RotZ
rotZ
≤
360
Reihenfolge von Rotation und Translation.
Defaultwert:
'Rp+T'
"Rp+T"
"Rp+T"
"Rp+T"
"Rp+T"
"Rp+T"
Wertevorschläge: 'Rp+T' "Rp+T" "Rp+T" "Rp+T" "Rp+T" "Rp+T" , 'R(p-T)' "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)" "R(p-T)"
Bedeutung der Rotationswerte.
Defaultwert:
'gba'
"gba"
"gba"
"gba"
"gba"
"gba"
Wertevorschläge: 'gba' "gba" "gba" "gba" "gba" "gba" , 'abg' "abg" "abg" "abg" "abg" "abg" , 'rodriguez' "rodriguez" "rodriguez" "rodriguez" "rodriguez" "rodriguez"
Sichtweise der Transformation.
Defaultwert:
'point'
"point"
"point"
"point"
"point"
"point"
Wertevorschläge: 'point' "point" "point" "point" "point" "point" , 'coordinate_system' "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system" "coordinate_system"
3D-Lage (Pose).
Parameteranzahl: 7
* Create a pose.
create_pose (0.1, 0.2, 0.3, 40, 50, 60, 'Rp+T', 'gba', 'point', Pose)
* Create a pose.
create_pose (0.1, 0.2, 0.3, 40, 50, 60, 'Rp+T', 'gba', 'point', Pose)
* Create a pose.
create_pose (0.1, 0.2, 0.3, 40, 50, 60, 'Rp+T', 'gba', 'point', Pose)
HTuple Pose, Pose2;
// Create a pose.
create_pose (0.1, 0.2, 0.3, 40, 50, 60, "Rp+T", "gba", "point", &Pose);
* Create a pose.
create_pose (0.1, 0.2, 0.3, 40, 50, 60, 'Rp+T', 'gba', 'point', Pose)
* 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 create_pose CreatePose create_pose CreatePose CreatePose
den Wert 2 (H_MSG_TRUE).
pose_to_hom_mat3d pose_to_hom_mat3d PoseToHomMat3d pose_to_hom_mat3d PoseToHomMat3d PoseToHomMat3d ,
write_pose write_pose WritePose write_pose WritePose WritePose ,
camera_calibration camera_calibration CameraCalibration camera_calibration CameraCalibration CameraCalibration ,
hand_eye_calibration hand_eye_calibration HandEyeCalibration hand_eye_calibration HandEyeCalibration HandEyeCalibration
read_pose read_pose ReadPose read_pose ReadPose ReadPose ,
hom_mat3d_to_pose hom_mat3d_to_pose HomMat3dToPose hom_mat3d_to_pose HomMat3dToPose HomMat3dToPose
hom_mat3d_rotate hom_mat3d_rotate HomMat3dRotate hom_mat3d_rotate HomMat3dRotate HomMat3dRotate ,
hom_mat3d_translate hom_mat3d_translate HomMat3dTranslate hom_mat3d_translate HomMat3dTranslate HomMat3dTranslate ,
convert_pose_type convert_pose_type ConvertPoseType convert_pose_type ConvertPoseType ConvertPoseType ,
get_pose_type get_pose_type GetPoseType get_pose_type GetPoseType GetPoseType ,
hom_mat3d_to_pose hom_mat3d_to_pose HomMat3dToPose hom_mat3d_to_pose HomMat3dToPose HomMat3dToPose ,
pose_to_hom_mat3d pose_to_hom_mat3d PoseToHomMat3d pose_to_hom_mat3d PoseToHomMat3d PoseToHomMat3d ,
write_pose write_pose WritePose write_pose WritePose WritePose ,
read_pose read_pose ReadPose read_pose ReadPose ReadPose
Foundation