手眼标定(二)

  1. 启动kinnect驱动

 

roslaunch easy_handeye kinect2.launch

 

  1. 启动对Marker标定板的检测,并广播转换关系(/base->/camera_marker)

 

roslaunch aruco_gridboard detection_verp.launch

 

  1. 从话题中获取转换关系的信息(/base->/camera_marker)

 

rosrun tf_precision tf_listener

 

得到的信息里有:marker_to_camera pos:(0.411248,0.531724,-0.0522373)

 

后面的三个数字便是我们得到的maker在机器人坐标系下的pose.

 

上面三个其实可以放在一个package里,建议再复制创建一个aruco_gridboard的package。

 


 

tf_precision package 是我最开始写的进行误差测量的package。
 
在位置一 记录 marker 和 gripper的相对与 机器人底座的位姿, 在位置二记录maker 和 gripper的 相对于机器人底座的位姿, 计算在底座坐标系下,maker两个位置的 R和T, gripper的R和T,比较这两个R 和两个T ,就能比较相机注册的精确度,当时考虑的是刚体的位姿变化应该是相同的(marker和gripper的相对位置关系是不变的),但如果以gripper为中心转动,其实marker和gripper的变化是不一样的,误差校验程序写出来误差一直很大。
 
这里面包括,计算位置转换的代码,发布话题的代码,计算旋转的误差都是可以重用的,值得看看。
 
 

 
  1. 获取到pose后,读入到pose_goto(参考pick_place package) package 的pick_and_place_pick.py

 

position=Point(x=0.385966, y=0.526913, -0.0845007+OFFSET)

 

注意:OFFSET在做精度测试的时候注意设置的大一些,防止针撞歪。

 

rosrun pose_goto pick_and_place_pick

 

这样就可以直观看精度大小了

 

 
 
 

1、相机获取固定标定板(board_1)的顶点pose

 
2、将标定板(board_1)顶点坐标转换为机器人基座坐标系下坐标,移动机器人手臂末端针到达该定点
 
3、获取此时机械臂末端标定板(board_2)的坐标
 
4、将这个手臂端标定板(board_2)坐标P_test,与机器人手臂末端针准确指向标定板(board_1)定点时,手臂端标定板(board_2)坐标P_groudtruth,做比较,得出XYZ轴上的偏移,算出误差。
 
 
X
Y
Z
P_groudtruth
0.198296
0.758359
-0.273707
P_test_1
0.192049
0.758319
-0.272161
P_test_2
0.194142
0.758159
-0.269117
P_test_3
0.193949
0.757703
-0.270348
 
 
 
 
原文地址:https://www.cnblogs.com/BambooEatPanda/p/9774156.html