手眼标定的两种方式

手眼标定的两种方式最近在学习手眼标定,做下笔记,和大家分享下学习经历:一手眼标定的两种情形首先讲一下在工业应用中,手和眼(摄像机)的两种位置关系,第一种是将摄像机(眼)固定在机械手(手)上面,眼随手移动;第二种是摄像机(眼)和机械手(手)分离,眼的位置相对于手是固定的,下面用网上的两张图来说明下:第一种情况:相机移动第二种情况:相机固定从上面两副示意图可以看出,第一种情况中我们

大家好,又见面了,我是你们的朋友全栈君。

最近在学习手眼标定,做下笔记,和大家分享下学习经历:

一 手眼标定的两种情形

首先讲一下在工业应用中,手和眼(摄像机)的两种位置关系,第一种是将摄像机(眼)固定在机械手(手)上面,眼随手移动;第二种是摄像机(眼)和机械手(手)分离,眼的位置相对于手是固定的,下面用网上的两张图来说明下:

手眼标定的两种方式手眼标定的两种方式

第一种情况:相机移动

手眼标定的两种方式手眼标定的两种方式

第二种情况:相机固定

从上面两副示意图可以看出,第一种情况中我们要求的是相机坐标系和机械手坐标系的转化关系;第二种情况中要求的是相机坐标系和基础坐标系的关系;下面分别阐述其求解过程。

二 相机移动时,标定求解过程

在推导过程中,我们会用到四个坐标系,分别是基础坐标系,机械手坐标系,相机坐标系,以及标定物坐标系,下面先给出示意图:

手眼标定的两种方式手眼标定的两种方式

坐标系示意图

其中baseHcal表示基础坐标系到标定物坐标系的转化关系,包括旋转矩阵和平移向量;camHtool表示相机坐标系到机械手坐标系的转化关系;这两个转化关系在机械手移动过程中是不变的;camHcal可以由相机标定求出;baseHtool可以由机器人系统中得出。

接下来控制机器手从位置 1 移动到位置 2:

base = baseHtool (1)* tool(1)

tool(1) = inv(camHtool)*cam(1)

cam(1) = camHcal(1)*obj

联合上面三个公式:

base = baseHtool (1)* inv(camHtool)* camHcal(1)*obj

移动到机械手臂到位置2后:

base = baseHtool (2)* inv(camHtool)* camHcal(2)*obj

因为base和obj是固定的所以:

baseHtool (1)* inv(camHtool)* camHcal(1)=baseHtool (2)* inv(camHtool)* camHcal(2)

其中只有camHtool是未知量,具体求解过程将放在下篇文章。

三 相机固定时,标定求解过程

手眼标定的两种方式

手眼标定的两种方式

坐标系示意图


对于固定相机的情况,还是控制机械手从位置1移动到位置2:


obj(1) = inv(camHcal(1)) *cam
cam = camHbase *base
base = baseHtool(1) * tool(1)
合并上面三个公式:
obj(1) = inv(camHcal(1))  * camHbase* baseHtool(1) *tool(1)

移动到位置2后:
obj(2) = inv(camHcal(2))  * camHbase* baseHtool(2) *tool(2)

因为obj和tool的相对位置是不变的,所以不管怎么移动:
inv(camHcal(1))  * camHbase* baseHtool(1)= inv(camHcal(2))  * camHbase* baseHtool(2)


其中变量只有camHbase,也就是我们要求的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131847.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ideavim怎么用_intellij idea使用教程2020

    ideavim怎么用_intellij idea使用教程2020IdeaVim-常用操作IdeaVim简介IdeaVim是IntelliJIDEA的一款插件,他提高了我们写代码的速度,对代码的跳转,查找也很友好。安装之后它在Tools>VimEmulator具体操作i模式i模式即为编辑模式,按下字母i开启就可以打字。Esc从i模式切换为Vim,按下键盘的Esc键切

    2022年9月30日
  • vue怎么实现分页_vue实现表格

    vue怎么实现分页_vue实现表格今天有人问我怎么用vue实现分页功能,我开始觉得这不是后端的事吗?怎么我们前端也要干了,而且现在怎么多UI库,比如Element-ui,我觉得这是个很好的前端UI库啊。不过既然有人问了,我就写写吧。这是我的HTML代码<template><ul><!–上一页按钮–><li><buttonclass=”el-icon-arrow-left”@click=”getPageGo(-1)”:disabled=”isAc.

    2022年10月1日
  • 原创 子网划分的讲解 例题加思路

    原创 子网划分的讲解 例题加思路转载于:https://www.cnblogs.com/dsab/p/7425630.html

    2022年6月27日
  • js获取当前时间(特定的时间格式)[通俗易懂]

    js获取当前时间(特定的时间格式)[通俗易懂]在一个程序中需要对用户的操作进行记录,记录其操作信息,需要对操作进行归类,有时候用户的操作是重复性的操作,那对于重复的操作,也是要区分的,方便查找,可以通过设置类似GUID的唯一值,也可以获取当前的操作时间来区分,因为时间也是唯一的,在任何时候时间都不会出现重复,当然可以获取就可以设置,所以您也可以人为的去设置/修改操作时间。但是这样不好。使用javascript获取时间:在javas…

    2022年9月15日
  • vulnhub~汇总

    vulnhub~汇总https://pjchender.github.io/2019/04/26/is-webgoat-%E5%8F%83%E8%80%83%E8%A7%A3%E7%AD%94-solution/<

    2022年8月6日
  • pandas函数手册_函数str

    pandas函数手册_函数str一.假设有数据集dfdf.isnull()返回DateFrame,元素为空或者NA就显示True,否则就是False二.判断有空值的列df.isnull().any()当列有为空或者NA的元素,就为True,否则False三.显示出有空值列的列名的列表,iris.columns[iris.isnull().any()].tolist()四.删除全部是空值的行iris.dropna(axis=0,how=’all’,inplace=True)五。删除全部是空值的列iri

    2022年10月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号