Halcon算子学习:create_pose

在这里插入图片描述

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”

  • ViewOfTransform
    变换视角。
    默认值:“point”
    建议值:“ point”,“ coordinate_system”

输出:

  • Pose
    3D姿势。
    元素数:7

算子描述

1.create_pose创建3D姿势-Pose。 姿势描述了刚性3D变换,即由任意平移和旋转组成的变换,具有6个参数:TransX,TransY和TransZ分别指定沿x,y和z轴的平移,而RotX ,RotY和RotZ描述旋转。

2.3D姿态通常以两种方式使用:首先,描述一个坐标系相对于另一坐标系的位置和方向(例如,零件坐标系相对于相机坐标系的姿态,简而言之:零件相对姿态;
其次是描述如何在两个坐标系之间转换坐标(例如,将点从零件坐标转换为摄像机坐标)。

3.方向表示(旋转)

1)围绕任意轴的3D旋转可以多种方式由3个参数表示。 HALCON允许您使用参数OrderOfRotation在其中三个中进行选择:如果传递值’gba’,则旋转将通过以下围绕三个轴的旋转链来描述(有关旋转矩阵Rx,Ry,Rz的内容,请参见hom_mat3d_rotate):
在这里插入图片描述
2)Rgba 在文献中表示为“ Yaw-Pitch-Roll 翻滚-偏航-仰俯”
请注意,您可以通过两种方式“读取”该链:如果从右侧开始,则始终相对于全局(即固定或“旧”)坐标系进行旋转。 因此,可以理解为:首先绕着z轴旋转,然后绕着“旧” y轴旋转,最后绕着“旧” x轴旋转。 相反,如果您从左到右阅读,则相对于局部(即“新”)坐标系进行旋转。 然后,对应于以下内容:首先绕x轴旋转,绕“新” y轴旋转,最后绕“新(等)” z轴旋转。

从右到左读取对应于以下算子调用顺序:

  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)

相反,从左向右读取对应于以下算子调用顺序:

  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)

3)在OrderOfRotation中传递“ abg”时,旋转对应于以下链:
在这里插入图片描述
Rabg在文献中表示为“ Roll-Pitch-Yaw 翻滚-偏航-仰俯”。

4)如果在OrderOfRotation中传递“rodriguez”,则旋转参数RotX,RotY和RotZ将被解释为所谓的Rodriguez旋转向量的x,y和z分量。 向量的方向定义为(任意)旋转轴。 向量的长度通常定义为正方向的旋转角度。 此处,使用Rodriguez向量的变体,其中向量的长度定义为旋转角一半的正切值:
在这里插入图片描述

请注意,这些3D位姿可能是模棱两可的,这意味着齐次变换矩阵可以具有多个位姿表示形式。 例如,对于Rgba (b=±90)以下位姿对应于相同的齐次变换矩阵:

// 两种变换形式下,最终变换后的坐标位姿一样的
  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)

如果这会导致问题,则可以改用齐次变换矩阵或四元数(axis_angle_to_quat)表示旋转。

4.对应的齐次变换矩阵

1)您可以使用运算符 pose_to_hom_mat3d 获得与姿势相对应的齐次变换矩阵。 在标准定义中,这是以下齐次变换矩阵,可以将其分解为两个单独的矩阵,一个用于平移(H(t)),一个用于旋转(H(R)):
在这里插入图片描述
2)坐标转换

下面的等式描述了如何使用位姿(Pose)或更确切地说,即其相应的齐次变换矩阵2H1 (输入和输出点作为齐次矢量,另请参见affine_trans_point_3d)将一个点的从坐标系1转换为坐标系2。 请注意,要将点从坐标系1转换为坐标系2,请使用描述坐标系1相对于坐标系2的姿态的转换矩阵(HomMat3DFrom1In2)
在这里插入图片描述
这对应于以下算子调用:

  pose_to_hom_mat3d(PoseOf1In2, HomMat3DFrom1In2)
  affine_trans_point_3d(HomMat3DFrom1In2, P1X, P1Y, P1Z, P2X, P2Y, P2Z)

3)非标准位姿定义

到目前为止,我们已经描述了标准姿势定义。 要创建此类姿势,请为参数OrderOfTransform选择(默认)值“ Rp + T”,为ViewOfTransform选择“ point”。 通过为这些参数指定其他值,您可以创建非标准位姿类型,我们将在下面简要描述。 请注意,仅为了向后兼容才支持这些表示类型。 我们强烈建议使用标准类型。

如果为OrderOfTransform选择’R(p-T)’,则创建的位姿对应于以下变换链,即旋转和平移的顺序相反,并且平移取反:
在这里插入图片描述
如果为ViewOfTransform选择’coordinate_system’,则转换顺序保持不变,但旋转角度将被取反。 请注意,与其名称相反,这并不等同于变换坐标系
在这里插入图片描述
4)返回的数据结构

创建的3D姿势以Pose返回,该姿势是长度为7的元组。 前三个元素包含平移参数TransX,TransY和TransZ,然后是旋转参数RotX,RotY和RotZ。 最后一个元素对使用参数OrderOfTransform,OrderOfRotation和ViewOfTransform选择的姿势的表示类型进行编码。 下表列出了可能的组合。 如前所述,我们建议仅使用OrderOfTransform ='Rp + T’和ViewOfTransform ='point’的表示类型(代码0、2和4)

在这里插入图片描述
您可以使用convert_pose_type将姿势转换为其他表示类型,并使用get_pose_type查询类型。

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
set_origin_poseHalcon中用来设置相机姿态的算子之一。在机器视觉领域,相机姿态是指相机在三维世界中的位置和方向,是进行立体视觉及三维重建等操作的基石之一。相机姿态的描述主要有两种方法:欧拉角和四元数。 在Halcon中,set_origin_pose算子所设置的相机姿态采用的是欧拉角的方式进行描述。其参数有六个,分别为x、y、z方向上的旋转角度和相机的平移向量(tx、ty、tz),这六个参数可以通过平移向量和旋转角度来描述相机在三维世界坐标系中的位置和方向。set_origin_pose算子可用于将相机从一个位置移到另一个位置,以及旋转相机的方向。 使用set_origin_pose算子需要先获取当前相机姿态,然后设置新的姿态。一般情况下,获取当前相机姿态使用的是get_cam_param算子,该算子返回相机的内外参数,包括焦距、畸变系数、旋转角度及平移向量等。根据当前姿态和设置的姿态,可以确定相机需要旋转的角度和平移的距离,最终将相机移动到新的位置和方向。 set_origin_pose算子主要用于相机标定、三维重建、机器人导航等方面。通过调整相机的姿态,可以使图像对应于不同位置和方向的三维场景,实现更精确的视觉测量和准确定位。在实际应用中,需要结合其他算子,如gen_cam_proj_matrix2算子、hom_mat3d_to_pose算子等,才能完成更复杂的相机姿态设置和获取任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值