一、简介

如下:

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)

下面更加简明

  1. Z轴旋转。
  2. 绕“旧的” Y轴旋转。
  3. 绕“旧的” 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
(例如外部相机参数)转换为等效的齐次变换矩阵 HomMat3Dpose_to_hom_mat3d 的一个典型应用是您想要进一步变换姿势,例如,
使用 hom_mat3d_rotate 或 hom_mat3d_translate 旋转或平移它
。在外部相机参数的情况下,如果无法放置校准板以使其坐标系
与所需的世界坐标系重合,则可能需要这样做。Pose (input_control)  pose → (real / integer)
3D pose.Number of elements: 7HomMat3D (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.0TransY 沿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.0TransZ  沿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.0RotX  绕Rodriguez向量的x轴或x分量旋转(以[°]为单位或无单位)。
默认值:90.0
建议值:0.0、90.0、180.0、270.0
典型值范围:0≤RotX≤360RotY  绕Rodriguez向量的y轴或y分量旋转(以[°]为单位或无单位)。
默认值:90.0
建议值:0.0、90.0、180.0、270.0
典型值范围:0≤RotY≤360RotZ  绕Rodriguez矢量的z轴或z分量旋转(以[°]或不带单位)。
默认值:90.0
建议值:0.0、90.0、180.0、270.0
典型值范围:0≤RotZ≤360OrderOfTransform  旋转和平移的顺序。
默认值:“ 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)

Halcon 3D create_pose相关推荐

  1. Halcon 3D 常见算子描述

    一.简介 halcon 中有很多常见的算子,我们经常在用,但是作为一名算法工程师我们不仅要会用,知道原理也是很重要的,所以对于很多事情我们不仅要所以然更有知其所以然. 二.算子解释 1.smooth_ ...

  2. Halcon 3D 切片法检测物料

    一.简介 在上一篇中,学习了鞋底切片法来求轮廓,那个思路是比较简单的,其次还提到了法向量重建的方法,目前由于没有用法向量重建来做那个项目,所以还是有很大的疑问,后续会继续学习那个方法然后重新在做一次, ...

  3. Halcon—3D测量算法的那点数学公式和代码实现

    Halcon-3D测量算法的那点数学公式和代码实现 ✨博主介绍 前言 Halcon源码 ✨博主介绍

  4. Halcon 3D 三维重建

    一.简介 三维重建(3D Reconstruction)技术一直是计算机图形学和计算机视觉领域的一个热点课题.早期的三维重建技术通常以二维图像作为输入,重建出场景中的三维模型.但是,受限于输入的数据, ...

  5. Halcon 3D点云和深度图的相互转化

    3D点云和深度图 1. 如何将灰度图转为3D点云 2. 创建一张深度图 3. 深度图转点云.点云转深度图 4. 代码和图片下载地址 1. 如何将灰度图转为3D点云 这里所说的灰度图转为3D点云,其实是 ...

  6. Halcon 3D moments_object_model_3d简介

    一.矩简介 Opencv 笔记11 图像的矩原理解析_Σίσυφος1900的博客-CSDN博客_opencv 图像的矩 矩是概率与统计中的一个概念,假设有随机变量X,常数c,正整数k,则有 E[(X ...

  7. 08 Halcon 3D点云体积计算

    1.基于halcon算法平台:2.提供深度图源文件以及解压密码:3.代码预览: /*********************************************************** ...

  8. 01 Halcon 3D深度图转彩色

    1.基于halcon算法平台:2.提供深度图源文件以及解压密码:3.代码预览: /*************************** @文档名称: 深度图转彩色图像. @作者: hugo @版本: ...

  9. halcon 3D Object Model 三维物体模型算子,持续更新

    目录 3D Object Model 三维物体模型 Creation创建 1.clear_object_model_3d 2.copy_object_model_3d 3. deserialize_o ...

  10. Halcon标定板标定流程

    一.相机内参标定 目的:标定内参的目的是消除镜头的畸变. 面阵相机的内参由一个8位的数组组成包括: startCamPar:=[Focus,Kappa,Sx,Sy,Cx,Cy,ImageWidth,I ...

最新文章

  1. 基于Policy Gradient实现CartPole
  2. Socket send函数和recv函数详解
  3. [云炬创业基础笔记]第四章测试19
  4. Live2D WebGL实现
  5. oracle instant client配置(MAC OS)
  6. 【渝粤题库】国家开放大学2021春1400机器人技术及应用题目
  7. PHP中__get()和__set()的用法实例详
  8. 企业级账号 版本更新总结
  9. 机器学习速成课程 | 练习 | Google Development——编程练习:神经网络简介
  10. 在linux中添加字典,为 Ubuntu 的 Vim 添加英文字典
  11. 6-1 线性表元素的区间删除 (10 分)
  12. 让你的 Node.js 应用跑得更快的 10 个技巧
  13. Eclipse启动无响应 停留在Loading workbench状态的解决办法
  14. 由摄像机的内参K计算视景体——glFrustum的参数推导
  15. paip.java桌面开发应用与WEB RIA应用
  16. 使用smtplib库隐藏授权码发送邮件
  17. 微信小程序反编译wxss文件缺失_微信小程序反编译 wxss 丢失问题
  18. 小草 李白 《菩萨蛮》
  19. health_parent的linux环境
  20. 【Android折叠屏适配】基于AutoSize框架适配折叠屏并兼容多窗口模式

热门文章

  1. 因果推断笔记—— 相关理论:Rubin Potential、Pearl、倾向性得分、与机器学习异同(二)
  2. 计算机的发展阶段器件,计算机发展的四个阶段构成计算机的电子元器件分别是什么?...
  3. Altera FPGA开发过程中sof、pof、jic文件的区别
  4. 磁盘清理软件:BlueHarvest for Mac
  5. 刘德华郑秀文喜剧大片《魔幻厨房》DVD国语中字
  6. 网页超链接无法访问本地文件
  7. 为RemoteApp的登录用户(域用户)添加输入法的方法
  8. walking机器人入门教程-工具-命令管理器
  9. 《CRAFT:Character Region Awareness for Text Detection》论文笔记
  10. 科普篇:内存、“运行内存”、外存?傻傻分不清楚。看完这篇就懂了