halcon算法库中各坐标系,位姿的解释及原理

前言

在学习halcon和光学原理的过程中,经常会听到像素坐标系,窗口坐标系,世界坐标系等等,很多时候会一头雾水,这时候一定要仔细甄别,了解其原理,才能知道在视觉测量,手眼标定过程中各坐标系基本转换,因此基本功一定要扎实,话不多说,上干货!!!!

各坐标系定义

世界坐标系(刚性变换到)-----------相机坐标系 (外参R与t)

任何一个坐标系的建立,主要是原点位置坐标轴方向。在相机标定的过程中,需要定义世界坐标系。世界坐标系便是我们看到的实际物理世界,那么怎么定义世界坐标系呢?答案就在halcon提供的圆点标定板上。

世界坐标系是三维的(原点自定义,定义在阵列标定板中心上,每幅图都不一样)示例图为:

根据标定板的左上角三角符号可以判定世界坐标系XY轴方向,Z轴方向根据右手螺旋定则判定。

相机坐标系(透视投影,3D到2D)-----------到图像物理坐标 (焦距f)

图像物理坐标系(平移)-------------到图像像素坐标系 (u0,v0)也是内参

像素坐标系便是我们从halcon窗口里看到的图像像素坐标,查看一个图像的像素坐标,只需要按住Ctrl键,鼠标在图像上移动,便可以看到当前鼠标位置的图像像素坐标值。谨记,在仿射变化等图像处理中都是以像素坐标系下开展的。

窗口坐标系指的是建立图像显示窗口的大小,比如说

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)

这里面的512便是指的是窗口的大小,跟图像像素无关。

总结下各坐标系的定义:
世界坐标系:真实世界中物体实际位置(三维)
相机坐标系:以镜头光心为原点,光轴为Z轴(三维)
图像物理坐标系:以成像图像中心维原点(二维)
像素坐标系:原点在图像左上角(二维)
因此,图像测量项目中,从世界坐标系到像素坐标系是一个三维到二维的过程,要找到矩阵转换中相关系数(内参与外参)

相关的halcon算子是:

//像素坐标系到世界坐标系
image_points_to_world_plane()
//三维坐标点的转换
affine_trans_point_3d()
//相机坐标系下的点转换为像素坐标系
project_3d_point()

Halcon中的位姿说明

位姿指的是位置和姿态。位姿是一个坐标系相对于另一个坐标系!牵扯到两个坐标系有6个参数,x,y,z,rx,ry,rz。代表的是坐标系原点的相对x,y,z平移和坐标系坐标轴方向的相对旋转。

必须注意的是:halcon中pose的值都是以为单位的,而机器人常用毫米为单位,所以在一些手眼标定的项目中注意单位的换算(这都是曾经做项目过程中血的教训啊)

代表的是世界坐标系相对于camera坐标系(注意是谁相对于谁)

位姿可以转换成齐次坐标矩阵,其实质是数学表达方式的改变
在Halcon中,HomMat3D,是3维齐次坐标矩阵,4*4类型
HomMat2D,是2维齐次坐标矩阵,3*3类型(关于为什么矩阵表示齐次坐标系时会增加一行1,大家可以自行百度学习一下哦)

在Halcon中关于pose的算子有:

//将pose转化为齐次坐标矩阵
hom_mat3d_to_pose()
find_marks_and_pose()
//设置新的pose
set_origin_pose()
//将齐次坐标矩阵转化为pose
pose_to_hom_mat3d()

在Halcon中有关于手眼标定,眼在手外的示例例子中:
obj:标定板坐标系(世界坐标系) 【动】
cam:相机坐标系 【 静】
tool:工具坐标系(丝杆末端)【动】
base:机器人基坐标系 【静】

2个移动坐标系,2个静止坐标系(4个坐标系形成闭环!!!)

学习Halcon做手眼标定一定要掌握位姿的基础理论。

结尾

本篇博客对halcon中坐标系和位姿做了说明,其实理解这些原理不单单有助于理解halcon,在机器人控制技术,自动化技术上都会有很好的帮助,大家在学习的过程中不仅仅要知道逻辑,更是要对基本理论有所了解,这才是提高技术水平的不二法门!!!如果您觉得有用的话,帮忙点赞支持哦,创作不易,感谢大家

