PROBOT Anno手眼标定步骤(easy_handeye-眼在外)
笔记本:
创建时间:
作者:
一、总体流程
六轴步进机械臂
2019/4/9 22:21
古月,TSijia
1. 首先需要把机械臂跟摄像头跑起来;
更新时间:
2019/4/10 9:45
2. 然后, 用aruco_ros识别末端上的标志物, 得到camera_link到marker_link的转换;
3. 之后按照GUI控制机械臂在相机视野内产生17个姿态, 每次都把样本记录下来,这17个姿态是第一步计算好的, 在开始姿态前后左右上下8
个位置各2个角度.
4. 最后点击求解, easy_handeye会调用visp的代码得到标定结果;
5. 然后点save, 标定结果会被保存在~/.ros/easy_handeye/---.yam;
6. 之后就可以关掉标定程序,再跑publish.launch即可发布base_link到camera_link的转换。
二、依赖功能包
使用手眼标定的ROS库easy_handeye前期准备
软硬件依赖
硬件:
anno机械臂
USB摄像头
软件
ros-kinetic-visp包
vision_visp包
aruco_ros包
easy_handeye包
四、相机位置
三、手眼标定步骤(内参)
在手眼标定的过程中会使用内参标定完成后生成的head_camera.yaml文件,如果不先进行内参标定,会报错,一个比较好的单目相机标定过程
可以参考。
四、手眼标定前准备(外参)
1. 为了同时启动机器人、摄像头以及标定程序来进行标定任务,需要写一个launch文件,可以在easy_handeye作者给的样例文件上进行修
改,样例文件路径easy_handeye/docs/example_launch/ur5_kinect_calibration.launch
修改配置文件1,两个跟marker尺寸和ID有关的参数是按照你在下面网站上的参数修改的:
修改配置文件2:
修改配置文件3:aruco_ros是用来识别aruco这种图案的. 识别需要知道aruco的ID跟边长. 有个网站(本例中使用的标定板该网站参数为
Dictionary:Original ArUco;ID:100;size:100)可以生成这种图案.aruco_ros需要配置两个方面的参数. 首先是相机, 需要camera_info和
image的topic, 还有image所在的frame. 还有一个是tf的关系,从reference_frame到marker_frame, 如果识别出marker就发布. 如果没有
特殊要求, 一般的reference_frame就配成相机的frame:
修改配置文件4:Robot部分根据所用的机械臂进行具体的修改
修改配置文件5:这一部分主要需要注意4个frame: tracking_base_frame就是相机的frame, tracking_marker_frame是标志物的frame,
这两者之间的关系由aruco_ros发布, 所以要对上; robot_base_frame就是机械臂底座, robot_effector_frame是末端, 这两个跟机械臂发
布的要对上. 这几个frame之间变化的都能被观测到, 所以可以通过几个样本得出不变的相机到底座之间的关系. 注意namespace_prefix要
跟publish.launch里的对上, 因为保存标定结果的时候文件名按照这个取的
2. 修改完成之后运行改launch文件,如果成功的话,会看到三个窗口跳出来
窗口1
窗口2
窗口3
3. 还需要在标定窗口1中订阅相机拍到的图片/aruco_tracker/result进行显示,必须步骤,显示后的效果如下
五、手眼标定步骤(外参)
1. 将标定板固定在机械臂上面,移动到相机视野的中心位置
检查图3中是否显示0/17,如果不是就按check starting pose。
2. 在图3界面点击next pose,再点击plan,出现绿色就当前位姿可以达到,最后点击execute;如果出现红色则表示当前点不可用,继续点击next pose,重
3. 返回图2界面点击take sample。重复这两个操作直到17个点全部采集完;
4. 返回图2界面,点击compute,得到一组7个解的变换矩阵(四元数表示),点save
5. 上面计算的结果保存在~/.ros/easy_handeye/xxx.yaml这个文件里面,接下来我们发布变换,如果使用easy_handey自带的publish.launch一般是会报错
因为我们在上面的calibrate.launch文件中对保存四元数的yaml文件进行了自定义。这里我们再创建一个publish.launch文件,内容如下:
5. 运行publish.launch,将结果发布出去,可通过tf_echo命令查看