测试设备:双臂复合升降机器人、视觉标定板
环境:Windows系统、 D435手眼标定教程包
一、手眼标定介绍
1什么是手眼标定
手眼标定是为了得到相机坐标系与机器人坐标系之间的位姿关系,包括两种:eye in hand (相机安装在机械臂末端)和eye to hand (相机安装在机械臂外侧)。
2 手眼标定的目的
在机械臂抓取时,往往需要知道抓取目标与机械臂之间的位置关系,使用相机获得抓取目标的位置是有效的方法。
但是单纯使用相机得到的目标点位置是在相机坐标系下的位置,而抓取任务要得到的是目标点与机械臂之间的位置,因此这中间需要通过一些方法获得相机与机械臂之间的位置关系,从而实现目标点从相机坐标系到机械臂坐标系的转换。手眼标定正是用来获得相机与机械臂之间位置关系的一种方法。
简单讲,已知目标点A与相机B之间的坐标关系(相机获得),想要得到机械臂C与目标点A之间的坐标关系,就必须得到相机B与机械臂C之间的位置关系。
3手眼标定分类
Eye in hand
这种方式的手眼标定是通过两次运动解得相机坐标系(Camera)与机械臂末端坐标系(End)之间的坐标关系。
注意:
1、机械臂末端(End)在机器人(Base)坐标系下的坐标是可以通过机械臂各个关节的角度值直接解算出来的。
2、标定是通过两次改变机械臂末端(相机)位置来解算的,这整个过程中标定板(Object)相对是机器人(Base)的位置是固定不变的。(实际上,并不需要知道标定板与机器人(Base)的具体位置关系)。
Eye to hand
这种方法的手眼标定是通过两次运动解得相机坐标系(Camera)与机器人坐标系(Base)之间的坐标关系。
注意:
1、机械臂末端(End)在机器人(Base)坐标系下的坐标是可以通过机械臂各个关节的角度值直接解算出来的。
2、标定是通过两次改变机械臂末端(标定板)位置来解算的,这整个过程中标定板(Object)相对机械臂末端(End)的位置是固定不变的。(实际上,并不需要知道标定板与机械臂末端(End)的具体位置关系)。
二、双臂复合设备的眼在手外的标定及其流程。
1.找到并解压D435手眼标定软件包
- 找到眼在手外的标定程序
文件夹内包含了眼在手上、眼在手外、以及最后的验证成果,也分为了不同的环境架构,包括Windows系统和ARM架构。
2. 修改程序内相关的配置
2.1标定板配置的角点数量
根据您现场实际购买的标定板的角点数量和长度去修改
2.2 图片保存路径以及机械臂姿态数据存储路径
注意:路径中不能存在中文字符。
2.3 因为头部角度是可以变化的,且分为两种,以下是以舵机为驱动的举例,修改舵机角度。
2.3.1
新建终端-roscore
新建终端-rosrun servo_control servo_controller
新建终端-rostopic pub -1 /servo_control/
分别设置舵机1:角度500; 舵机2:角度:500
这样头部的相机就会是一个向下的视角,可以通过realsense-viewer去查看画面。
2.3.2 如果头部是关节电机,直接打开示教器,选择拓展关节,将角度设置为25°
在标定时,拍摄的照片尽量将角度和位姿变化大一点,在相机画面内,尽量降低灯光对标定板的影响,不要有过曝的情况。
后面就是正常的拍摄图片和计算。
以下是经过测试得出的一个标定结果:
# 相机坐标系到机械臂基坐标系的旋转矩阵和平移向量
rotation_matrix = np.array([[0.01155362 , 0.84610748 ,0.53288708],
[-0.4203419, -0.47943922, 0.77035753],
[0.90729224, -0.23289519, 0.35011516]])
translation_vector = np.array([-0.1165359, 0.14733703, -0.02538692])
以上是双臂机器人右手手眼标定出来的结果,可以参考。