halcon算法库中各坐标系,位姿的解释及原理相关推荐

  1. ecies算法c语言实现,Bouncy Castle算法库中ECIES算法调用示例

    JRE8 + jce_policy-8, Bouncy Castle 1.50环境下调试通过 import java.security.KeyPair; import java.security.Ke ...

  2. 最大最完整的---NAG Fortran 算法库

    转载www.smart-cores.com中  NAG Fortran 算法库 最大最完整的商用 Fortran 数值算法库   NAG Fortran 软件库是由专家开发,适用于多种应用领域中,是 ...

  3. pythonsklearn乳腺癌数据集_Python的Sklearn库中的数据集

    一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...

  4. python的自带数据集_Python的Sklearn库中的数据集

    一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...

  5. 国密算法:利用python进行sm3 hash算法,计算hash值,国密算法库gmssl的使用

    本篇介绍利用gmssl算法库中的sm3模块来进行hash值的计算. 一 sm3 hash算法的特点: sm3用于计算一个消息的hash值: 几乎无法被逆向,即通过hash值无法推断出原始消息: sm3 ...

  6. 智能家居传感器:BME680--树莓派3B+ 搭配BME680的数据读取温湿度和气压。树莓派IIC BME680算法库 (未完成版本)

    在之前的一篇博客里面写了关于Stm32F407 读取BME680传感器的程序,发现很多小伙伴都想玩BME680这个传感器,所以准备再开一个坑,做一下BME680和树莓派搭配的例子,希望给大家一点点参考 ...

  7. iOS标准库中常用数据结构和算法之内存池

    上一篇:iOS标准库中常用数据结构和算法之位串 ⛲️内存池 内存池提供了内存的复用和持久的存储功能.设想一个场景,当你分配了一块大内存并且填写了内容,但是你又不是经常去访问这块内存.这样的内存利用率将 ...

  8. python 图像像素的坐标系方向, PIL库中Image.getpixel()方法, 相机标定之四个坐标系及其关系

    引用文章1: Python的PIL库中的getpixel方法 https://blog.csdn.net/MiniCatTwo/article/details/80608076 引用文章2: 相机标定 ...

  9. iOS标准库中常用数据结构和算法之二叉排序树

    上一篇:iOS标准库中常用数据结构和算法之排序 ?二叉排序树 功能:二叉排序树的标准实现是一颗平衡二叉树.二叉排序树主要用来解决高效插入和高效检索以及进行排序的问题.系统分别提供了二叉排序树节点的查找 ...

最新文章

  1. 如何增加MOSS 2007中list template和site template的最大值
  2. 中科大计算机应用,中科大2012计算机应用专业考研初试考什么
  3. 正则表达式入门教程-连载(4)-点符号(.)
  4. 什么是索引?为什么要建立索引?并举例说明.(以某一具体的DBMS为例)
  5. NOIP模拟——change
  6. 脂肪粒和淋巴结肿大的外形可否区分
  7. GARFIELD@01-31-2005
  8. 【GIS风暴】什么是地理空间智能(Geospatial AI)?
  9. java中能构成循环的语句_《编程导论(Java)#183;3.2.4 循环语句》
  10. java arraybound out_java – 获取ArrayIndexOutOfBound:1异常
  11. 九项路考(1)----铁饼神功
  12. Community找不到Workspace按钮的处理方法
  13. php strip_tag 回车,详解PHP函数 strip_tags 处理字符串缺陷bug
  14. Linux文件类型与文件权限详解(三)
  15. WPS最大的败笔是“免费用,广告弹窗”,难怪用户纷纷使用office
  16. 【学习框架】jeeSite 【maven项目】导入后转成web项目 【转载加原创】
  17. 路由器刷固件——斐讯路由器FIR300M刷OpenWrt固件教程
  18. pdf论文中visio画的图出现Times New Roman 字体未嵌入
  19. 试图执行系统不支持的操作,问题
  20. 苹果屏幕上的小圆点_官网新增2个内购软件 ! iOS 14上最值得使用的5个好功能,你都会了吗?...

热门文章

  1. 路由器不显示连接该WiFi的设备
  2. 基于ZigBee的桥梁健康监测系统
  3. 数学建模微分方程导弹问题matlab求解,数学建模之微分方程(符实现例题和MATLAB源码)...
  4. perf: interrupt took too long
  5. Qt常见make编译错误:/usr/bin/ld:cannot find -lxxx
  6. scratch二次开发(一)
  7. QQ用户的帐号和密码安全
  8. jdk11安装及网盘下载地址
  9. 苹果电话录到android,iphone通讯录导出到安卓手机教程
  10. 临床血液学综合练习题库【1】