halcon算子:create_pose

create_pose

名称

create_pose —创建3D姿势。

签名

描述

create_pose创建3D姿势Pose姿势描述了刚性3D变换,即由任意平移和旋转组成的变换,具有6个参数:

 TransX, TransYTransZ分别指定沿x轴,y轴和z轴的平移,而RotX RotY和 RotZ描述旋转。

3D姿态通常以两种方式使用:首先,描述一个坐标系相对于另一坐标系的位置和方向(例如,零件坐标系相对于相机坐标系的姿态)

其次,零件相对姿态其次是描述如何在两个坐标系之间转换坐标(例如,将点从零件坐标转换为摄像机坐标)。


方向表示(旋转)


围绕任意轴的3D旋转可以多种方式由3个参数表示。HALCON允许您使用参数OrderOfRotation在其中三个中进行选择:如果传递值'gba',则旋转将通过以下围绕三个轴的旋转链来描述(有关旋转矩阵的内容, 请参见hom_mat3d_rotate): 



在文献中称为“ Yaw-Pitch-Roll约定”。请注意,您可以通过两种方式“读取”该链:如果从右开始,则始终相对于全局(即固定或“旧”)坐标系执行旋转。因此, 可以理解为:首先绕着z轴旋转,然后绕着“旧” y轴旋转,最后绕着“旧” x轴旋转。相反,如果从左到右读取,则相对于局部(即“新”)坐标系执行旋转。然后, 对应于以下内容:首先绕x轴旋转,绕“新” y轴旋转,最后绕“新(est)” 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)


OrderOfRotation中传递'abg',旋转对应于以下链:



 在文献中被称为“ Roll-Pitch-Yaw”惯例。

如果OrderOfRotation中传递“ rodriguez”,则旋转参数RotXRotYRotZ将被解释为所谓的Rodriguez旋转向量的x,y和z分量。向量的方向定义了(任意)旋转轴。向量的长度通常以正方向定义旋转角度。此处,使用Rodriguez向量的变体,其中向量的长度定义了旋转角一半的切线:



请注意,这些3D姿势可能是模棱两可的,这意味着同构转换矩阵可以具有多个姿势表示形式。例如,对于  以下姿势对应于相同的齐次变换矩阵: 


  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)表示旋转。


对应的齐次变换矩阵


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




坐标转换


以下等式描述了如何使用相应的齐次变换矩阵(输入和输出点作为齐次矢量,另请参见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)



非标准姿势定义


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

如果OrderOfTransform选择'R(pT)',则创建的位姿对应于以下转换链,即,旋转和平移的顺序相反,而平移取反:



如果ViewOfTransform选择'coordinate_system',则转换顺序保持不变,但旋转角度将被取反。请注意,与其名称相反,这并不等同于变换坐标系!




返回的数据结构


创建的3D姿势将以Pose返回,该姿势是长度为7的元组。前三个元素包含平移参数 TransXTransYTransZ,后跟旋转参数RotXRotYRotZ最后一个元素使用参数OrderOfTransformOrderOfRotation和 ViewOfTransform编码您选择的姿势的表示类型

下表列出了可能的组合。如前所述,我们建议仅使用OrderOfTransform = 'Rp + T'和 ViewOfTransform ='point'(代码0、2和4)。


转换顺序旋转顺序ViewOfTransform
'Rp + T''gba''点'0
'Rp + T''abg''点'2
'Rp + T'罗德里格斯(rodriguez)'点'4
'Rp + T''gba''坐标系'1个
'Rp + T''abg''坐标系'3
'Rp + T'罗德里格斯(rodriguez)'坐标系'5
'R(pT)''gba''点'8
'R(pT)''abg''点'10
'R(pT)'罗德里格斯(rodriguez)'点'12
'R(pT)''gba''坐标系'9
'R(pT)''abg''坐标系'11
'R(pT)'罗德里格斯(rodriguez)'坐标系'13


您可以使用convert_pose_type将姿势转换为其他表示类型, 并使用get_pose_type查询类型

并行化

  • 多线程类型:可重入(与非排他运算符并行运行)。

  • 多线程作用域:全局(可以从任何线程调用)。

  • 未经并行处理。

参量

TransX(input_control)  真实→ (真实)

沿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(input_control)  真实→ (真实)

沿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(input_control)  真实→ (真实)

沿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(input_control)  真实→ (真实)

绕Rodriguez向量的x轴或x分量旋转(以[°]为单位,无单位)。

默认值: 90.0

建议值: 0.0、90.0、180.0、270.0

典型值的范围:0≤ ROTX ≤360

RotY(input_control)  真实→ (真实)

绕Rodriguez向量的y轴或y分量旋转(以[°]为单位或无单位)。

默认值: 90.0

建议值: 0.0、90.0、180.0、270.0

典型值的范围:0≤ ROTY ≤360

RotZ(input_control)  真实→ (真实)

绕Rodriguez矢量的z轴或z分量旋转(以[°]为单位,无单位)。

默认值: 90.0

建议值: 0.0、90.0、180.0、270.0

典型值的范围:0≤ ROTZ ≤360

OrderOfTransform(input_control)  字符串→ (字符串)

旋转和平移的顺序。

默认值: “ Rp + T”

建议值:“ Rp + T”“ R(pT)”

OrderOfRotation(input_control)  字符串→ (字符串)

旋转值的含义。

默认值: “ gba”

建议值:“ gba”“ abg”“ rodriguez”

ViewOfTransform(input_control)  字符串→ (字符串)

转型观。

默认值: “point”

建议值:“ point”“ coordinate_system”

Pose (姿势)(output_control)  姿势→ (实数/整数)

3D姿势。

元素数: 7

示例(HDevelop)

*目标:使用非标准校准对象进行校准
*读取相机内部参数的起始值
read_cam_par('campar.dat',CameraParam)
*(读取3D世界点[WorldPointsX,WorldPointsY,WorldPointsZ],
*提取相应的2D图像点[PixelsRow,PixelsColumn])
*任务:为外部摄像机参数创建起始值,即*校准图像中校准对象的姿势
*第一张图片:标定物体放置在0.5和0.1之间*位于相机坐标系下方
*方向“从左向右读取”:旋转30度*围绕相机的光轴(z轴),
*然后围绕新的y轴倾斜10度
create_pose(0.1,0.0,0.5,30,10,0,'Rp + T','abg','point',StartPose1)
*(累积StartPoses中的所有姿势= [StartPose1,StartPose2,...])
*执行校准
camera_calibration(WorldPointsX,WorldPointsY,WorldPointsZ,\
                   PixelsRow,PixelsColumn,CameraParam,StartPoses,\
                   'pose',FinalCamParam,FinalPoses,错误)

结果

如果所有参数值都正确,则create_pose返回2(H_MSG_TRUE)。如有必要,将引发异常。

可能的继任者

pose_to_hom_mat3d, 

write_pose

 camera_calibration

 hand_eye_calibration

备择方案

read_pose, 

hom_mat3d_to_pose

也可以看看

hom_mat3d_rotate, 

hom_mat3d_translate

 convert_pose_type

 get_pose_type

 hom_mat3d_to_pose

 pose_to_hom_mat3d

 write_pose

 read_pose


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864