常见机械手
并联detal机械手(又称蜘蛛机械手),其电机一般和减速机连接在一起,减速机就是增加力矩。速度快
六轴机械手(串联)
水平摆动(四轴)
三轴,配合运动板卡控制
使用运动控制器,在PC实现运动控制
主板带PCI插槽的电脑–>运动控制卡–>IO板–>A–>继电器–>感应器和指示灯
A–>按钮
A–>电磁阀–>气缸
单相机标定
相机畸变枕型畸变、桶型畸变等,是由于镜头本身内部成像原因导致的,矫正只需要内参,所以不需要外参(姿态参数)
gen_catlab 创建标定板
标定助手(加载描述文件,选模型,输入单个像元的宽和高,焦距(相机厂家得到)->进行标定,实时采集多张标定板图像(尽量使之占视野2/3和放置各个角度拍),设参考位姿态,标定->得到摄像机内外参数 ->代码生成
校正相机的镜像畸变
Change_radial_distortion_cam_par(‘adaptive’,CameraParameters,0,CamParamChange)
cameraParameters:相机内参数据
gen_readial_distortion_map(Map,cameraParameters,CamParamChange,’bilinear’) //形成矫正映射
map_image(image,Map,) //将映射作用在图像上
手眼标定
摄像机与机械手之间坐标转换关系
正解运算,反解运算
与单相机标定区分开
1.机械手基本坐标系,底座
2.机械手末端工具坐标系
3.相机坐标系 图像坐标系
4.工件坐标系
两种标定法 1.九点标定 2.标定板
robat初始化----》robat走三点----》记录三组图像,robat坐标------》线性化计算缩放,旋转,平移矩阵----》坐标转换映射-----》robat移载完成
九点标定代码
1.标定
…
area_center(SortedRegions,Area,Row,Column) //图像坐标
Column1 := [375,325,…] //机械手坐标
Row1 := [55,50,45,…]
vector_to_hom_mat2d(Row,Column,Row1,Column1,HomMat2D)
2.求解
affine_trans_point_2d(HomMat2D,Row2,Column2,Qx,Qy) //点的放射变换
标定板
eye-to-hand
eye-in-hand
总结
准备阶段:
1.首先要获取相机的初始内参(焦距,畸变系数,单个像素的宽,单个像素高,图像坐标的中心值横坐标,图像坐标中心值的纵坐标,图像宽度,图像高度)
2.根据标定板的大小利用gen_catlab算子,生成描述文件(保存到指定位置)
3.拍摄14-20组标定板图像(eye-in-hand),并准确记录每组图像在拍摄时TOOL_IN_BASE位姿(此位姿从机器人中读取)
备注:在获取标定图像时,标定板不动,机器人末端的摆动要尽可能的全面,绕各个轴的旋转角度要尽量的大。标定板要出现在相机视野的各个角落。理论上图像越多,角度越全面,标定精度越高。
标定阶段:
1.读取相机初始内参,设置描述文件路径
2.创建标定数据模型create_calib_data
3.设置相机的参数类型 set_calib_data_cam_parm
4.设置标定板的数据类型(此处用到了描述文件)
5.设置标定模式set_calib_data(我使用的是非线性的方法)
6.循环读取图像将标定板的位姿信息和机器人末端在基坐标系位姿(TOOL_IN_BASE)保存到标定数据模型中
7.进行手眼标定calibrate_hand_eye
备注:手眼标定最终获得的是相机与机器人末端的位姿关系(Camera_In_Tool)。在循环输入TOOL_IN_BASE时其输入格式一定要是YZX的(至少我试过XYZ,XZY是不行的),到此标定就结束了。
如果是使用该标定结果的话,要先选择参考的平面进行一步标定获得参考的obj_in_cam,然后再计算抓取物体点与obj_in_cam关系。所用到的方程如下: