(二).机器人学基础:目标检测与机械臂各坐标变换总结

前言

在上一小结中介绍了realsense相机标定外参的过程以及遇到的一些问题。本小结将对机器人坐标变换做一个理论上的总结,也是在做这个项目的过程中整理归纳出来的。这部分算是是机器人学的入门部分,基础中的基础,觉得很有必要记录一波。

一、概述

以本项目为例,项目需要实现的功能是realsense相机识别aruco码,并让机械臂TCP末端移动到该位置
在这里插入图片描述

在这个过程中涉及到的坐标变换包括:

aruco码像素坐标----realsense相机坐标系下坐标----法兰坐标系(旧TCP)坐标系下坐标----工具坐标系(新TCP)坐标系下坐标----基坐标系下坐标

涉及到的标定包括:

1.相机内参标定:获得像素坐标到相机坐标的转换关系

2.相机外参标定:获得相机坐标和法兰坐标的转换关系

3.工具标定:获得法兰坐标(旧TCP)和工具坐标(新TCP)的转换关系

以上每一步转换甚至是每一种标定都可以用一个长篇的博客来整理,但是由于是结合项目案例,加上本人数学基础较为薄弱,所以压缩到一个博客的篇幅,一些较为细致的数学推导留作以后深入研究后再继续整理。

二、相机内参与像素坐标转化

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像(像素)中对应点之间的相互关系,并去除图像成像过程中产生的畸变,必须建立相机成像的几何模型,这些几何模型参数就是相机内参。有的相机厂商在出场时已经确定了相机内参,而有的时候这些参数必须通过实验与计算才能得到,这个求解参数(内参、外参、畸变参数)的过程就称之为相机标定(或摄像机标定)。
在这里插入图片描述

在realsense相机中,已经确定好了相机的内参,使用以下两句指令

roslaunch realsense2_camera rs_camera.launch //打开相机节点
rostopic echo /camera/color/camera_info //查看相机内参

便可打印出realsense相机的内参

在这里插入图片描述
而在其他一些情况下,需要通过手动标定来获取相机的内参,这里以《ROS标定海康威视摄像头》为例,参考如下:
https://blog.csdn.net/LX567567/article/details/138201330

三.相机外参与相机坐标转化

在上一篇博客《(一).ubuntu18.04 realsense UR5手眼标定》https://blog.csdn.net/qq_44621315/article/details/142298638
以及附带的链接中,详细介绍了手眼标定的过程。最后标定的结果Result即为realsense相机的外参
在这里插入图片描述

相机外参描述的是相机和机械臂TCP末端的位姿关系。从标定的结果上看,位姿关系包括位置相对关系(x,y,z)和姿态相对关系(x,y,z,w)。通过调用eigen数学库,即可将这些参数转换成一个包含旋转矩阵R和平移向量T的3x4矩阵,这个矩阵即为相机的外参矩阵。

#include <Eigen/Dense>
#include <iostream>

int main() {
    // 给定的平移和旋转
    Eigen::Vector3d translation(1.0, 2.0, 3.0); // (x, y, z)
    Eigen::Quaterniond rotation(0.0, 0.0, 0.0, 1.0); // (x, y, z, w)

    // 创建旋转矩阵
    Eigen::Matrix3d rotationMatrix = rotation.toRotationMatrix();

    // 创建3x4的外参矩阵
    Eigen::Matrix<double, 3, 4> extrinsicMatrix;
    extrinsicMatrix.block<3, 3>(0, 0) = rotationMatrix; // 填充旋转部分
    extrinsicMatrix.col(3) = translation; // 填充平移部分

    // 输出结果
    std::cout << "Extrinsic Matrix:\n" << extrinsicMatrix << std::endl;

    return 0;
}

由第二步获得的相机坐标系下的坐标(x,y,z),左乘相机的外参矩阵,得到的便是物体在机械臂TCP坐标系下的坐标。由于本实验采用的是“手在眼上”的标定策略,因此相机相对于TCP末端的位姿保持不变,故外参矩阵唯一;若采用手在眼外的标定方法,或是相机相对于TCP末端的位姿一直在运动的话,那么外参也会随着相对运动的变化而变化

