一、简介
如下:
create_pose (9, 0, 0, 90, 90, 0, 'Rp+T', 'gba', 'point', Pose1)
create_pose (-2, 0, 0, 90, 90, 0, 'Rp+T', 'gba', 'point', Pose2)
gen_plane_object_model_3d (Pose1, [-1,-1,1,1] * 90, [-1,1,1,-1] * 90, IntersectionPlane)
gen_plane_object_model_3d (Pose2, [-1,-1,1,1] * 90, [-1,1,1,-1] * 90, IntersectionPlane1)
这段这个create_pose,一直知道是三维的位姿,但是我不理解为啥要这么设置,同时也不知道有什么用,多后续的作用是什么,今天就一起来看一直这个,参考的博客是:halcon算子:create_pose-halcon标定-少有人走的路
从勇哥这里学到的很多东西,希望勇哥能带我们走向巅峰。
二、算子解释
create_pose 创建3D姿太
create_pose(::TransX,TransY,TransZ,RotX,RotY,RotZ,OrderOfTransform,OrderOfRotation,ViewOfTransform:Pose)
TransX, TransY和TransZ分别指定沿x轴,y轴和z轴的平移,
RotX, RotY和 RotZ描述旋转
平移的很好理解,但是旋转的我记得有好几种方式
方向表示(旋转)
HALCON允许您使用参数OrderOfRotation在其中三个中进行选择:如果传递值'gba',则旋转将通过以下围绕三个轴的旋转链来描述(有关旋转矩阵的内容, 请参见hom_mat3d_rotate)
1、Rgba=Rx*Ry*Rz 按照Yaw-Pitch-Roll约定 ,可以理解为 首先绕着z轴旋转,然后绕着“旧” y轴旋转,最后绕着“旧” x轴旋转,如下:
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)
下面更加简明
- 绕
Z
轴旋转。 - 绕“旧的”
Y
轴旋转。 - 绕“旧的”
X
轴旋转。
Rabg在文献中被称为“ Roll-Pitch-Yaw 翻滚-偏航-仰俯”惯例
Rabg=Rz*Ry*Rx
请注意,这些3D姿势可能是模棱两可的,这意味着同构转换矩阵可以具有多个姿势表示形式。例如,对于 , 以下姿势对应于相同的齐次变换矩阵:
对应的齐次变换矩阵
可以使用运算符pose_to_hom_mat3d获得与姿势相对应的齐次变换矩阵。在标准定义中,以下是齐次变换矩阵,可以将其分解为两个单独的矩阵,一个矩阵用于平移(H(t)),另一个矩阵用于旋转(H(R)):
上图Rabg 写错了,是Rgba
pose_to_hom_mat3d(ObjInCameraPose, cam_H_cal)将 3D 姿态 Pose
(例如外部相机参数)转换为等效的齐次变换矩阵 HomMat3D
pose_to_hom_mat3d 的一个典型应用是您想要进一步变换姿势,例如,
使用 hom_mat3d_rotate 或 hom_mat3d_translate 旋转或平移它
。在外部相机参数的情况下,如果无法放置校准板以使其坐标系
与所需的世界坐标系重合,则可能需要这样做。
Pose (input_control) pose → (real / integer)
3D pose.
Number of elements: 7
HomMat3D (output_control) hom_mat3d → (real)
Equivalent homogeneous transformation matrix.
四元数axis_angle_to_quat (Operator)
* Normalize a vector and create a rotation quaternion
Length := sqrt(AxisX*AxisX+AxisY*AxisY+AxisZ*AxisZ)
AxisX := AxisX/Length
AxisY := AxisY/Length
AxisZ := AxisZ/Length
axis_angle_to_quat (AxisX, AxisY, AxisZ, rad(90), Quaternion)
四元数是复数的扩展。四元数集由 给出。在 HALCON 中,四元数由包含四个元素的元组表示:[x_{0},x_{1},x_{2},x_{3}]。单位四元数可以用来描述旋转,可以使用旋转四元数在 set_paint 中设置 3D 绘图的方向。
坐标转换affine_trans_point_3d
使用姿势或更精确地将一个点从坐标系1转换为坐标系2 。请注意,要将点从坐标系1转换为系统2,请使用描述坐标系1相对于系统2的姿态的转换矩阵。
pose_to_hom_mat3d(PoseOf1In2,HomMat3DFrom1In2)
affine_trans_point_3d(HomMat3DFrom1In2,P1X,P1Y,P1Z,P2X,P2Y,P2Z)
非标准姿势定义
如果为OrderOfTransform选择'R(pT)',则创建的位姿对应于以下转换链,即,旋转和平移的顺序相反,而平移取反:
如果为ViewOfTransform选择'coordinate_system',则转换顺序保持不变,但旋转角度将被取反。请注意,与其名称相反,这并不等同于变换坐标系!
返回的数据结构
返回的Pose 中,前三个元素包含平移参数 TransX,TransY和TransZ,后跟旋转参数RotX,RotY和RotZ。最后一个元素使用参数OrderOfTransform,OrderOfRotation和 ViewOfTransform编码您选择的姿势的表示类型。
下表列出了可能的组合。如前所述,我们建议仅使用OrderOfTransform = 'Rp + T'和 ViewOfTransform ='point'(代码0、2和4)。
create_pose 创建3D位姿
( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)
输入:
TransX 沿x轴平移(以[m]为单位)。
默认值:0.1
建议值:-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
TransY 沿y轴平移(以[m]为单位)。
默认值:0.1
建议值:-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
TransZ 沿z轴平移(以[m]为单位)。
默认值:0.1
建议值:-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
RotX 绕Rodriguez向量的x轴或x分量旋转(以[°]为单位或无单位)。
默认值:90.0
建议值:0.0、90.0、180.0、270.0
典型值范围:0≤RotX≤360
RotY 绕Rodriguez向量的y轴或y分量旋转(以[°]为单位或无单位)。
默认值:90.0
建议值:0.0、90.0、180.0、270.0
典型值范围:0≤RotY≤360
RotZ 绕Rodriguez矢量的z轴或z分量旋转(以[°]或不带单位)。
默认值:90.0
建议值:0.0、90.0、180.0、270.0
典型值范围:0≤RotZ≤360
OrderOfTransform 旋转和平移的顺序。
默认值:“ Rp + T”
建议值:“ Rp + T”,“ R(p-T)”
OrderOfRotation 旋转值的含义。
默认值:“ gba”
建议值:“ gba”,“ abg”,“ rodriguez”
ViewOfTransfor 变换视角。
默认值:“point”
建议值:“ point(点)”,“ coordinate_system(坐标系)”
//===========================================================================
输出:
Pose
3D姿势。
元素数:7
三、案例
create_pose (9, 0, 0, 90, 90, 0, 'Rp+T', 'gba', 'point', Pose1)
create_pose (-200, 0, 0, 90, 90, 0, 'Rp+T', 'gba', 'point', Pose2)
gen_plane_object_model_3d (Pose1, [-1,-1,1,1] * 90, [-1,1,1,-1] * 90, IntersectionPlane)
gen_plane_object_model_3d (Pose2, [-1,-1,1,1] * 90, [-1,1,1,-1] * 90, IntersectionPlane1)
visualize_object_model_3d (WindowHandle, [TriangulatedObjectModel3D,IntersectionPlane,IntersectionPlane1], [], [], ['disp_pose'], ['true'], [], [], [], PoseOut1)
intersect_plane_object_model_3d (TriangulatedObjectModel3D, Pose1, ObjectModel3DIntersection1)
intersect_plane_object_model_3d (TriangulatedObjectModel3D, Pose2, ObjectModel3DIntersection2)