基于ROS的机械臂手眼标定-基础使用

机械臂手眼标定-基础使用

你好,我是小智,前一段时间折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂。于是想做一个比较简单易懂易用的手眼标定程序。

程序都是Copy的开源代码,所以也开源出来:

开源地址
github: https://github.com/aiotrobot/handeye-calib
gitee: https://gitee.com/ohhuo/handeye-calib

本教程一共包含五个部分:

如果上述程序使用过程中遇到问题,可以参考:

如果你对手眼标定原理感兴趣,可以参考以下文章:

原理介绍

本程序包目前仅针对眼在手上的标定,通过输入两组以上的机械臂姿态信息(x,y,z,rx,ry,rz)和装在机械手上的相机所识别的标志物的姿态信息,经过程序计算可输出,机械臂末端和相机之间的坐标变换矩阵。

机械臂位姿
手眼标定程序
相机中标定板位姿
末端与相机位姿关系

使用指南

1、基础使用

基础使用是在得到多组机械臂位姿与机械臂末端相机位姿之后直接使用本程序进行计算机械臂末端与相机之间的位姿关系。

  • 机械臂位姿可以通过示教器或者SDK进行获取

  • 相机中标定板位姿我们可以通过ArUco或者ArTookit等工具获得,可以参考这里。

我们使用一般读到的(X,Y,Z,RX,RY,RZ)六个数据表示

安装测试
  1. 下载编译

    git clone https://gitee.com/ohhuo/handeye-calib.git
    cd handeye-calib
    catkin_make or catkin build
    
  2. 修改base_hand_on_eye_calib.launch文件中,base_handeye_data参数为从机械臂位姿和标定板位姿所在的配置文件所在的绝对目录,可以使用launch文件的find

    <launch>
      <!-- <arg   name="base_handeye_data"   default="The file path of handeye data." /> -->
      <arg   name="base_handeye_data"   default="$(find handeye-calib)/config/base_hand_on_eye_test_data.csv" />
      <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)" />
      </node>
    </launch>
    
  3. 运行程序

    source devel/setup.bash
    roslaunch handeye-calib base_hand_on_eye_calib.launch
    
  4. 查看结果
    程序会根据配置文件中的坐标进行计算,最终输出如下数据(单位毫米,弧度制):

    数据包含不同算法下计算结果,以及计算结果的标准差和方差等数据。

    algoritihms            x            y           z         rx          ry       rz    distance
    -------------  ---------  -----------  ----------  ---------  ----------  -------  ----------
    Daniilidis     0.0254407  -0.00388589  0.00626286  -1.34278   -0.0699976  91.0318   0.0264868
    Horaud         0.035229   -0.0151477   0.0185151    1.65751    0.943546   89.7013   0.0425833
    Park           0.0352315  -0.0151497   0.0185238    1.65744    0.944041   89.6995   0.04259
    Tsai-Lenz      0.0514184  -0.0291956   0.0236991    0.958984   1.89297    89.4352   0.0637015
    name              x             y            z       rx        ry         rz     distance
    ------  -----------  ------------  -----------  -------  --------  ---------  -----------
    mean    0.0368299    -0.0158447    0.0167502    0.73279  0.927639  89.9669    0.0438404
    var     8.69144e-05   8.05572e-05  4.11328e-05  1.51731  0.481914   0.389663  0.000174689
    std     0.00932279    0.00897536   0.00641349   1.23179  0.6942     0.62423   0.013217
    
    
    Daniilidis              x             y             z           rx           ry           rz     distance
    ------------  -----------  ------------  ------------  -----------  -----------  -----------  -----------
    point0        1.12994      -0.261557     -0.303544     1.56839      0.0486538    3.02918      1.19888
    point1        1.12386      -0.256959     -0.307001     1.55079      0.0350867    3.02347      1.19303
    point2        1.12649      -0.256307     -0.306266     1.55284      0.0356765    3.02361      1.19519
    point3        1.12565      -0.253896     -0.307797     1.555        0.0263091    3.02058      1.19427
    point4        1.13011      -0.250703     -0.3061       1.55657      0.046811     3.01531      1.19737
    mean          1.12721      -0.255884     -0.306142     1.55672      0.0385074    3.02243      1.19575
    var           6.00994e-06   1.28613e-05   2.04871e-06  3.78781e-05  6.80825e-05  2.04147e-05  4.45839e-06
    std           0.00245152    0.00358626    0.00143133   0.00615452   0.00825121   0.00451826   0.00211149
    
    Horaud              x             y             z           rx            ry           rz     distance
    --------  -----------  ------------  ------------  -----------  ------------  -----------  -----------
    point0    1.08483      -0.262978     -0.318057     1.55897      -0.00705108   3.0495       1.16068
    point1    1.08404      -0.255567     -0.323067     1.53871      -0.0174223    3.05         1.15967
    point2    1.09116      -0.257748     -0.322579     1.5435       -0.0165301    3.05181      1.16667
    point3    1.09252      -0.254445     -0.32486      1.54551      -0.0238963    3.05223      1.16785
    point4    1.08396      -0.25189      -0.316132     1.54735      -0.00344446   3.04677      1.15687
    mean      1.0873       -0.256525     -0.320939     1.54681      -0.0136688    3.05006      1.16235
    var       1.39945e-05   1.39716e-05   1.08019e-05  4.53041e-05   5.50417e-05  3.77804e-06  1.77698e-05
    std       0.00374092    0.00373786    0.00328662   0.00673083    0.00741901   0.00194372   0.00421543
    
    Park              x             y             z          rx            ry          rz     distance
    ------  -----------  ------------  ------------  ----------  ------------  ----------  -----------
    point0  1.08483      -0.262981     -0.318067     1.55897     -0.00705403   3.04953     1.16068
    point1  1.08405      -0.255566     -0.323077     1.5387      -0.0174209    3.05003     1.15968
    point2  1.09117      -0.25775      -0.322589     1.5435      -0.0165283    3.05184     1.16668
    point3  1.09253      -0.254446     -0.32487      1.54551     -0.0238923    3.05226     1.16786
    point4  1.08396      -0.251893     -0.316141     1.54735     -0.00344051   3.0468      1.15687
    mean    1.08731      -0.256527     -0.320949     1.54681     -0.0136672    3.05009     1.16236
    var     1.40185e-05   1.39759e-05   1.08042e-05  4.5316e-05   5.50296e-05  3.7782e-06  1.78012e-05
    std     0.00374414    0.00373844    0.00328697   0.00673172   0.0074182    0.00194376  0.00421915
    
    Tsai-Lenz              x             y            z           rx            ry           rz     distance
    -----------  -----------  ------------  -----------  -----------  ------------  -----------  -----------
    point0       1.08118      -0.26596      -0.329331    1.5432        0.00335281   3.05875      1.1611
    point1       1.07916      -0.25742      -0.334988    1.52213      -0.00593988   3.05615      1.15891
    point2       1.08686      -0.260925     -0.335914    1.52765      -0.00494656   3.05948      1.16712
    point3       1.08833      -0.256919     -0.339045    1.52961      -0.0118364    3.05914      1.16851
    point4       1.07685      -0.254707     -0.324463    1.53139       0.00852579   3.05335      1.15315
    mean         1.08247      -0.259186     -0.332748    1.5308       -0.00216884   3.05737      1.16176
    var          1.95647e-05   1.54478e-05   2.7001e-05  4.81123e-05   5.20523e-05  5.42287e-06  3.14201e-05
    std          0.0044232     0.00393036    0.00519625  0.0069363     0.00721473   0.0023287    0.00560536
    
    