四.工具标定

一般来说到第三步获得TCP末端坐标系后,便可将TCP末端坐标系转换到基坐标系,来获取机械臂机基坐标系和像素坐标系的相对位置关系了。但在这之前,如果TCP末端安装了其他工具,比如说夹爪,或者是其他工件,那么通过相机外参转换出的TCP坐标系下的坐标便不可直接用于基坐标系的转换
在这里插入图片描述

还是以这张图片为例。通过相机外参转换出的TCP坐标系,严格来说应该是法兰坐标系下的坐标。现在在法兰末端安装了一个夹爪,那么最终需要获得的数据应该是夹爪末端相对于基坐标系的位姿关系,而不是法兰相对于基坐标系的位姿关系。如果直接用法兰相对于基坐标系的位姿关系带入,那么机械臂最终的运动将会是从法兰运动到aruco码的中心,很明显这不符合预期,我们需要的是让夹爪末端运动到aruco码的中心位置,因此就需要工具标定来实现这一过程。
关于工具标定,主要分为四点标定和六点标定。如果夹爪(新TCP末端)相对于法兰(旧TCP末端)末端位姿保持不变,那么一般采用四点标定即可;如果夹爪(新TCP末端)相对于法兰(旧TCP末端)位姿需要发生改变,那么一般需要六点标定。这里主要参考的博客如下:
《机械臂——工具标定》 https://blog.csdn.net/Kalenee/article/details/92591866
《机械臂工具坐标系标定算法(即TCP/TCF标定)》 https://zhuanlan.zhihu.com/p/334379405
最终输出的结果是夹爪(新TCP)相对于法兰(旧TCP)的相对位姿关系,通过这个关系,可以求出像素点在夹爪(新TCP末端)坐标系下的坐标(x,y,z)。这个才是我们后面实际需要用到的值

五.TCP到基坐标转换

最后一步,由工具坐标系转换到机器人基坐标系。这一步同样也是需要求出工具坐标系相对于基座的旋转矩阵,用工具坐标系下的坐标左乘这个旋转矩阵,获得的就是目标像素点在基坐标系下的坐标。

在这里插入图片描述
在UR5示教器中,在特征栏里选定机座选项,读取到的坐标值即为TCP末端相对于基座的坐标。将这一组取值记录,用eigen库进行转换,即可得到TCP相对于基座的旋转矩阵。由于旧的TCP末端为法兰,新的TCP末端已经已经转换到了夹爪(工具)坐标系下,因此还需要在示教器中添加一步设置:
在这里插入图片描述

在安装设置-tcp配置一栏里,根据第四步工具标定获得的工具坐标与法兰坐标的位姿关系,新建新的TCP,然后在这组TCP下读取到的基座标的值就是工具在基坐标系下的坐标。

六.总结

以上就是从目标点像素坐标到机械臂基座标的全部转换,属于在项目铺垫中搭框架总结,实际对每一个环节还并没有做到深入细致的研究,以后有机会再慢慢改进。最后附上网上一张关于这些坐标系转换的图示,感觉归纳的相当到位,后面还得继续上下钻研求索。
在这里插入图片描述

参考链接:
《相机标定的原理及四个坐标系之间的关系》 https://blog.csdn.net/lemonxiaoxiao/article/details/105840663
《相机的内参标定(实现原理+具体操作流程+实验结果)》 https://blog.csdn.net/qq_41361687/article/details/131368918?spm=1001.2014.3001.5502
《视觉SLAM14讲》 第五章
《丹麦优傲工业机器人基本操作教学》 https://www.bilibili.com/video/BV1pb411G7uJ/?p=4&spm_id_from=333.880.my_history.page.click&vd_source=ad29f83e0dfae4ac26429d268494d80b
《【标定】机器人手眼标定-方法及原理》 https://www.bilibili.com/video/BV1Tg411K7RM/?spm_id_from=333.337.search-card.all.click&vd_source=ad29f83e0dfae4ac26429d268494d80b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值