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.mzph.cn/news/664670.shtml

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

相关文章

题目:有1,2,3,4共四个数字,能组成多少个不相同而且无重复数字的三位数有多少个,都是多少?lua

这是作者的思路, 创建三个表, 第一个数是从四个数遍历, 第二个是数剔除第一个数进行遍历 第三个是剔除第一第二个数遍历 脚本如下 local a{1,2, 3, 4} local b{} local c{} local d{} local function copy(tbl) local ctbl{} for k,v in…

Vue发送Get 和 Post 请求以及获取数据

Vue发送Get 和 Post 请求 注意以下代码是请求处理request.js request.js url:请求服务器路径;value:需要发送给服务器的数据;method:请求方式;options的使用:导出Excel export(data) {return request(‘export’, data, ‘post’, {responseType: ‘blob’ }) } expo…

进程间通信方式

1>内核提供的原始通信方式有三种 1)无名管道 2)有名管道 3)信号 2>System V提供了三种通信方式 4)消息队列 5)共享内存 6)信号量(信号灯集) 3>套接字通信 7)socke…

代码对齐自动缩进排版代码格式化美化代码快捷键ShortcutKeyHotKey

代码对齐自动缩进排版代码格式化美化代码默认快捷键 Eclipse : Ctrl Shift F Ctrl Shift F Ctrl Shift F VsCode : Shift Alt F Shift Alt F Shift Alt F Idea : Ctrl Alt L Ctrl Alt L Ctrl Alt L Visual Studio : Ctrl K F Ctrl K F Ctrl K …

TCP/IP LWIP FPGA 笔记

参考资料: 正点原子 LwIP 之 网络接口 netif(ethernetif.c、netif.c)-CSDN博客 IPv4/IPv6、DHCP、网关、路由_ipv6有网关的概念吗-CSDN博客 TCP/IP TCP/IP 协议中文名为传输控制协议/因特网互联协议,又名网络通讯协议&#xf…

MySQL 安装配置 windows

一、下载 去官网MySQL :: MySQL Downloads 下载社区版 然后根据自己的系统选择 直接下载。 二、安装 点击安装程序 这边看样子缺少东西。 去这边下载 Latest supported Visual C Redistributable downloads | Microsoft Learn 然后再一次安装mysql 三、配置 安装完成后&a…

C++重新入门-C++基本语法

目录 1.C程序结构 2.C 中的分号 & 语句块 3.C 标识符 4.C 关键字 5.C 中的空格 1.C程序结构 C程序结构通常包括以下几个主要部分: 注释(Comments): 注释是用来解释代码的文字,对于程序员而言是非常重要的。在…

记录关于node接收上传文件formData踩的坑

1.vue2使用插件formidable实现接收文件,首先接口不可以使用任何中间件,否则form.parse()方法不执行。 const express require(express) const multipart require(connect-multiparty); const testController require(../controller/testController)/…

WordPress SMTP发信避坑指南

前言 Clip_2024-01-31_19-46-18803285 10.5 KB 目前不少主题已经内置了SMTP发信功能,这是因为WordPress自带的mail()函数发信时基本无法发送。 但是在之前(约2021年末)貌似可以通过WordPress自带的函数发信,并且收信方提示由xxx代…

可以将linux docker容器中的文件拿出来吗?

当然可以。在Linux环境下,可以从Docker容器中将文件拿出来(即复制到宿主机上),或者将宿主机的文件复制到Docker容器中。以下是两种常用方法: 方法1:使用 docker cp 命令 直接从命令行拷贝文件或目录&…

MySQL数据库安全加固方案

数据库版本:MySQL8.0.22 按照本安全加固方案进行的数据库加固,一般安全扫描工具扫描出来几乎无漏洞。 1.2 帐号安全 1.2.1 避免不同用户间共享帐号 参考以下步骤。 A. 创建用户。 mysql>CREATE USER ‘用户名’@‘用户 host’ IDENTIFIED BY ‘密码’; 执行以上命令可以…

Request Response 基础篇

Request & Response 在之前的博客中,初最初见到Request和Response对象,是在Servlet的Service方法的参数中,之前隐性地介绍过Request的作用是获取请求数据。通过获取的数据来进行进一步的逻辑处理,然后通过对Response来进行数…

C# Onnx yolov8 水表读数检测

目录 效果 模型信息 项目 代码 训练数据 下载 C# Onnx yolov8 水表读数检测 效果 模型信息 Model Properties ------------------------- date:2024-01-31T10:18:10.141465 author:Ultralytics task:detect license:AGPL-…

c语言---访问越界之后死循环的原因

目录 死循环的概念环境题目代码运行结果对代码发生情况进行解释对i的地址和arr[12]地址一样的解释注意总结 死循环的概念 简单来说,死循环就是指无法靠自身的控制终止循环,在编程中,则是靠自身控制无法终止的程序。即在某一时刻,…

uniapp基于Android平台的校园生活服务交流论坛系统(二手,失物招领 -跑腿) 小程序hbuiderx

作为一款APP的校园论坛系统,面向的是大多数学者,软件的界面设计简洁清晰,用户可轻松掌握使用技巧。在调查之后,获得用户以下需求: (1)用户注册登录后,可进入系统解锁更多功能&#x…

Python中的Statsmodels库实际案例解析1:市场营销效果分析

在现代商业环境中,了解和评估市场营销活动的效果对于企业来说至关重要。它不仅帮助企业优化广告支出,还能够提高市场策略的整体效率。本文将通过一个实际案例,展示如何使用Python中的Statsmodels库来进行市场营销效果的分析。 写在开头 市场营销效果分析对于评估和优化广告…

【从零开始的rust web开发之路 四】rust语言tokio异步使用redis教程

文章目录 前言一、首先引入依赖二、创建redis客户端三、相关操作设置值mset设置多个key值设置含有过期时间的值如果key不存在才设置获取基本类型值删除一个键删除多个键判断键是否存在 如何使用json序列化导入相关依赖代码相关实例 总结 前言 使用rust写web,自然是…

Windows网络常用的11个命令,ping、tracert、arp、ipconfig、netstat、telnet等

1.ping命令 ping是个使用频率极高的实用程序,主要用于确定网络的连通性。ping能够以毫秒为单位显示延迟。如果应答时间短,表示数据报不必通过太多的路由器或网络,连接速度比较快。ping还能显示TTL(Time To Live&#…

AspNet web api 和mvc 过滤器差异

最近在维护老项目。定义个拦截器记录接口日志。但是发现不生效 最后发现因为继承的 ApiController不是Controller 只能用 System.Web.Http下的拦截器生效。所以现在总结归纳一下 Web Api: System.Web.Http.Filters.ActionFilterAttribute 继承该类 Mvc: System.Web.Mvc.Ac…

客户端和服务端的简介

Client 和 Server 客户端(Client) 或称用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在客户机上,需要与服务端互相配合运行。例如:下载 Q…