最近发现老是有人通过爬虫把文章爬去他们网站,因此先发一遍这个草稿,让他们先爬。爬完我再慢慢修改
0.前期准备
0.1机械手要先映射(标定好)世界坐标系与用户坐标系
这个基本应该可以通过机械手自带的坐标系建立完成
一般机械手需要处理三种坐标:世界坐标系(基座标系)、工具坐标系、用户坐标系,分别对应下图的Base、Tool、Plane_1坐标系。
一般来说,世界坐标系的原点在基座底部,工具坐标系的原点在机械手末端(工具末端),用户坐标系的原点在用户设置的位置。
世界坐标系是与机械手结构有关系的,一般来说厂家已经设定好、写死了的,用示教器或者示教软件无法修改。
工具坐标系乍一看没啥用,但是在一些特殊情形下会很方便(比如让机械手绕着工具末端旋转,例如【工业机器人舞刀,这运动精确度太精准了!】里面演示的两把剑末端相对旋转的运动)。
用户坐标系需要用户自行设定,设定的方法不同的厂家不一样。下图的是大族机械手的三点设定方式:点位1为原点、点位二为x正方向、点位三为y轴方向,z轴可根据左手或者右手定则得到。
理论上,每当更换机械手末端的工具(夹具、钻头、焊接头),都需要重新设置一次工具坐标系?(要提前设好,然后同步做坐标系切换就行)
0.2.相机的标定
相机的标定主要目的是消除相机的镜头畸变,比如鱼眼镜头。这里用到的棋盘格捕捉到的特征点需要用来计算透视变换矩阵,此时需要拍摄多张不同角度、不同位置的棋盘格图像进行识别计算。
相机标定完之后,就可以保证图像采集的图像是符合常规透视的(横平竖直)。
此时再使用合适的标定板来进行控件坐标的识别。
由于我目前选用的是AstraPro深度相机,它内部已经标定过了,因此我就可以省略相机标定这一步。
普通相机的标定可以查看【计算机视觉 相机标定】
1.坐标的标定
手眼标定也分为二维(平面)标定、三维(空间)标定。
1.1.二维标定(平面标定)
二维标定就比较简单。摄像头是垂直拍摄工作平面,只需要用棋盘格一次拍照标定就够了,这里的棋盘格主要目的是提供便于捕捉到的特征点。
特征点的实际坐标是已知的(通过设置每个单元格的实际物理尺寸可以计算得到),而通过这些特征点可以建立用户坐标系,然后计算两个坐标系(用户坐标系、图像坐标系)之间的变换矩阵(旋转、平移、缩放),然后就可以确定相机采集到的图像上的一个坐标点映射到用户坐标系的实际坐标点。
如下图所示,该标定板与作业平面重合,且与平面的XY轴同向且平行(也就是重合),原点可根据实际情况选择重合或者不重合。换言之,此标定板确定了用户坐标系。
标定板的坐标系与用户坐标系重合(物理上)、我们建立了标定板坐标系与图像坐标系的映射(计算上),基于上面两个成立的前提,我们也就建立了图像坐标与用户坐标系的对应。比如图像坐标(100像素,200像素)对应实际坐标的(95mm,23mm)。
1.2.三维标定(空间标定)
未完待续。
参考
【机器人抓取与操作简介】
【ROS_Noetic使用handeye-calib进行机械臂手眼标定】
【ROS机械臂手眼标定 Ubuntu20.04+ROS Noetic+easy_handeye+Franka+RealSense D435】
【计算机视觉 相机标定】
【工业机器人常用的六种坐标系】