halcon算法库中各坐标系,位姿的解释及原理
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算法库中各坐标系,位姿的解释及原理相关推荐
- ecies算法c语言实现,Bouncy Castle算法库中ECIES算法调用示例
JRE8 + jce_policy-8, Bouncy Castle 1.50环境下调试通过 import java.security.KeyPair; import java.security.Ke ...
- 最大最完整的---NAG Fortran 算法库
转载www.smart-cores.com中 NAG Fortran 算法库 最大最完整的商用 Fortran 数值算法库 NAG Fortran 软件库是由专家开发,适用于多种应用领域中,是 ...
- pythonsklearn乳腺癌数据集_Python的Sklearn库中的数据集
一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...
- python的自带数据集_Python的Sklearn库中的数据集
一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...
- 国密算法:利用python进行sm3 hash算法,计算hash值,国密算法库gmssl的使用
本篇介绍利用gmssl算法库中的sm3模块来进行hash值的计算. 一 sm3 hash算法的特点: sm3用于计算一个消息的hash值: 几乎无法被逆向,即通过hash值无法推断出原始消息: sm3 ...
- 智能家居传感器:BME680--树莓派3B+ 搭配BME680的数据读取温湿度和气压。树莓派IIC BME680算法库 (未完成版本)
在之前的一篇博客里面写了关于Stm32F407 读取BME680传感器的程序,发现很多小伙伴都想玩BME680这个传感器,所以准备再开一个坑,做一下BME680和树莓派搭配的例子,希望给大家一点点参考 ...
- iOS标准库中常用数据结构和算法之内存池
上一篇:iOS标准库中常用数据结构和算法之位串 ⛲️内存池 内存池提供了内存的复用和持久的存储功能.设想一个场景,当你分配了一块大内存并且填写了内容,但是你又不是经常去访问这块内存.这样的内存利用率将 ...
- python 图像像素的坐标系方向, PIL库中Image.getpixel()方法, 相机标定之四个坐标系及其关系
引用文章1: Python的PIL库中的getpixel方法 https://blog.csdn.net/MiniCatTwo/article/details/80608076 引用文章2: 相机标定 ...
- iOS标准库中常用数据结构和算法之二叉排序树
上一篇:iOS标准库中常用数据结构和算法之排序 ?二叉排序树 功能:二叉排序树的标准实现是一颗平衡二叉树.二叉排序树主要用来解决高效插入和高效检索以及进行排序的问题.系统分别提供了二叉排序树节点的查找 ...
最新文章
- 如何增加MOSS 2007中list template和site template的最大值
- 中科大计算机应用,中科大2012计算机应用专业考研初试考什么
- 正则表达式入门教程-连载(4)-点符号(.)
- 什么是索引?为什么要建立索引?并举例说明.(以某一具体的DBMS为例)
- NOIP模拟——change
- 脂肪粒和淋巴结肿大的外形可否区分
- GARFIELD@01-31-2005
- 【GIS风暴】什么是地理空间智能(Geospatial AI)?
- java中能构成循环的语句_《编程导论(Java)#183;3.2.4 循环语句》
- java arraybound out_java – 获取ArrayIndexOutOfBound:1异常
- 九项路考(1)----铁饼神功
- Community找不到Workspace按钮的处理方法
- php strip_tag 回车,详解PHP函数 strip_tags 处理字符串缺陷bug
- Linux文件类型与文件权限详解(三)
- WPS最大的败笔是“免费用,广告弹窗”,难怪用户纷纷使用office
- 【学习框架】jeeSite 【maven项目】导入后转成web项目 【转载加原创】
- 路由器刷固件——斐讯路由器FIR300M刷OpenWrt固件教程
- pdf论文中visio画的图出现Times New Roman 字体未嵌入
- 试图执行系统不支持的操作,问题
- 苹果屏幕上的小圆点_官网新增2个内购软件 ! iOS 14上最值得使用的5个好功能,你都会了吗?...
热门文章
- 路由器不显示连接该WiFi的设备
- 基于ZigBee的桥梁健康监测系统
- 数学建模微分方程导弹问题matlab求解,数学建模之微分方程(符实现例题和MATLAB源码)...
- perf: interrupt took too long
- Qt常见make编译错误:/usr/bin/ld:cannot find -lxxx
- scratch二次开发(一)
- QQ用户的帐号和密码安全
- jdk11安装及网盘下载地址
- 苹果电话录到android,iphone通讯录导出到安卓手机教程
- 临床血液学综合练习题库【1】