机器人抓取平台搭建记录(六):手眼标定--眼在手上--Kinova Gen2 JACO2 七自由度机械臂--Realsense D435

吐槽一,手眼标定两个多月前就做好了,这篇文章也是两个多月前就写了,但当时不知出了什么差错,在我还没有写完想暂时保存一下草稿的时候,写的内容竟然没了小半。于是就拖到现在,拖到忘记了当时写作的思路,操作细节有些也记不得了。可能内容要缩水一下了。

吐槽二,笔者实际操作过程遇到好多坑。

本文很长,并不是简单表述怎么操作。而且不太适合纯新手。

先来个概述:

笔者先用easy_hand_eye ros包,针对kinova 7自由度这款机器人做了修改,自认为操作没问题,但是结果一直不对。

后来换了aruco_hand_eye ros包才成功。

笔者也都是参照网络上的博客进行的标定,在实际操作中,需要修改一些东西,至于改哪里、怎么改,相信下文的内容有所裨益。


手眼标定原理

读者需要知道手眼标定的原理,本文不做介绍。

机器人手眼标定Ax=xB(eye to hand和eye in hand)及平面九点法标定_yaked19的博客-CSDN博客_手眼标定

机器人手眼标定 - 知乎


知道原理之后,我们应该知道以下几点:

1. 手眼标定结果是一个位姿。【笔者很确定这是准确的描述,很多博客或文章都不够明晰或准确】

眼在手上,就是相机(坐标系)在机器人末端(坐标系)下的位姿;

眼在手外,就是相机(坐标系)在机器人基座(坐标系)下的位姿。

重要的题外话,不看吃大亏:

位姿是位置加姿态,位置就是空间坐标(x,y,z),姿态的表达方式很多:欧拉角,四元数,旋转矩阵。

常用的表示位姿的方法是齐次变换矩阵,通常用字母T表示。

齐次变换矩阵有三种意义(懂了这三种,就超越99%的同龄人了):

1. 位姿表示。表示两个坐标系之间的位姿关系。

2. 坐标系运动(刚体运动)。指明一个坐标系(刚体)如何运动。

3. 坐标变换。指明如何  把一个空间点     在A坐标系下的坐标   转换成    B坐标系下的坐标

举例来说,眼在手上的情况:

我们标定的手眼关系,就是相机坐标系在末端坐标系下的位姿,即意义1。这个位姿我们用T来表示。

同时,这个T又指明了,末端坐标系通过T这个旋转加平移(或平移加旋转)运动,能够和相机坐标系重合,即意义2。所以你会看到很多文章说,标定出来的手眼关系,是机器人末端到相机的变换。

还有,这个T还能把相机坐标系下的点的坐标,变换到末端坐标系下,即意义3。这个坐标变换是我们标定手眼关系的根本目的。所以,在一些文章中你会看到,标定出的手眼关系,能够将相机坐标系下的坐标转换成末端坐标系下的坐标。

\begin{bmatrix} x_e \\ y_e \\ z_e \\ 1 \end{bmatrix} =T\times\begin{bmatrix} x_c \\ y_c \\ z_c \\ 1 \end{bmatrix}

懂的扣个666

【这里我没表述错误,标定出来的手眼关系T,

就是相机坐标系在末端坐标系下的位姿,

就是末端坐标系到相机坐标系的变换矩阵。】

【做个延伸,加深理解】

1. 机器人末端的位姿,就是一般可以直接读出的那个值,是末端坐标系在基座坐标系下的位姿,是基座坐标系到末端坐标系的变换矩阵,能将点在末端坐标系下的坐标转换到基座坐标系下。

2.标定板的位姿,一般是指标定板坐标系在相机坐标系下的位姿,也即相机坐标系到标定板坐标系的变换矩阵。

2. 不管眼在手上还是眼在手外,本质都是求解AX=XB中的X。

【具体怎么求,原理我们甚至都可以不去了解,只需要提供A和B,送到功能包(opencv,matlab,visp等)里自会返回结果。】

A和B只跟以下两个位姿相关 :标定板(坐标系)在相机(坐标系)下的位姿,机器人末端(坐标系)在机器人基座(坐标系)下的位姿。

所以,不管是通过何种途径标定手眼关系,一定是需要准备多组上面讲的两种位姿的。

如何获取这两种位姿呢?前面也简单提供了些信息,末端位姿一般可以直接读出,本质就是机器人正运动学的一个结果;标定板在相机坐标系的位姿,需要搞个标定板,然后搞点代码检测出来,具体怎么搞,暂先不表。

重要的题外话2,机械臂末端:

这是一个困扰我多年的问题,机械臂末端到底在哪里?

我装一个不是原装配套的抓手,抓手抓取中心点几乎不会和末端重合的,那它们之间的位姿关系又是啥样的?不知道抓手和末端的位姿关系,还是不能用来抓取。

在笔者翻阅小量资料后,做出这样的判断:

一般来说,可以把机械臂最后一个link(连杆)看成是一个圆柱,那么末端坐标系的原点一般在这个圆柱的中心线或其延长线上,坐标系z轴一般沿着这条线指向外侧,x轴和y轴的方向也是确定的:正常来讲,把最后一个关节调到0点,然后将抓手以一个合理的姿态安装上去,则x轴和二指抓手的两根手指末端的连接线平行。整个坐标系满足右手定则,据此可判断y轴的方向。

末端坐标系的坐标原点具体在延长线的什么位置,不同的机械臂可能不同。不过Kinova机械臂的末端是在原装抓手的抓取中心,其他机械臂如果有原装抓手,大概也是这样。如果没有抓手,那也不要紧。为什么呢?

