咱们好,我是小鱼。今日分享一个自己写的开源库(V3.0版本更好用),欢迎咱们围观~

图片

手眼标定

1.概览

  • 假如教程对你有协助,能够start一下~
  • 若需手眼标定小鱼付费-指导请添加V信:AiIotRobot
  • 本程序支持眼在手上和眼在手外两种标定方法
  • 包含根底标定程序包,供给多组机器臂东西坐标和Marker坐标即可完结标定
  • 本程序在ros kinetic melodic noetic渠道测验经过

本程序包经过输入两组以上的机械臂姿势信息和相机所辨认的标志物的姿势信息,经过程序核算可输出,机械臂结尾和相机之间(或机械臂基座和相机)的坐标改换矩阵。

图片

核算图

2.程序下载与编译

2.1下载编译

git clone https://gitee.com/ohhuo/handeye-calib.git

2.2编译

cd handeye-calibcatkin_make or catkin build

3.运用指南

依照数据来历分,本程序可分为以下两种运用方法

  • 根底标定,从文件读取姿势信息进行核算
  • 在线标定,实时从论题读取姿势信息进行核算

3.1 根底标定

根底标定是便利咱们从机械臂示教器直接读取机械臂的位姿进行标定。

3.1.1 运用前预备

  • 预备好多组机械臂位姿数据和相机标定版位姿数据

3.1.2 程序输入与输出

输入

  • 机械臂位姿能够经过示教器或许SDK进行获取
  • 相机中标定板位姿咱们能够经过ArUco或许ArTookit等东西取得,能够参阅这儿二维图画怎么得到三维位姿?

输出

-(眼在手上)机械臂结尾与相机之间的位姿联系

  • (眼在手外)机械臂基座与相机之间的位姿势联系

位姿描绘:咱们运用一般读到的(X,Y,Z,RX,RY,RZ)六个数据表明,若不理解能够学习下小鱼的动手学机器人学课程。

3.1.3 快读体会(眼在手上为比如)

运用小鱼供给好的数据,能够快速体会手眼标定。

参数装备

找到程序中的src/handeye-calib/launch/base/base_hand_on_eye_calib.launch文件,文件中有两个可装备参数

  • base_handeye_data参数为从位姿文件地点的目录,默认config/base_hand_on_eye_test_data.csv
  • base_handeye_result 参数为成果存储文件目录,默以为config/result/base_hand_on_eye_result.txt
<launch>
<!-- 需求输入两个参数 -->    
    <arg   name="base_handeye_data"   default="$(find handeye-calib)/config/base_hand_on_eye_test_data.csv" />    
    <arg   name="base_handeye_result"   default="$(find handeye-calib)/config/result/base_hand_on_eye_result.txt" />
    <node pkg="handeye-calib" type="base_hand_on_eye_calib.py" name="base_hand_on_eye_calib" output="screen" >         
        <param name="base_handeye_data" value="$(arg base_handeye_data)" />         
        <param name="base_handeye_result" value="$(arg base_handeye_result)" />    
    </node>
</launch>

运转程序

source devel/setup.bash
roslaunch handeye-calib base_hand_on_eye_calib.launch

查看成果

程序会根据装备文件中的坐标进行核算,终究输出如下数据。数据包含不同算法下核算成果,以及核算成果的标准差和方差等数据。

眼在手上终究成果应取:end_link->marker之间联系,

图片

根底运用成果

3.2在线标定

在线标定即实时从论题读取姿势信息进行核算

3.2.1 运用前预备

  • 预备好相机驱动(realsense和普通usb相机请参阅4.1)
  • 已完结相机标定(运用ROS标定程序请参阅4.2)
  • 安装完结了aruco程序并完结辨认(运用aruco辨认标定板请参阅4.3)

3.2.2 程序输入与输出

输入

  • 机械臂位姿,供给给从tf主动获取转成论题(装备好link,能够运转moveit直接运转即可)
  • 相机中标定板位姿咱们能够经过ArUco东西取得,能够参阅这儿(运用aruco辨认标定板请参阅4.3)

输出

  • (眼在手上)机械臂结尾与相机之间的位姿联系
  • (眼在手外)机械臂基座与相机之间的位姿势联系

3.2.3 装备相机与Aruco

装备src/handeye-calib/launch/aruco/aruco_start_usb_cam.launch文件

<arg name="camera_info_url"  default="file:///home/ros/.ros/camera_info/head_camera.yaml"/>    <arg name="video_device"     default="/dev/video0"/>
<arg name="image_width"      default="640"/>    
<arg name="image_height"     default="480"/>
<arg name="markerId"        default="0"/>    
<arg name="markerSize"      default="0.107"/>        
<arg name="eye"             default="left"/>    
<arg name="marker_frame"    default="aruco_marker_frame"/>    
<arg name="ref_frame"       default=""/>      
<arg name="corner_refinement" default="LINES" />

主要需修正参数文件如下

  • 相机内参畸变文件,完结相机标定你能够得到一个相机内参装备的yaml文件,请将该文件方位作为参数传入
  • 设备video地址,默认/dev/video0可根据你的个人情况修正
  • markerId,你打印的id编号,在线打印地址可关注公众号鱼香ROS,后台回复标定板获取(打印时请选择origin类型)
  • markerSize,实际打印出来标定版的宽度,单位m

