C/C++教程

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类型(关于为什么矩阵表示齐次坐标系时会增加一行,大家可以自行百度学习一下哦)

在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算法库中各坐标系,位姿的解释及原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!