如果机械臂没有抓手,或者原装抓手被拆了,我们装上新的抓手,在新的抓手的最佳闭合抓取点定义一个坐标系,定义的该坐标系和末端坐标系只有z方向的一个平移差距。那么其实我们可以试探性地设置几个z值,然后控制机械臂相应运动,大致就能确定一个值z_diff。之后比如我们想让机器人抓手中心运动到(x,y,z)时,实际末端应该到的位置是(x,y,z-z_diff),我们将这个坐标传送给机械臂控制代码即可。


实际标定过程

如前第2点所述,不管是眼在手上还是手外,手眼标定都需要:多组 标定板(坐标系)在相机(坐标系)下的位姿,机器人末端(坐标系)在机器人基座(坐标系)下的位姿【看了前面讲的,应该可以理解这两个位姿的含义。】

因为Kinova支持ROS,realsense D435也支持ROS,我们可以直接利用用于手眼标定ROS库,有两个:easy_hand_eye 和 aruco_hand_eye。

这两个的原理都是一样的:需要提前打印一张aruco码出来;然后写好launch文件,运行,一步步操作即可。需要下载aruco-ros库用于aruco标定板的位姿求解,下载visp-ros库计算手眼关系。

网上教程比较多的是easy_hand_eye,可以搜一下相关博客,看一下具体操作流程和launch文件内容。不过大多是针对kinova 6轴机械臂的,需要对launch文件内容做相应调整(这是难点)核心是坐标系的设置,你只需牢记,需要的两个位姿是“标定板(坐标系)在相机(坐标系)下的位姿,机器人末端(坐标系)在机器人基座(坐标系)下的位姿”。

提供几个链接:

kinova jaco2 和realsense d435i手眼标定-爱代码爱编程

Kinova JACO2机械臂与Azure Kinect手眼标定及坐标点的变换_WCaiL的博客-CSDN博客

Ubuntu18.04 + kinova joca2机械臂 + RealSense D435i深度相机进行eye to hand手眼标定_initative的博客-CSDN博客

但是笔者用easy_hand_aye标定了许多次,自认为操作没有问题,但是结果始终不对。

于是又尝试了aruco_hand_eye,成功。提供一个链接。

kinova_realsense 标定(eye-in-hand)-爱代码爱编程

具体的细节不再陈述,大家可以参照链接,有问题可以留言交流。

  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
### 回答1: Realsense D435i手眼标定是一种将机器人的手和眼睛进行标定方法。这种方法可以帮助机器人更准确地感知周围环境,从而更好地执行任务。在进行手眼标定时,需要使用特定的软件和硬件设备,例如相机和标定板。通过将相机和机器人手臂的位置进行标定,可以使机器人在执行任务时更加精确和可靠。 ### 回答2: Realsense D435i是由英特尔(Intel)公司生产的一款深度相机,可以实现深度测量和RGB图像采集。手眼标定是指在机械臂机器人装置上安装相机等设备,需要通过标定使机械臂和相机之间互相匹配,建立二者之间的坐标转换关系,使得机械臂能够准确地控制相机进行三维视觉测量。realsense d435i手眼标定主要分为以下几个步骤: 1. 硬件安装:将相机安装到机械臂上,并固定好。 2. 数据采集准备:准备好标定板,并将标定板放在机械臂可见的位置上,同时确保相机能够拍摄到标定板。此时,需要确保标定板的大小与相机视野的比例是合适的。 3. 数据采集:启动Realsense相机,并利用相机的软件控制将相机调整至标准的采集模式下。拍摄不同的标定板图像,包括旋转角度、平移等,采集的图像需要包括标定板的角点。 4. 标定数据处理:使用MATLAB、OpenCV等相关软件进行标定数据处理,得到相机和机械臂之间的坐标转换矩阵。该矩阵将被用于实时地处理获取的3D点数据。 5. 校验:对标定结果进行校验,确保精度和可靠性。 以上步骤是realsense d435i手眼标定的基本操作,需要注意的是,标定数据的采集质量和数据处理的准确度对最终结果有较大影响,因此,需要有专业的人员进行操作。在应用过程中,标定可以帮助机械臂机器人装置实现准确的三维视觉测量,提高了机器人操作的效率和可靠性。 ### 回答3: Realsense D435i是一款强大的深度摄像头,通过其高精度的深度感知技术,可以准确捕捉环境中的深度信息和物体位置。对于一个机器人或者自主驾驶车辆等智能设备,深度摄像头是必不可少的感知装置。 在使用Realsense D435i的过程中,手眼标定是一项非常重要的工作。它的作用是对摄像头和机械臂之间的关系进行确定,使系统能够准确地感知并精确地操作物体。 手眼标定的过程分为两步。首先需要确保机械臂和摄像头的初始位置,也就是在机械臂末端装上一个坐标系,并让摄像头正对着这个坐标系,然后记录机械臂的位置和摄像头捕捉到的图像信息。 接下来就是手眼标定的过程。首先需要将机械臂和摄像头放置在一定的距离之内,让它们在不同的位置和姿态下进行多组拍摄。然后,通过标定算法,将摄像头和机械臂的关系进行建模,得到摄像头与机械臂之间的位姿关系。 在手眼标定中,最关键的是标定算法的选择。常用的标定算法包括PnP算法、Quaternion算法等。不同的算法有其优缺点,需要根据实际情况选择合适的算法。 总的来说,手眼标定Realsense D435i使用过程中至关重要的一步。只有通过准确的手眼标定,才能让机械臂和摄像头之间的配合更加紧密,实现精准的定位范畴及控制,为各种智能设备的应用提供更加精确的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值