机械臂手眼标定-基础使用
你好,我是小智,前一段时间折腾了一段时间的机械臂的手眼标定,相关资料挺多的,但使用起来都比较复杂,新手一般比较难搞懂。于是想做一个比较简单易懂易用的手眼标定程序。
程序都是Copy的开源代码,所以也开源出来:
开源地址 github: https://github.com/aiotrobot/handeye-calib gitee: https://gitee.com/ohhuo/handeye-calib
本教程一共包含五个部分:
- 手眼标定-基础使用
- 手眼标定-JAKA机械臂
- 手眼标定-AUBO机械臂
- 手眼标定-Aruco使用与相机标定
- 手眼标定-注意事项
如果上述程序使用过程中遇到问题,可以参考:
如果你对手眼标定原理感兴趣,可以参考以下文章:
- 机器人手眼标定原理介绍(含详细推导过程)使用Tsai-Lenz算法
- 手眼标定算法TSAI_LENZ,眼在手外python代码实现
- 手眼标定算法Tsai-Lenz代码实现(Python、C++、Matlab)
原理介绍
本程序包目前仅针对眼在手上的标定,通过输入两组以上的机械臂姿态信息(x,y,z,rx,ry,rz)和装在机械手上的相机所识别的标志物的姿态信息,经过程序计算可输出,机械臂末端和相机之间的坐标变换矩阵。
#mermaid-svg-6B9Lph6WbNEuKRAC .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .label text{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .node rect,#mermaid-svg-6B9Lph6WbNEuKRAC .node circle,#mermaid-svg-6B9Lph6WbNEuKRAC .node ellipse,#mermaid-svg-6B9Lph6WbNEuKRAC .node polygon,#mermaid-svg-6B9Lph6WbNEuKRAC .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-6B9Lph6WbNEuKRAC .node .label{text-align:center;fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .node.clickable{cursor:pointer}#mermaid-svg-6B9Lph6WbNEuKRAC .arrowheadPath{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-6B9Lph6WbNEuKRAC .flowchart-link{stroke:#333;fill:none}#mermaid-svg-6B9Lph6WbNEuKRAC .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-6B9Lph6WbNEuKRAC .edgeLabel rect{opacity:0.9}#mermaid-svg-6B9Lph6WbNEuKRAC .edgeLabel span{color:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-6B9Lph6WbNEuKRAC .cluster text{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-6B9Lph6WbNEuKRAC .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-6B9Lph6WbNEuKRAC text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-6B9Lph6WbNEuKRAC .actor-line{stroke:grey}#mermaid-svg-6B9Lph6WbNEuKRAC .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-6B9Lph6WbNEuKRAC #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .sequenceNumber{fill:#fff}#mermaid-svg-6B9Lph6WbNEuKRAC #sequencenumber{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC #crosshead path{fill:#333;stroke:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .messageText{fill:#333;stroke:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-6B9Lph6WbNEuKRAC .labelText,#mermaid-svg-6B9Lph6WbNEuKRAC .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-6B9Lph6WbNEuKRAC .loopText,#mermaid-svg-6B9Lph6WbNEuKRAC .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-6B9Lph6WbNEuKRAC .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-6B9Lph6WbNEuKRAC .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-6B9Lph6WbNEuKRAC .noteText,#mermaid-svg-6B9Lph6WbNEuKRAC .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-6B9Lph6WbNEuKRAC .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-6B9Lph6WbNEuKRAC .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-6B9Lph6WbNEuKRAC .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-6B9Lph6WbNEuKRAC .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .section{stroke:none;opacity:0.2}#mermaid-svg-6B9Lph6WbNEuKRAC .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-6B9Lph6WbNEuKRAC .section2{fill:#fff400}#mermaid-svg-6B9Lph6WbNEuKRAC .section1,#mermaid-svg-6B9Lph6WbNEuKRAC .section3{fill:#fff;opacity:0.2}#mermaid-svg-6B9Lph6WbNEuKRAC .sectionTitle0{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .sectionTitle1{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .sectionTitle2{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .sectionTitle3{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-6B9Lph6WbNEuKRAC .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .grid path{stroke-width:0}#mermaid-svg-6B9Lph6WbNEuKRAC .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-6B9Lph6WbNEuKRAC .task{stroke-width:2}#mermaid-svg-6B9Lph6WbNEuKRAC .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .taskText:not([font-size]){font-size:11px}#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-6B9Lph6WbNEuKRAC .task.clickable{cursor:pointer}#mermaid-svg-6B9Lph6WbNEuKRAC .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-6B9Lph6WbNEuKRAC .taskText0,#mermaid-svg-6B9Lph6WbNEuKRAC .taskText1,#mermaid-svg-6B9Lph6WbNEuKRAC .taskText2,#mermaid-svg-6B9Lph6WbNEuKRAC .taskText3{fill:#fff}#mermaid-svg-6B9Lph6WbNEuKRAC .task0,#mermaid-svg-6B9Lph6WbNEuKRAC .task1,#mermaid-svg-6B9Lph6WbNEuKRAC .task2,#mermaid-svg-6B9Lph6WbNEuKRAC .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutside0,#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutside2{fill:#000}#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutside1,#mermaid-svg-6B9Lph6WbNEuKRAC .taskTextOutside3{fill:#000}#mermaid-svg-6B9Lph6WbNEuKRAC .active0,#mermaid-svg-6B9Lph6WbNEuKRAC .active1,#mermaid-svg-6B9Lph6WbNEuKRAC .active2,#mermaid-svg-6B9Lph6WbNEuKRAC .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-6B9Lph6WbNEuKRAC .activeText0,#mermaid-svg-6B9Lph6WbNEuKRAC .activeText1,#mermaid-svg-6B9Lph6WbNEuKRAC .activeText2,#mermaid-svg-6B9Lph6WbNEuKRAC .activeText3{fill:#000 !important}#mermaid-svg-6B9Lph6WbNEuKRAC .done0,#mermaid-svg-6B9Lph6WbNEuKRAC .done1,#mermaid-svg-6B9Lph6WbNEuKRAC .done2,#mermaid-svg-6B9Lph6WbNEuKRAC .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-6B9Lph6WbNEuKRAC .doneText0,#mermaid-svg-6B9Lph6WbNEuKRAC .doneText1,#mermaid-svg-6B9Lph6WbNEuKRAC .doneText2,#mermaid-svg-6B9Lph6WbNEuKRAC .doneText3{fill:#000 !important}#mermaid-svg-6B9Lph6WbNEuKRAC .crit0,#mermaid-svg-6B9Lph6WbNEuKRAC .crit1,#mermaid-svg-6B9Lph6WbNEuKRAC .crit2,#mermaid-svg-6B9Lph6WbNEuKRAC .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-6B9Lph6WbNEuKRAC .activeCrit0,#mermaid-svg-6B9Lph6WbNEuKRAC .activeCrit1,#mermaid-svg-6B9Lph6WbNEuKRAC .activeCrit2,#mermaid-svg-6B9Lph6WbNEuKRAC .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-6B9Lph6WbNEuKRAC .doneCrit0,#mermaid-svg-6B9Lph6WbNEuKRAC .doneCrit1,#mermaid-svg-6B9Lph6WbNEuKRAC .doneCrit2,#mermaid-svg-6B9Lph6WbNEuKRAC .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-6B9Lph6WbNEuKRAC .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-6B9Lph6WbNEuKRAC .milestoneText{font-style:italic}#mermaid-svg-6B9Lph6WbNEuKRAC .doneCritText0,#mermaid-svg-6B9Lph6WbNEuKRAC .doneCritText1,#mermaid-svg-6B9Lph6WbNEuKRAC .doneCritText2,#mermaid-svg-6B9Lph6WbNEuKRAC .doneCritText3{fill:#000 !important}#mermaid-svg-6B9Lph6WbNEuKRAC .activeCritText0,#mermaid-svg-6B9Lph6WbNEuKRAC .activeCritText1,#mermaid-svg-6B9Lph6WbNEuKRAC .activeCritText2,#mermaid-svg-6B9Lph6WbNEuKRAC .activeCritText3{fill:#000 !important}#mermaid-svg-6B9Lph6WbNEuKRAC .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-6B9Lph6WbNEuKRAC g.classGroup text .title{font-weight:bolder}#mermaid-svg-6B9Lph6WbNEuKRAC g.clickable{cursor:pointer}#mermaid-svg-6B9Lph6WbNEuKRAC g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-6B9Lph6WbNEuKRAC g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-6B9Lph6WbNEuKRAC .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-6B9Lph6WbNEuKRAC .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-6B9Lph6WbNEuKRAC .dashed-line{stroke-dasharray:3}#mermaid-svg-6B9Lph6WbNEuKRAC #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC .commit-id,#mermaid-svg-6B9Lph6WbNEuKRAC .commit-msg,#mermaid-svg-6B9Lph6WbNEuKRAC .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-6B9Lph6WbNEuKRAC g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-6B9Lph6WbNEuKRAC g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-6B9Lph6WbNEuKRAC g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-6B9Lph6WbNEuKRAC .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-6B9Lph6WbNEuKRAC .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-6B9Lph6WbNEuKRAC .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-6B9Lph6WbNEuKRAC .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-6B9Lph6WbNEuKRAC .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-6B9Lph6WbNEuKRAC .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-6B9Lph6WbNEuKRAC .edgeLabel text{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-6B9Lph6WbNEuKRAC .node circle.state-start{fill:black;stroke:black}#mermaid-svg-6B9Lph6WbNEuKRAC .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-6B9Lph6WbNEuKRAC #statediagram-barbEnd{fill:#9370db}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-state .divider{stroke:#9370db}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-6B9Lph6WbNEuKRAC .note-edge{stroke-dasharray:5}#mermaid-svg-6B9Lph6WbNEuKRAC .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-6B9Lph6WbNEuKRAC .error-icon{fill:#522}#mermaid-svg-6B9Lph6WbNEuKRAC .error-text{fill:#522;stroke:#522}#mermaid-svg-6B9Lph6WbNEuKRAC .edge-thickness-normal{stroke-width:2px}#mermaid-svg-6B9Lph6WbNEuKRAC .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-6B9Lph6WbNEuKRAC .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-6B9Lph6WbNEuKRAC .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-6B9Lph6WbNEuKRAC .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-6B9Lph6WbNEuKRAC .marker{fill:#333}#mermaid-svg-6B9Lph6WbNEuKRAC .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-6B9Lph6WbNEuKRAC {
color: rgba(0, 0, 0, 0.75);
font: ;
}
机械臂位姿
手眼标定程序
相机中标定板位姿
末端与相机位姿关系
使用指南
1、基础使用
基础使用是在得到多组机械臂位姿与机械臂末端相机位姿之后直接使用本程序进行计算机械臂末端与相机之间的位姿关系。
我们使用一般读到的(X,Y,Z,RX,RY,RZ)
六个数据表示
安装测试
-
下载编译
git clone https://gitee.com/ohhuo/handeye-calib.git
cd handeye-calib
catkin_make or catkin build
-
修改base_hand_on_eye_calib.launch文件中,base_handeye_data参数为从机械臂位姿和标定板位姿所在的配置文件所在的绝对目录,可以使用launch文件的find
。
-
运行程序
source devel/setup.bash
roslaunch handeye-calib base_hand_on_eye_calib.launch
-
查看结果 程序会根据配置文件中的坐标进行计算,最终输出如下数据(单位毫米,弧度制):
数据包含不同算法下计算结果,以及计算结果的标准差和方差等数据。
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+(比赛奖金)
目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小智,一起交流技术,学习机器人 