标定结果误差测试

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

由于标定过程中标定板是没有发生移动的,所以我们通过机械臂的末端位置、标定结果(手眼矩阵)、标记物在相机中的位姿即可计算出标定板在机器人基坐标系下的位姿,如果标定结果准确该位姿应该是没有变化的。

可以比较最终数据的波动情况来判定标定结果的好坏。

比如:

标定板在机械臂基坐标系的位置1:

Tsai-Lenz               x            y             z            rx            ry           rz     distance
-----------  ------------  -----------  ------------  ------------  ------------  -----------  -----------
point0       -0.45432      0.0488783     0.000316595   0.0420852    -0.0245641    1.52064      0.456941
point1       -0.457722     0.054523      0.0121959    -0.0266793     0.0050922    1.53391      0.461119
point2       -0.457198     0.0535639     0.00246136    0.0252805    -0.0329136    1.51927      0.460331
point3       -0.453302     0.0618366     0.00165179    0.0405718    -0.0472311    1.53318      0.457503
point4       -0.455802     0.0589413     0.000377679   0.0222521    -0.0360589    1.51963      0.459598
point5       -0.455392     0.0615103     0.00584822    0.0365886    -0.033448     1.50684      0.459565
point6       -0.451144     0.0571198     0.00498852    0.0618337    -0.0170326    1.52463      0.454773
point7       -0.452829     0.0588266    -0.000827528   0.0324858    -0.0292652    1.52268      0.456635
point8       -0.454238     0.063634      0.00488078    0.0411648    -0.0373725    1.51611      0.458699
point9       -0.453579     0.0631788     0.00390939    0.0339742    -0.0645821    1.53168      0.457974
point10      -0.454952     0.066057     -0.00144969    0.0399135     0.0029201    1.5053       0.459725
point11      -0.459518     0.0553877    -0.00209946    0.0450864    -0.0147387    1.50702      0.462848
point12      -0.454928     0.0590754    -0.0045181     0.0297534    -0.0296122    1.52043      0.45877
point13      -0.455234     0.0527075    -0.00389213    0.0358822    -0.0260668    1.51244      0.458292
mean         -0.455011     0.0582314     0.0017031     0.0328709    -0.027491     1.51955      0.45877
var           4.21677e-06  2.16484e-05   1.84365e-05   0.000357231   0.000305579  8.29112e-05  3.79771e-06
std           0.00205348   0.00465279    0.00429378    0.0189005     0.0174808    0.00910556   0.00194877

