halcon中的坐标系相关

一、定义

世界坐标系:真实世界中物体实际位置(三维)
相机坐标系:以镜头光心为原点,光轴为Z轴(三维)
图像物理坐标系:以成像图像中心维原点(二维)
像素坐标系:原点在图像左上角(二维)

二、详细解释

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

刚性变换: 只有物体的位置(平移变换)和朝向(旋转变换)发生改变,而形状不变,得到的变换称为刚性变换。刚性变换是最一般的变换。

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

世界坐标系是三维的(原点根据"设为参考位姿"的照片而得到,定义在阵列标定板中心上)示例图为:

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

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

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

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

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

1

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

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

总结下各坐标系的定义:

世界坐标系:真实世界中物体实际位置(三维)
相机坐标系:以镜头光心为原点,光轴为Z轴(三维)
图像物理坐标系:以成像图像中心维原点(二维)
像素坐标系:原点在图像左上角(二维)

因此,图像测量项目中,从世界坐标系到像素坐标系是一个三维到二维的过程,要找到矩阵转换中相关系数(内参与外参)


相关的halcon算子是:

1

2

3

4

5

6

//像素坐标系到世界坐标系

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的算子有:

1

2

3

4

5

6

7

//将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,在机器人控制技术,自动化技术上都会有很好的帮助,大家在学习的过程中不仅仅要知道逻辑,更是要对基本理论有所了解,这才是提高技术水平的不二法门!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/450959.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何计算两个指定日期相差几年几月几日

一、题目要求 假定给出两个日期,让你计算两个日期之间相差多少年,多少月,多少天,应该如何操作呢? 本文提供网页、ChatGPT法、VBA法和Python法等四种不同的解法。 二、解决办法 1. 网页计算法 这种方法是利用网站给…

数据中心机房建设的关键痛点及解决方案

随着信息技术的飞速发展,数据中心机房已成为企业信息系统的核心。然而,在机房系统的建设过程中,投资及运行维护成为项目管理的关键痛点。合理的投资决策和高效的运维管理是确保机房系统经济性和可靠性的重要因素。本文将探讨机房系统建设的投…

学习Spring的第十三天

Repository : 注解Dao层 Service : 注解Service层 Controller : 注解Web层 值得注意的是 : 当业务中出现一个bean三层都不属于时 , 我们用Component进行注解 Bean依赖注入注解开发 : Value : 可把zhangsan注解进username属性 Value("zhangsan")private String …

debian12 解决 github 访问难的问题

可以在 /etc/hosts 文件中添加几个域名与IP对应关系,从而提高 github.com 的访问速度。 据搜索了解(不太确定),可以添加这几个域名:github.com,github.global.ssl.fastly.net,github.global.fa…

Linux 多线程 | 线程的操作、线程库、线程ID

Linux进程和线程 进程是资源分配的基本单位线程是调度的基本单位线程共享进程数据,但是也有自己的一部分数据:线程ID(LWP)、一组寄存器、栈、errno、信号屏蔽字、调度优先级 进程的多个线程共享 同一地址空间,因此Text Segment、Data Segment都是共享的…

Linux(一)

介绍 常见的操作系统(windows、IOS、Android、MacOS, Linux, Unix); 一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可;目前很多企业级的项目(c/c/php/python/java/go)都会部署到 Linux/unix 系统上。 吉祥物 …

遗失的源代码之回归之路的探索与实践

背景 最近比较突然被安排接手一个项目,该项目的情况如下 原生和RN结合的混合开发模式组件化开发,有很多基础组件以及业务组件但是在梳理项目依赖时发现了个别组件源码不全的情况,于是写了个cli用于对比两个版本产物文件,生成差异结果以便于快速进行源码找回恢复。 结果如下…

2、安全开发-Python-Socket编程端口探针域名爆破反弹Shell编码免杀

用途:个人学习笔记,欢迎指正! 目录 主要内容: 一、端口扫描(未开防火墙情况) 1、Python关键代码: 2、完整代码:多线程配合Queue进行全端口扫描 二、子域名扫描 三、客户端,服务端Socket编程通信cmd命…

SpringCloud-微服务项目架构

在当今软件开发领域,微服务架构正成为构建灵活、可伸缩、独立部署的应用的首选,微服务架构作为一种灵活而强大的设计模式,通过将系统拆分为独立的、自治的服务,使得应用更容易维护、扩展和升级。本文将探讨微服务项目架构的关键特…

数据在内存中的存储(上)

1. 整数在内存中的存储 整数的2进制表示方法有三种:即原码、反码和补码 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最 高位的一位是被当做符号位,剩余的都是数值位。 正…

流畅的Python(七)-函数装饰器和闭包

一、核心要义 主要解释函数装饰器的工作原理,包括最简单的注册装饰器和较复杂的参数化装饰器。同时,因为装饰器的实现依赖于闭包,因此会首先介绍闭包存在的原因和工作原理。 二、代码示例 1、变量作用域规则 #!/usr/bin/env python # -*-…

uniapp 高德地图显示

1. uniapp 高德地图显示 使用前需到**高德开放平台(https://lbs.amap.com/)**创建应用并申请Key   登录 高德开放平台,进入“控制台”,如果没有注册账号请先根据页面提示注册账号   打开 “应用管理” -> “我的应用”页面…