装备完结后即可运转该launch文件

source devel/setup.bash
roslaunch handeye-calib aruco_start_usb_cam.launch

3.2.4 装备机械臂论题数据

机械臂方位和姿势获取方法可经过两种方法,第一种从tf树中获取,第二种经过对应厂家机械臂的SDK获取。

因第二种方法不具备普适性,小鱼仅适配jakaaubo两家机械臂,且现在已不再适配,若需求将本仓库log退至:7f15641

修正文件

  • 眼在手外修正src/handeye-calib/launch/online/online_hand_to_eye_calib.launch
  • 眼在手上修正src/handeye-calib/launch/online/online_hand_on_eye_calib.launch

眼在手上和眼在手外参数共同,故以眼在手上为比如。

    <arg   name="arm_pose_topic"   default="/arm_pose" />
    <arg   name="camera_pose_topic"   default="/aruco_single/pose" />
    <arg   name="base_link"   default="/base_link" />    
    <arg   name="end_link"   default="/link7" />

若运用的是tf方法获取机械臂方位和姿势,仅需求修正以下参数:

  • base_link,机械臂基坐标系称号
  • end_link,机械臂结尾坐标系称号

若非运用tf方法,直接从论题获取机械臂姿势,请修正

  • arm_pose__topic, 机械臂方位和姿势地点论题数据,论题类型为:PoseStamped

3.2.5 运转在线标定

完结上述修正后即可运转在线标定程序。

source devel/setup.bashroslaunch handeye-calib online_hand_to_eye_calib.launch

3.2.6 开始标定

程序运转是会对论题数据进行检测,检测是否收到机械臂数据和标定版位姿数据,假如没有会一直等候。当检测到已经接收到数据之后,就会出现指令提示,指令定义如下:

r  rocord    记载一组手眼数据(当记载的数据大于程序核算所需的数据量之后会进行主动核算)
c  calculate 核算当时数据s  save      保存数据
p  print     打印当时数据到屏幕上(格式为 type,x,y,z,rx,ry,rz 角度制)
q  quit      退出标定程序
[INFO] [1635233747.563774]: 手眼标定需求两个方位和姿势,一个是机械臂结尾的位姿,将从论题/arm_pose中获取 ,另一个相机中标定版的方位姿势将从论题/aruco_single/pose获取,所以请保证两个论题有数据
[INFO] [1635233748.568178]: 等候机械臂方位和姿势论题到位 ...
[INFO] [1635233749.570482]: 等候机械臂方位和姿势论题到位 ...指令: r 记载,c 核算,s  保存,q  退出:

拖拽机械臂或许用moveit移动机械臂,终究要保证相机中仍然能够辨认出标定板,输入r记载一组手眼数据,记载三组以上即可打印位姿数据。

3.2.7 生成成果

完结标定之后输入s即可进行保存,将保存标定成果数据和核算所运用的数据。

眼在手上

如眼在手上可选择end_link->marker某一算法输出成果为终究成果

algoritihms       x         y            z        rx        ry       rz    distance
---------------  --------  --------  -----------  --------  --------  -------  ----------
end_link->marker:Tsai-Lenz   1.95609   0.592593   0.0368967   -5.43362  16.36     88.8982    2.04422
end_link->marker:Park        1.51555   0.460605   0.0220208   -3.97505  12.2275   89.3891    1.58415
end_link->marker:Horaud      1.51539   0.460554   0.0220166   -3.97621  12.2261   89.3891    1.58399
end_link->marker:Daniilidis  0.699832  0.212166  -0.00299391  -2.42947   7.28523  89.6328    0.731292

眼在手外

如眼在手外可选取成果中base_link->camera数据的某一算法的平均值作为终究成果

Tsai-Lenz   x             y             z           rx            ry           rz         距离
------------------  -----------  ------------  ------------  -----------  ------------  -------
base_link->camera:0  1.07708      -0.255704     -0.282747     1.58671      -0.00409023   2.99378      1.14256
base_link->camera1  1.07462      -0.258693     -0.281246     1.59261      -0.0124258    2.99644      1.14054
base_link->camera2  1.07995      -0.254922     -0.2831       1.58326       0.0035099    2.99478      1.14517
mean                1.07722      -0.25644      -0.282364     1.58752      -0.00433537   2.995        1.14276
var                 4.72969e-06   2.64052e-06   6.46241e-07  1.49208e-05   4.23543e-05  1.20167e-06  3.58829e-06
std                 0.00217479    0.00162497    0.000803891  0.00386275    0.00650802   0.00109621   0.00189428
Park         x             y             z           rx            ry           rz         距离

标定成果正确与否的测验

观察数据核算成果的标准差巨细。每次核算之后,程序都会输出不同算法下标定成果点的平均数、方差、标准差三项数值。

眼在手上标定成果验证:

由于标定过程中标定板是没有发生移动的,所以咱们经过机械臂的结尾方位、标定成果(手眼矩阵)、符号物在相机中的位姿即可核算出标定板在机器人基坐标系下的位姿,假如标定成果准确该位姿应该是没有变化的。所以能够比较终究数据的动摇情况来断定标定成果的好坏。

原文链接:
mp.weixin.qq.com/s/CwAgRQ0CL…