标定板在机械臂基坐标系的位置2:

Tsai-Lenz              x            y            z           rx            ry           rz     distance
-----------  -----------  -----------  -----------  -----------  ------------  -----------  -----------
point0       -0.428394    0.052448     0.0353171    0.0259549    -0.0541487    1.57929      0.433035
point1       -0.427841    0.0448442    0.0345359    0.0454481    -0.0371304    1.55639      0.431569
point2       -0.424889    0.0486165    0.0278942    0.0455775    -0.0438353    1.57073      0.42857
point3       -0.421985    0.0485442    0.0311218    0.0138094    -0.0307286    1.55606      0.425906
point4       -0.428353    0.0454091    0.0326252    0.039192     -0.0492181    1.59177      0.431987
point5       -0.432111    0.0458869    0.0359774    0.04632      -0.0383476    1.55942      0.436028
mean         -0.427262    0.0476248    0.0329119    0.0360503    -0.0422348    1.56894      0.431183
var           9.9672e-06  6.79218e-06  7.71397e-06  0.000148499   6.11379e-05  0.000174299  1.03945e-05
std           0.00315709  0.00260618   0.0027774    0.012186      0.00781908   0.0132022    0.00322405

我们可以观察两次标定结果的距离的标准差,第一次的标准差小于的第二次的标准差,这表示第一次的标定结果好于第二次。

标准差越小,数据越聚集。

如果有不明白和有错误的地方可以留言,下期更新使用Aruco获取相机中标定板的位姿。

作者介绍:

我是小智,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚

初中学习编程,高中开始学习机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)

目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小智,一起交流技术,学习机器人
在这里插入图片描述

  • 17
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
ROS单目手眼标定程序: 1. 安装ros-indigo-opencv3软件包,这个软件包提供了OpenCV的3.0版和各种OpenCV的工具。 2. 确认相机是否能够被ROS识别,并且能够成功的运行和捕捉图像。如果能够正常运行,可以使用usb_cam软件包来进行设置。 $ sudo apt-get install ros-indigo-usb-cam $ rosrun usb_cam usb_cam_node 3. 计算相机的内参矩阵,并从相机标定板上收集特定数量的棋盘格图片,这个步骤需要使用OpenCV。可以使用以下命令进行相机内参矩阵的计算: $ roscore $ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.025 image:=/usb_cam/image_raw camera:=/usb_cam 4. 使用手眼标定工具包,计算手眼关系。该工具包依赖于OpenCV手眼标定算法,可以在openCV的contrib模块中找到。可以使用以下命令安装工具包: $ sudo apt-get install ros-indigo-moveit-ros-robot-interaction ros-indigo-moveit-ros-perception ros-indigo-moveit-ros-planning-interface $ sudo apt-get install ros-indigo-ros-control ros-indigo-ros-controllers $ cd catkin_ws/src/ $ git clone https://github.com/ethz-asl/kalibr.git $ cd kalibr $ git checkout $YOUR_TAG (这里需要输入kalibr的版本号) $ cd ~ && mkdir -p HandEyeCalibration_ws/src && cd HandEyeCalibration_ws/src $ cp -r ~/catkin_ws/src/kalibr/HandEyeCalibration . $ cp -r ~/catkin_ws/src/kalibr/example . $ cd ~/HandEyeCalibration_ws && catkin_make 5. 运行手眼标定程序。确保相机和机器人都启动,并且他们可以正常运行。在命令行中运行: $ cd ~/HandEyeCalibration_ws $ source devel/setup.bash $ roslaunch example kinect_vrep_handeye_calibration.launch 6. 将结果存储在ROS包中。 这里就一一进行说明,可能比较晦涩难懂,但是大致原理就是这样: 首先,需要安装ROS软件,并且准备好相机可以被ROS识别,并能够正常的捕捉图像。然后,使用OpenCV计算相机内参矩阵,并从相机标定板上收集特定数量的棋盘格图片。接下来,使用手眼标定工具包,计算手眼关系,并将结果存储在ROS包中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值